1 条题解

  • 0
    @ 2024-3-2 18:08:56

    本题是一道难度不高的模拟题。

    唯一需要注意的是,进入面试的人数并不一定就是m×1.5\lfloor m \times 1.5 \rfloor,因为有可能会出现和第 m×1.5m \times 1.5 名分数相同但排在第 m×1.5m \times 1.5 名后面的选手。

    AC代码:

    #include<bits/stdc++.h>
    #define ll long long
    using namespace std;
    const ll N=5005;
    ll n,m,k,p,ans;
    struct node{
        ll id,val;
    }a[N];
    bool cmp(node x,node y){
        return x.val==y.val?x.id<y.id:x.val>y.val;
    }
    vector<node> vec; // 用于存储进入面试的选手
    int main(){
        scanf("%lld%lld",&n,&m);
        k=floor(1.5*m);
        for(ll i=1;i<=n;i++)
            scanf("%lld%lld",&a[i].id,&a[i].val);
        sort(a+1,a+1+n,cmp);
        p=a[k].val;
        for(ll i=1;i<=n;i++)
            if(a[i].val>=p)
                vec.push_back(a[i]),ans++;
            else
                break; // 如果a[i].val<p,那么后面的元素也一定会小于p,就可以直接break掉
        printf("%lld %lld\n",p,ans);
        for(ll i=0;i<vec.size();i++)
            printf("%lld %lld\n",vec[i].id,vec[i].val);
        return 0;
    }
    
    • 1

    [NOIP2009 普及组] 分数线划定

    信息

    ID
    676
    时间
    1000ms
    内存
    125MiB
    难度
    4
    标签
    递交数
    125
    已通过
    62
    上传者