noip模拟赛 轰炸

题目描述

C国和W国爆发了战争!YJC决定对W国的n个城市进行轰炸。每个城市都有一个重要度ai。设xi=‘重要度大于ai的城市数+1’,那么编号为i城市就是第xi个被轰炸的城市。显然这样能保证重要度大的城市先被轰炸,重要度相同的城市同时被轰炸。现在YJC想知道,对于每一个i,xi等于多少?

输入输出格式

输入格式:

第一行包含一个整数n,表示城市个数。

第二行包含n个整数,第i个整数ai表示第i个城市的重要度。

输出格式:

一行,包含n个整数,第i个整数xi表示第i个城市是第几个被轰炸的城市。

输入输出样例

输入样例#1:
5
3 1 3 1 1
输出样例#1:
1 3 1 3 3

说明

对于100%的数据,满足1≤n≤2000,1≤ai≤10^9。

分析:noipd1t1难度,直接排序判个重就好了.

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>

using namespace std;

int n,ans[2010];

struct node
{
    int x, id;
}e[2010];

bool cmp(node a, node b)
{
    return a.x > b.x;
}

int main()
{
    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
    {
        scanf("%d", &e[i].x);
        e[i].id = i;
    }
    sort(e + 1, e + 1 + n, cmp);
    for (int i = 1; i <= n; i++)
    {
        ans[e[i].id] = i;
        for (int j = i - 1; j >= 1; j--)
            if (e[j].x == e[i].x)
                ans[e[i].id]--;
    }
    for (int i = 1; i <= n; i++)
        printf("%d ", ans[i]);

    return 0;
}
原文地址:https://www.cnblogs.com/zbtrs/p/7587367.html