2 条题解

  • 0
    @ 2022-07-28 21:36:30

    #include<bits/stdc++.h>
    using namespace std;

    #define ll long long int
    namespace binary_search
    {
    ll lower(ll start, ll end, ll target, function<ll(ll)> func)
    {
    ll l = start, r = end;
    while(l<r)
    {
    ll mid = (l+r)/2;
    if(func(mid) < target) l = mid+1;
    else r = mid;
    }
    return l;
    }
    };

    void solve()
    {
    int n;cin>>n;
    int a[n+1][2];
    for(int i=1;i<=n;i++)
    cin>>a[i][0]>>a[i][1];
    cout<<binary_search::lower(1, n+1, 1, [&](int x){
    int t = 0;
    for(int i=1;i<=n;i++)
    {
    if(a[i][0]>=x-1-t && a[i][1] >=t)
    t++;
    }
    return t<x;
    })-1<<'\n';
    }
    int main()
    {
    int t;cin>>t;while(t--) solve();
    return 0;
    }

  • 0
    @ 2022-01-30 23:44:43

    二分法枚举能邀请的人数\(x \in [1, n]\)并检验。
    检验方法:
    若邀请x人,则邀请的人中,成绩最好的人,必须满足\(a_i\ge 0, b_i\ge x\)
    第二好的人,有\(a_i\ge 1, b_i\ge x-1\)
    以此类推,看能不能顺利邀请\(x\)人。

    #include<bits/stdc++.h>
    using namespace std;
    
    #define ll long long int
    namespace binary_search
    {
        ll lower(ll start, ll end, ll target, function<ll(ll)> func)
        {
            ll l = start, r = end;
            while(l<r)
            {
                ll mid = (l+r)/2;
                if(func(mid) < target) l = mid+1;
                else r = mid;
            }
            return l;
        }
    };
    
    void solve()
    {
        int n;cin>>n;
        int a[n+1][2];
        for(int i=1;i<=n;i++) 
            cin>>a[i][0]>>a[i][1];
        cout<<binary_search::lower(1, n+1, 1, [&](int x){
            int t = 0;
            for(int i=1;i<=n;i++)
            {
                if(a[i][0]>=x-1-t && a[i][1] >=t)
                    t++;
            }
            return t<x;
        })-1<<'\n';
    }
    int main()
    {
        int t;cin>>t;while(t--) solve();
        return 0;
    }
    
  • 1

信息

ID
1315
难度
6
分类
(无)
标签
(无)
递交数
24
已通过
9
通过率
38%
被复制
1
上传者