内存:128  时间:1

题目描述

某一天,hcbbt等一群弱菜去tamara巨巨家里一起玩了一个卡牌游戏。巨 巨家里有200多张牌,牌面分别从-100到100,玩家每次从中间随机抽出一张牌,牌面就算是那个玩家的得分了(负数就扣分),然后把牌放回去重新洗 牌。玩完n局后看谁的得分多,谁就是赢家。如果最后有多个最高分,那么这些最高分获得者,在游戏的过程中最先达到或超过最高分的那个玩家就是赢家。

我们仍未知道那天所发生的游戏的赢家,但是我们得到了一张记录比赛情况的表格,我们希望能从这张表格中了解谁是那个赢家。

输入

第一行是一个正整数n,表示一共抽了几次牌。 接下去有n行,每行有一个名字name和一个分数score,表示这次的抽牌者和抽出来的牌的牌面。name为只包括英文字符的字符串,长 度<=50,且-100<=score<=100,0<n<1000。

输出

输出只有一行,为最后的赢家的名字。

样例输入

3
hcbbt 20
yagami 100
hcbbt 80

样例输出

yagami

提示

代码如下

#include <iostream>
#include <cstdio>
#include <string>
#include <map>
using namespace std;

map<string, int> m;
map<string, int> rec;
int n, score[1010];
string name[1010];

int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		cin >> name[i] >> score[i];
		m[name[i]] += score[i];
	}
	int mm = 0, cnt = 0;
	for (map<string, int>::iterator i = m.begin(); i != m.end(); i++) {
		if ((*i).second > mm) {
			mm = (*i).second;
		   	cnt = 0;
			rec.clear();
			rec[(*i).first] = 0;
		}
		else if ((*i).second == mm) {
			rec[(*i).first] = 0;
		}
	}

	if (rec.size() == 1)
		cout << (*rec.begin()).first << endl;
	else for (int i = 0; i < n; i++) {
		if (rec.count(name[i])) {
			rec[name[i]] += score[i];
			if (rec[name[i]] >= mm) {
				cout << name[i] << endl;
				break;
			}
		}
	}
	return 0;
}

代码来源于互联网,仅供参考!