知道每个人前 面比自己高的人的个数,先从小到大排序,先确定i自己的身高的大小(就是自己再人群里身高排第几),再把序列中1~i-1>=i.h的高度都加1
code:
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct Node
{
int num;
char str[20];
int a;
int h;
}p[3010];
bool cmp(Node x,Node y)
{
return x.a<y.a;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>p[i].str>>p[i].a;
p[i].num=i;
}
sort(p+1,p+1+n,cmp);
int flag=0;
for(int i=1;i<=n;i++)
{
if(p[i].a>=i)
{
flag=1;
break;
}
p[i].h=i-p[i].a;
for(int j=1;j<i;j++)
{
if(p[j].h>=p[i].h)
p[j].h++;
}
}
if(flag)
printf("-1\n");
else
{
for(int i=1;i<=n;i++)
{
printf("%s %d\n",p[i].str,p[i].h);
}
}
return 0;
}