爱奇艺全国高校算法大赛初赛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;
}
posted @ 2017-05-15 08:19 Fighting_Heart 阅读(...) 评论(...) 编辑 收藏