李明是个好学生。他每次考试后总是问老师他在班里的排名,这让老师很累。于是老师给了他班上所有学生的分数,让他自己算排名。不过,他有那么多同学,也不能轻易知道自己的排名。所以他向你寻求帮助,你能帮助他吗?
输入 输入的第一行包含一个整数 N (1 <= N <= 10000),表示李明班上的学生人数。然后来N行。每行包含一个名称,名称不超过 30 个字母。这些名字代表了李明班上的所有学生,你可以假设名字是不同的。 在第 (N+2) 行,你会得到一个整数 M (1 <= M <= 50),它代表考试的数量。以下 M 个部分分别代表一个考试。每个考试有 N 行。在每一行中,有一个不超过 100 的正整数 S,以及一个必须出现在上述名称列表中的名称 P。这意味着在这次考试中,学生 P 获得了 S 分数。已确认姓名列表中的所有姓名都将出现在考试中。
输出 输出包含 M 行。在第i行,你应该在第i次考试后给出李明的等级。排名由总分决定。如果李明和其他人的分数一样,那么他在排名榜上总是排在其他人的前面。
Sample
Input | Output |
---|---|
3 Li Ming A B 2 49 Li Ming 49 A 48 B 80 A 85 B 83 Li Ming | 1 2 |
#include<map>
#include<iostream>
#include<string>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
int n,i,m,b;
char a[40];
scanf("%d",&n);
b=n;
getchar();
string name;
while(n--)
{
getline(cin,name);//输入可以带空格的字符串 (string)
}
scanf("%d",&m);
map<string,int> newmap;
map<string,int>::iterator it;//迭代器
while(m--)
{
int sorce;
for(i=1;i<=b;i++)
{
scanf("%d",&sorce);
getchar();
getline(cin,name);
newmap[name]+=sorce;//题目为总分排名
}
int maxn=0,place=1;//最大值,排名
it=newmap.find("Li Ming");
maxn=it->second;//可以看为指针指向 Li Ming的成绩
for(it=newmap.begin();it!=newmap.end();it++)
{
if(it->second>maxn)
place++;
}
printf("%d\n",place);
}
return 0;
}