题目大意:给出n个人的姓名,以及杀敌数量,按照杀敌数从高到低排序,数量相同的按照姓名字典序排列。再给出m个查询,输出对应人物的比他杀敌数多的人数+1,和他并列多的人数+1,如果无并列的,第二项不输出。
思路:数据量很小,直接模拟。
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <iostream>
#include <cmath>
using namespace std;
const int maxn = 222;
struct node
{
string name;
int kill;
int id;
int fuck;
bool operator < (const node &a)const
{
if(kill == a.kill)
return name < a.name;
return kill > a.kill;
}
}p[maxn];
int main()
{
int n, m;
string str;
while(scanf("%d", &n) && n)
{
for(int i = 0; i < n; i++)
{
cin >> p[i].name >> p[i].kill;
}
sort(p, p+n);
for(int i = 0; i < n; i++)
{
cout << p[i].name << " " << p[i].kill << endl;
p[i].id = i+1;
if(i == 0)
{
p[i].fuck = 1;
}
else if(i != 0)
{
if(p[i].kill != p[i-1].kill)
{
p[i].fuck = i+1;
}
else
{
p[i].fuck = p[i-1].fuck;
}
}
}
scanf("%d", &m);
while(m--)
{
cin >> str;
int a, b;
for(int i = 0; i < n; i++)
{
if(str == p[i].name)
{
a = p[i].id-(p[i].id-p[i].fuck);
b = p[i].id-p[i].fuck+1;
if(b == 1)
{
printf("%d\n", a);
}
else if(b != 1)
{
printf("%d %d\n", a, b);
}
}
}
}
}
return 0;
}