HDU 4190 2分
HDU 4190 二分
不多说了,二分题目,都是别人提示了,我喜欢自己想出来,不过刚刚看到这题,就想到这个方法了,思路没定行,出题人就喊着二分了,╮(╯▽╰)╭
#include <iostream> using namespace std; int city[500001]; int n,m; inline bool Jude(int mid) { int sum=0; for (int i=0;i<n;i++) { sum+=city[i]/mid; if(city[i]%mid) sum++; if(sum>m) return false; } return true; } int main() { int mid,i,st,en; while(scanf("%d%d",&n,&m)!=EOF&&(n!=-1||m!=-1)) { st=0;//装的最少的 en=-1;//装的最多的 for(i=0;i<n;i++) { scanf("%d",&city[i]); if(city[i]>en) en=city[i]; } while (st<en) { mid=(st+en)>>1; if(Jude(mid))//投票箱够 { en=mid; } else//投票箱不够 { st=mid+1; } } printf("%d\n",en); } return 0; }