C. New Year Ratings Change

来源:互联网 发布:长袖连衣裙淘宝网秋季 编辑:程序博客网 时间:2024/05/22 06:47

理解题意是关键。。。。

思路:

1、先把A数列排序,用pair或struct,记录好数值和下标的对应关系;

2、然后把A数列最小的值开始填到B数列,第一个最小的值直接填到B就可以了;

3、然后把A数列当前的值和上一个填写值比较,填写较大值到B数列中;

4、利用已经记录好的下标就可以快速定位需要填写在B数列中的那个位置了。

#include <stdio.h>#include<algorithm>using namespace std;const int maxn=300009;struct ratings{    int id;    int ra;    int ans;}s[maxn];int cmpid(ratings x,ratings y){    return x.id<y.id;}int cmpra(ratings x,ratings y){    return x.ra<y.ra;}int main(){    int n,i;    while(scanf("%d",&n)==1)    {        for(i=1;i<=n;i++)        {            scanf("%d",&s[i].ra);//输入ra            s[i].id=i;//记录id        }        sort(s+1,s+n+1,cmpra);//对ra进行排序        int cur=s[1].ra;        for(i=1;i<=n;i++)        {            if(s[i].ra<=cur)            {                s[i].ans=cur;                cur++;            }            else            {                s[i].ans=s[i].ra;                cur=s[i].ra+1;            }        }        sort(s+1,s+n+1,cmpid);        for(i=1;i<n;i++)            printf("%d ",s[i].ans);        printf("%d\n",s[i].ans);    }    return 0;}

0 0
原创粉丝点击