Gym 101194D Ice Cream Tower (双指针扫描)

来源:互联网 发布:如果女朋友是病娇 知乎 编辑:程序博客网 时间:2024/06/05 14:27

这道题的重要方法之一是双指针扫描,它的时间复杂度只有O(N)

/*双指针扫描*/#include<iostream>#include<algorithm>using namespace std;typedef long long ll;const int maxn = 300005;ll a[maxn],b[maxn];int t,T,n,k;bool judge(int x){    for(int i = 0 ;i< x;i++)        a[i] = b[i];    int p = x;    for(int i =x ;i< x*k;i++)    {        while(b[p]<a[i-x]*2 && p<n) p++;        if(p==n)            return 0;        a[i]=b[p];        p++;    }    return 1;}int bitsection(int l,int r){    while(l<r)    {        int mid = (l+r+1)>>1;        if(judge(mid))            l=mid;        else r=mid-1;    }    return l;}int main(){    cin>>T;    for(t=1;t<=T;t++)    {        cin>>n>>k;        for(int i = 0; i < n; i++)            cin>>b[i];        sort(b,b+n);        ll ans =bitsection(0,n/k);        printf("Case #%d: %lld\n",t,ans);    }    return 0;}
原创粉丝点击