22.1.29Rank List (map的使用,输入带空格的字符串)

李明是个好学生。他每次考试后总是问老师他在班里的排名,这让老师很累。于是老师给了他班上所有学生的分数,让他自己算排名。不过,他有那么多同学,也不能轻易知道自己的排名。所以他向你寻求帮助,你能帮助他吗?

输入 输入的第一行包含一个整数 N (1 <= N <= 10000),表示李明班上的学生人数。然后来N行。每行包含一个名称,名称不超过 30 个字母。这些名字代表了李明班上的所有学生,你可以假设名字是不同的。 在第 (N+2) 行,你会得到一个整数 M (1 <= M <= 50),它代表考试的数量。以下 M 个部分分别代表一个考试。每个考试有 N 行。在每一行中,有一个不超过 100 的正整数 S,以及一个必须出现在上述名称列表中的名称 P。这意味着在这次考试中,学生 P 获得了 S 分数。已确认姓名列表中的所有姓名都将出现在考试中。 

输出 输出包含 M 行。在第i行,你应该在第i次考试后给出李明的等级。排名由总分决定。如果李明和其他人的分数一样,那么他在排名榜上总是排在其他人的前面。 

Sample

InputOutput
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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ACM/ICPC比赛成绩会按照一定的规则计算各位参赛者的名次并实时显示排行榜,计算规则主要参考解题的数量及罚时,解题数量越多,罚时越少,则排名越高。 解题数量很容易计算,只需考察比赛中标记为“Accepted”的题数即可。罚时计算则相对复杂,对于提交到竞赛系统中的每道题目,系统会给出一个罚时,为从比赛开始到该题提交的代码第一次被“Accepted”的时间。请注意,只是第一次“Accepted”。对于“Accepted”之前的每次提交,都有20分钟的罚时,但如果该题目最终未解出,则不计罚时。 先在有一个比赛的题目通过情况记录,请生成该比赛的排行榜。 示例输入: 2008-04-25 18:00:00 2008-04-25 23:30:00 1000 1001 1002 1003 1004 38 602203621 1002 Accepted 756K 30MS C++ 2008-04-25 18:04:59 37 liheyuan 1002 Wrong_Answer 768K 10MS C++ 2008-04-25 18:28:05 36 ftest 1000 Accepted 888K 10MS C++ 2008-04-25 21:30:32 35 ftest 1000 Accepted 904K 10MS C++ 2008-04-25 21:30:55 34 gaojianwei 1000 Accepted 768K 10MS C 2008-04-25 22:15:58 33 gaojianwei 1001 Wrong_Answer 904K 10MS C 2008-04-25 22:18:01 32 gaojianwei 1004 Accepted 768K 10MS C 2008-04-25 22:24:23 31 lzz 1000 Accepted 904K 10MS C++ 2008-04-25 23:29:27 30 lzz 1001 Wrong_Answer 904K 10MS C++ 2008-04-25 23:30:17 示例输出: Rank Name Solved 1000 1001 1002 1003 1004 Penalty 1 gaojianwei 2 4:15:58 -1 0 0 4:24:23 8:40:21 2 602203621 1 0 0 0:04:59 0 0 0:04:59 3 ftest 1 3:30:32 0 0 0 0 3:30:32 4 lzz 1 5:29:27 0 0 0 0 5:29:27 5 liheyuan 0 0 0 -1 0 0 0:00:00

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值