# define some variable
n = int(raw_input())
maxScore = {}
input = []
# n times input
while n > 0:
list = raw_input().split()
input.append(list)
name = list[0]
score = int(list[1])
if maxScore.has_key(name):
maxScore[name] += score
else:
maxScore[name] = score
n -= 1
# find maxScore = ans
ans = 0
for key in maxScore:
ans = max(ans , maxScore[key])
# def to find the time >= ans
def getTime(str):
sum = 0
cnt = 0
for list in input:
name = list[0]
score = int(list[1])
if name == str:
sum += score
if sum >= ans:
return cnt
cnt += 1
# one by one if score == ans
time = 2147483647
for key in maxScore:
if maxScore[key] == ans:
t = getTime(key)
if time > t:
time = t
ansName = key
# output
print ansName
然后是C++:
这道题其实几个循环就好:循环读入咱们就不算了,循环1st判断最高值是哪个,循环2nd找到第一次超过这个最高值的是谁,然后,把他给我扔出去!!!
#include <iostream>
#include <map>
#include <string.h>
#include <algorithm>
using namespace std;
int score[1010];
map<string, int> p1,p2;
string name[1010];
int main()
{
int n,i,j;
while(cin>>n)
{
int m = 0;
for(i = 0;i < n;i ++)
{
cin>>name[i]>>score[i];
p1[name[i]] += score[i];
}
for(i = 0;i < n;i ++)
if(p1[name[i]] > m) m = p1[name[i]];
for(i = 0;i < n;i ++)
{
p2[name[i]] += score[i];
if(p2[name[i]] >= m&&p1[name[i]] == m)
{
cout<<name[i]<<endl;
break;
}
}
}
}