洛谷P2777

玄学题,一开始我居然看成了单调队列,emmmm

贪心:每个人的最优的分时a[i]+n;

其余要想他得到冠军,就要比他高分的人获得的最大得分是a[i]+n,要让初始分数最高的人拿到最低的排名,证明只可意会不可言传,OI贪心就是比较玄学

//洛谷P2777
//#include<bits/stdc++.h>
#include       <map>
#include       <set>
#include     <ctime>
#include     <cmath>
#include     <queue>
#include     <stack>
#include    <cstdio>
#include    <vector>
#include   <cstring>
#include   <cstdlib>
#include <iostream>
#include<algorithm>
#include<cmath>
#include<stdlib.h>
using namespace std;
int n,a[300001],maxx,ans,c[300001];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        
    }
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++)
        c[i]=a[i]+n-i+1;
    for(int i=1;i<=n;i++)
        maxx=max(maxx,c[i]);
    for(int i=1;i<=n;i++)
    {
        if(a[i]+n>=maxx)
            ans++;
    }
    cout<<ans<< endl;
}

猜你喜欢

转载自www.cnblogs.com/xzx-1228/p/10902437.html