标签:信息学 max sum 1229 时间 奥赛 使用 小时 电池
1229:电池的寿命
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 6005 通过数: 3338
【题目描述】
小S新买了一个掌上游戏机,这个游戏机由两节5号电池供电。为了保证能够长时间玩游戏,他买了很多5号电池,这些电池的生产商不同,质量也有差异,因而使用寿命也有所不同,有的能使用5个小时,有的可能就只能使用3个小时。显然如果他只有两个电池一个能用5小时一个能用3小时,那么他只能玩3个小时的游戏,有一个电池剩下的电量无法使用,但是如果他有更多的电池,就可以更加充分地利用它们,比如他有三个电池分别能用3、3、5小时,他可以先使用两节能用3个小时的电池,使用半个小时后再把其中一个换成能使用5个小时的电池,两个半小时后再把剩下的一节电池换成刚才换下的电池(那个电池还能用2.5个小时),这样总共就可以使用5.5个小时,没有一点浪费。
现在已知电池的数量和电池能够使用的时间,请你找一种方案使得使用时间尽可能的长。
【输入】
输入包含多组数据。每组数据包括两行,第一行是一个整数N(2≤N≤1000),表示电池的数目,接下来一行是N个正整数表示电池能使用的时间。
【输出】
对每组数据输出一行,表示电池能使用的时间,保留到小数点后1位。
【输入样例】
2 3 5 3 3 3 5
【输出样例】
3.0 5.5
【分析】
首先找出电池时间最长的那个电池max,然后将其和剩余的电池分开,如果max电池的时间比剩余的电池时间长度之和都长,那么游戏机能玩的时间就是剩余电池时间之和,否则,max就整合其他电池,使其为总和的一半,游戏机能玩的时间就是max。所以,求解步骤为:
(1)求最大值max,以及总电量sum
(2)sum-max < max,说明 max > 其它电池时间之和,ans = sum-max
(3)sum-max > max,说明 max < 其它电池时间之和,ans = sum/2
【参考代码】
#include <stdio.h>
#define N 1010
int a[N];
int main()
{
int i,n,max,s;
while(scanf("%d",&n)!=EOF)
{
s=0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
s+=a[i];
}
max=a[0];
for(i=0;i<n;i++)
{
if(a[i]>max)
max=a[i];
}
if((s-max)<max)
printf("%.1lf\n",(s-max)*1.0);
else
printf("%.1lf\n",s/2.0);
}
return 0;
}
http://ybt.ssoier.cn:8088/problem_show.php?pid=1229
标签:信息学,max,sum,1229,时间,奥赛,使用,小时,电池 来源: https://blog.csdn.net/lvcheng0309/article/details/118299013
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。