爱奇艺全国高校算法大赛初赛B
二分,验证。
二分一下答案,然后验证一下统计个数能否满足即可。
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
long long k;
long long a[100010];
int sz;
long long sum;
bool ok(long long x)
{
long long t=0;
for(int i=0;i<sz;i++)
{
t = t + a[i]/x;
}
if(t>=k) return 1;
return 0;
}
int main()
{
scanf("%lld",&k);
long long p;
while(~scanf("%lld",&p))
{
a[sz] = p;
sum=sum+a[sz];
sz++;
}
if(sum<k)
{
printf("0\n");
return 0;
}
long long L = 1, R = 1000000000, ans;
R = R*R;
while(L<=R)
{
long long mid = (L+R)/2;
if(ok(mid)) ans = mid, L = mid+1;
else R = mid-1;
}
printf("%lld\n",ans);
return 0;
}

浙公网安备 33010602011771号