标签:wrapper Edito pre can 就是 计算 style 反转 不可
运行时间限制: 1000 | 运行内存限制: 65536 |
作者: scsyuanbaoku | 是否specialjudge: False |
你正在玩一款新的游戏,在游戏中你有N个用于给你的战士补充能量的道具和M个战士。这N个道具都有一个能量值,代表该道具能给战士提供的总能量,给战士补充后该值会永久减少,该值为0后该道具就没有用了。例如某道具的能量值为500,如果用它给一个战士补充了300的能量,则该道具的能量值变为200。现在你要带领你的战士们出征了,在出征前你要给这M个战士补充能量。假设初始时每个战士的能量都为0,补充完后所有的战士的能量都一样。如果一个战士在补充能量时只能使用1个道具(1个道具可以给若干个战士补充能量)。现在请你写一段程序来计算一下,你最大能给每个战士补充的能量值是多少?
输入:
第一行为2个整数,分别代表N(1<=N<=10000)和M(1<=M<=20000)
第二行为N个整数,代表这N个道具能提供的能量值(所有能量值大于等于100且小于等于2000000)。
输出:
为一个整数,代表你最大能给每个战士补充的能量值。测试数据保证有解。
5 13
765 506 483 329 492
164
#include<stdio.h> #include<stdlib.h> int a[10005],m,n,mx; bool f(int z){ int s=0; for(int i=1;i<=n;++i) s+=a[i]/z; return m<=s; } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;++i){ scanf("%d",&a[i]); if(a[i]>mx) mx=a[i]; } int l=0,r=mx+1; while(l<r-1){ int mid=(l+r)/2; if(f(mid)) l=mid; else r=mid; } printf("%d",l); system("pause"); return 0; }
标签:wrapper Edito pre can 就是 计算 style 反转 不可
原文地址:https://www.cnblogs.com/bzmd/p/10202099.html