学长们说是签到题难度,瞬间就心凉了!
大体题意:
给你一个n,代表有n个人,没个人想要至少a[i]分数,但分配分数又要各不相同!求最后结果!
思路:
向舍友学习了一下方法!自己做总超时!
建立一个结构体,记录id编号,和初始值!
刚上来先按初始值排序!
然后从i = 1 到 i = n-1 遍历 发现比前一个小,就变为前一个的加1
最后在按编号排序输出答案就行了!
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int maxn = 300000 + 10;
struct rating{
int id,beg;
}rat[maxn];
bool cmp1(const rating&a,const rating &b){
return a.beg < b.beg;
}
bool cmp2(const rating&a,const rating &b){
return a.id < b.id;
}
int main(){
int n;
while(scanf("%d",&n) == 1){
for (int i = 0; i < n; ++i){
scanf("%d",&rat[i].beg);
rat[i].id = i;
}
sort(rat,rat+n,cmp1);
for (int i = 1; i < n; ++i){
if (rat[i].beg <= rat[i-1].beg)
rat[i].beg = rat[i-1].beg+1;
}
sort(rat,rat+n,cmp2);
for (int i = 0 ;i < n; ++i){
if (i)printf(" ");
printf("%d",rat[i].beg);
}
printf("\n");
}
return 0;
}