标签:
5 WuSong 12 LuZhishen 12 SongJiang 13 LuJunyi 1 HuaRong 15 5 WuSong LuJunyi LuZhishen HuaRong SongJiang 0
HuaRong 15 SongJiang 13 LuZhishen 12 WuSong 12 LuJunyi 1 3 2 5 3 1 2
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXN 210
using namespace std;
struct rec
{
char str[1010];
int val;
int p1;//在新序列中所占位置
int p2;//在等值序列中所占位置
};
rec num[MAXN];
bool cmp(rec a, rec b)
{
if(a.val != b.val)
return a.val > b.val;
else
return strcmp(a.str, b.str) < 0;
}
int N;
int main()
{
int M;char ss[1010];
while(scanf("%d", &N), N)
{
for(int i = 1; i <= N; i++)
{
scanf("%s%d", num[i].str, &num[i].val);
num[i].p2 = 1;
}
sort(num+1, num+N+1, cmp);
num[1].p1 = num[1].p2 = 1;
printf("%s %d\n", num[1].str, num[1].val);
for(int i = 2; i <= N; i++)
{
printf("%s %d\n", num[i].str, num[i].val);
bool flag = false;;
for(int j = i-1; j >= 1; j--)
{
if(num[i].val == num[j].val)//并列的
{
flag = true;
num[i].p2++;
}
else//找到不同的 一位 num[j]
break;
}
if(flag)//前面有并列的
num[i].p1 = num[i-1].p1;//就是前一位的排名
else//没有并列的
num[i].p1 = num[i-1].p1 + num[i-1].p2;//前一位的排名 + 在等值序列中的排名
}
scanf("%d", &M);
while(M--)
{
scanf("%s", ss);
for(int i = 1; i <= N; i++)
{
if(strcmp(num[i].str, ss) == 0)
{
printf("%d", num[i].p1);
if(num[i].p2 != 1)//第一名不输出
printf(" %d", num[i].p2);
break;
}
}
printf("\n");
}
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
hdoj 5131 Song Jiang's rank list 【模拟】
标签:
原文地址:http://blog.csdn.net/chenzhenyu123456/article/details/47682889