P4090 [USACO17DEC] Greedy Gift Takers P

原题链接

题解

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;
}
posted @   纯粹的  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示