首页 > 其他分享 >P4090 [USACO17DEC] Greedy Gift Takers P

P4090 [USACO17DEC] Greedy Gift Takers P

时间:2024-02-10 18:12:48浏览次数:35  
标签:头牛 int USACO17DEC Greedy P4090 Takers 礼物

原题链接

题解

1.如果前 \(7\) 头牛能全部能拿到礼物,但是这前 \(7\) 头牛里有 \(4\) 头牛更新在前 \(4\) 的位置,请问第 \(8\) 头牛能否得到礼物?
答案是不行,因为前 \(4\) 头牛会在前 \(4\) 的位置形成循环

2.假如恰好第 \(x\) 头牛没有礼物,那么牛 \(x\) 之后的牛都得不到礼物,因为不可能跨过牛 \(x\) 去拿礼物,由此得出一个现象:
牛 \(x\) 之前的牛都能拿到礼物,之后的牛都拿不到礼物,这就是二分的由来

\(Code\)

#include<bits/stdc++.h>
using namespace std;
int a[100005];
int n;
int solve(int x)
{
    int cnt[n+5]={0},sum=0;
    for(int i=1;i<=x;i++)cnt[a[i]]++;
    for(int i=1;i<=x;i++)
    {
        sum+=cnt[i];
        if(sum>=i)return 0;
    }
    return 1;
}
int main()
{

    cin>>n;

    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        a[i]=n-a[i];
    }

    int l=1,r=n+1;
    while(l<r-1)
    {
        int mid=(l+r)/2;
        if(solve(mid))l=mid;
        else r=mid;
    }
    cout<<n-r<<endl;
    return 0;
}

标签:头牛,int,USACO17DEC,Greedy,P4090,Takers,礼物
From: https://www.cnblogs.com/pure4knowledge/p/18012957

相关文章

  • [USACO17DEC] Greedy Gift Takers
    原题链接首先这道题的数据量1e5那么时间复杂度要保持在O(nlogn)内。先判断单调性,若k头牛拿不到礼物,那么k-1头牛也拿不到礼物,所有这题可以用二分法来做(11110000)。二分部分省略,我们直接来分析check部分(如下)。boolcheck(intk){for(inti=1;i<=n-k+1;i++)b[i]=a[i];s......
  • P4084 [USACO17DEC]Barn Painting G
    #include<bits/stdc++.h>usingnamespacestd;constlonglongmod=1e9+7;classDP_on_tree{public: #definelllonglong lln,k; llfree[100001]; llf......