800502电池的寿命
难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述

小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
其他说明
数据范围:输入中已经说明。

题解:很奇妙的题。首先,如果最大的那个电池比其他(n-1)个的和还要大,那么最好的方案就是轮流用,答案是那(n-1)个的和。

如果不是,窝萌可以先想一想电池是否会被用完,答案是肯定的。

证明:如果不比其它(n-1)个电池的和要大,那么窝萌这么想:先用那个最大的去削第二大的(动态更新第二大),那么早晚有一天最大的会撑不住(因为它比其他的电池和要小,不能横扫千军嘛),于是它成为了第二大。。。如此往复,那么所有的电池会经历排名逐渐提升再下降的人生,所以窝萌可以说电池的电量是平均的,然后自己再YY一下就知道电池肯定能用完。。。

那就好办了,答案就是总和除以2呗?

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
#define PAU putchar(' ')
#define ENT putchar('\n')
using namespace std;
const int maxn=+;
int n,A[maxn];
inline int read(){
int x=,sig=;char ch=getchar();
for(;!isdigit(ch);ch=getchar())if(ch=='-')sig=;
for(;isdigit(ch);ch=getchar())x=*x+ch-'';
return sig?x:-x;
}
inline void write(int x){
if(x==){putchar('');return;}if(x<)putchar('-'),x=-x;
int len=,buf[];while(x)buf[len++]=x%,x/=;
for(int i=len-;i>=;i--)putchar(buf[i]+'');return;
}
void init(){
double ans;
while(scanf("%d",&n)==){
ans=;
for(int i=;i<=n;i++){
A[i]=read();ans+=A[i];
}sort(A+,A+n+);
if(A[n]>ans-A[n])ans=ans-A[n];
else ans=ans*0.5;
printf("%.1f\n",ans);
}
return;
}
void work(){
return;
}
void print(){
return;
}
int main(){init();work();print();return ;}

最新文章

  1. 配置mysql允许远程连接的方法
  2. Visual Studio 2015 新建MVC项目 Package Manager Console不能使用 (HRESULT: 0x80131500)
  3. 再说memcache的multiget hole(无底洞)
  4. Stanford机器学习笔记-1.线性回归
  5. HW 研发体系机构的几个术语
  6. Shiro源码分析-初始化-Realm
  7. Oracle -----视图
  8. Java图片处理(二)图片加水印
  9. VMware系统运维(十二)部署虚拟化桌面 Horizon View 5.2 Viewcomposer安装
  10. ZigZag Conversion1
  11. mysql自动备份策略
  12. C++ 11 笔记 (六) : 随机数
  13. Java 中UDP原理机制及实现方式介绍(建议阅读者阅读前了解下Java的基础知识,一方便理解)
  14. [转] boost库的Singleton的实现以及static成员的初始化问题
  15. 深入理解urllib、urllib2及requests
  16. WIN7 数据源配置问题(32位&amp;&amp;64位)
  17. lPC1788的串口通讯
  18. 改变radio默认样式
  19. 文档发布工具mkdocs
  20. 在 Docker 中使用 mysql 的一些技巧

热门文章

  1. [Javascript] Using console.count to Count Events
  2. C#编写QQ找茬外挂
  3. MyISAM与InnoDB的区别
  4. 《Android开发艺术探索》读书笔记 (2) 第2章 IPC机制
  5. 关于 yii 验证码显示, 但点击不能刷新的处理
  6. codevs2618核电站问题
  7. 使用Android SDK Manager自动下载速度慢解决方法
  8. 移动页面缩放方法之(二)控制HTML
  9. java 项目request.getParameter(&quot;&quot;)接收不到值
  10. asp.net中调用COM组件发布IIS时常见错误 80070005解决方案