題目大意:給出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;
}