2016icpc China-final D题

来源:互联网 发布:linux能用sqlserver吗 编辑:程序博客网 时间:2024/05/16 14:58

虽然最后也没提交对,但是最后还是把代码贴出来吧,留个纪念

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<queue>#include<map>#include<algorithm>#include<vector>using namespace std;long long a[300005],b[300005];int n,k;int solve(int num){    int pos,i,cnt;    for(i=0;i<num;i++)        b[i]=a[i];    for(pos=num,cnt=1;cnt<k&&pos<n;)    {        for(i=0;i<num&&pos<n;)        {            if(a[pos]>=2*b[i])            {                b[i]=a[pos];                i++;            }            pos++;        }        if(i>=num)            cnt++;    }    if(cnt>=k)        return 1;    else        return 0;}int main(){    int t,cas=0,res,i,l,r;    scanf("%d",&t);    while(t--&&scanf("%d%d",&n,&k)!=EOF)    {        for(i=0;i<n;i++)            scanf("%lld",a+i);        sort(a,a+n);        l=1,r=n/k;        while(l<r)        {            int mid=(l+r+1)/2;            if(solve(mid))                l=mid;            else                r=mid-1;        }        printf("Case #%d: %d\n",++cas,l);    }    return 0;}

0 0
原创粉丝点击