小 G 和比赛

题目描述

小 G 喜欢 OI,也喜欢出毒瘤题。他喜欢根据比赛的成绩为选手计算 rating。他现在正在准备一套新的毒瘤题。

一共有 n 名选手被骗来做他的毒瘤题,每一位选手有一个正的 rating。选手们的编号为 1 到 n。第 i 名选手的 rating 是 ai。比赛还没有开始,小 G 开始预测比赛结果。

小 G 认为,每名选手的排名应该是 1+G,其中 G 表示 rating 严格比这名选手大的选手数量。也就是说,如果选手 A 的 rating 严格比选手 B 高,他的排名就一定在 B 之上;如果两名选手 rating 相同,那么他们就一定会并列。

(然而这件事情几乎不可能发生,)但小 G 依然想知道根据他的想法,每名选手的排名。

输入格式

输入的第一行包含一个整数 n(1≤n≤2000),表示这场比赛的选手数量。

输入的第二行包含 n 个整数 ai(1≤ai≤2000),第 i 个整数表示第 i 名选手的 rating。

输出格式

一行 n 个整数,表示他们的理论排名。

#include<bits/stdc++.h>
using namespace std;
int n;
struct o{
    int data,rating;
}s[1000001];
bool cmp(o x,o y){
    return x.rating>y.rating;
}
int rank[1000001];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>s[i].rating;
        s[i].data=i;
    }
    sort(s+1,s+n+1,cmp);
    for(int i=1;i<=n;i++){
        int sum=0;
        rank[s[i].data]=i;
        if(s[i].rating==s[i-1].rating) rank[s[i].data]=rank[s[i-1].data];
    }
          
    for(int i=1;i<=n;i++){
        cout<<rank[i]<<" ";
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zzxycdy/article/details/121315388