题目大意:有n块巧克力,每块巧克力有一个大小。巧克力可以切成若干份。现在要你切成大小相等的m块,且尽可能大。求这个大小。
解题思路:我们二分巧克力切成的大小,然后计算能切成多少块,判断即可。由于最大的巧克力大小为10000,所以时间复杂度为$O(nlog {10000})$。
C++ Code:
#include<cstdio> using namespace std; int n,m,a[5005]; bool ok(int x){ int cnt=0; for(int i=1;i<=n;++i) cnt+=a[i]/x; return cnt>=m; } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) scanf("%d",&a[i]); int l=1,r=10001,ans; while(l<=r){ int mid=l+r>>1; if(ok(mid)){ ans=mid; l=mid+1; }else r=mid-1; } printf("%d ",ans); return 0; }