首页 > 代码库 > poj 3232 Accelerator
poj 3232 Accelerator
http://poj.org/problem?id=3232
题意:有一个含有n辆车的车队,当前距离终点的距离已知,有m个加速器,每个加速器在一个时刻只能给一辆车用,一旦使用就会使得其速度由1变成k,加速器可以重复使用,问最快所有车辆到达终点的时间。
思路:二分枚举所需的最短时间。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define maxn 300000 5 #define ll long long 6 using namespace std; 7 8 ll t,n,m,k; 9 ll a[maxn];10 11 bool ok(ll c)12 {13 ll cnt=0,x=c*m;14 for(int i=0; i<n; i++)15 {16 if(a[i]<=c) continue;17 if((a[i]-c)%(k-1)==0)18 cnt=((a[i]-c)/(k-1));19 else20 cnt=((a[i]-c)/(k-1))+1;21 if(cnt>c) return false;22 x-=cnt;23 if(x<0) return false;24 }25 return true;26 }27 28 29 int main()30 {31 scanf("%lld",&t);32 while(t--)33 {34 scanf("%lld",&n);35 ll max1=0;36 for(int i=0; i<n; i++)37 {38 scanf("%lld",&a[i]);39 max1=max(max1,a[i]);40 }41 scanf("%lld%lld",&m,&k);42 ll l=0,r=max1;43 if(k==1)44 {45 printf("%lld\n",max1);46 continue;47 }48 int mid;49 while(l<r)50 {51 mid=(l+r)>>1;52 if(ok(mid))53 {54 r=mid;55 }56 else l=mid+1;57 }58 printf("%lld\n",l);59 }60 return 0;61 }
poj 3232 Accelerator
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。