英文渣,原题看了半天理解错了,然后各种WA,回头看了一下才发现其实是挺简单的。
意思就是一群人玩一个游戏,最多有1000轮,每一轮都会有一个角色进行加减分的操作。到最后一轮结束时,分数最大的人获得胜利,如果有多个角色同时达到最高分,则首先达到或者超过这个最高分的人获胜(这里的最高分不是真个游戏过程中产生的最高分,而是最后一轮结束后从玩家中得出的最高分)
这里使用JAVA实现,用一个hashmap保存名字及分数,每轮进行加减分,并且将当前最高分的名字及分数分别储存在winnerList和scoreList中。结束后遍历一遍map,得到最高分,最后遍历数组得到第一个达到最高分者。
源代码:
package lanQiaoCup;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
/**
* Created by Scruel on 2016/3/29.
*/
//http://codeforces.com/problemset/problem/2/A
public class CF2_A
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
HashMap<String, Integer> map = new HashMap<>();
int n = input.nextInt();
String[] winnerList = new String[n];
int[] scoreList = new int[n];
int count = 0;
int max = 0, realMax = 0;//0为初始值,则不会出现负数胜利的情况
for (int i = 0; i < n; i++)
{
String name = input.next();
int score = input.nextInt();
if (map.get(name) == null)
map.put(name, score);
else
map.replace(name, score + map.get(name));
if (realMax < map.get(name))//得到第一个最大值的人
{
scoreList[count] = map.get(name);
winnerList[count++] = name;
}
}
Set<String> set = map.keySet();
for (Iterator<String> iter = set.iterator(); iter.hasNext(); )
{
String key = iter.next();
if (map.get(key) > max)
max = map.get(key);
}
for (int i = 0; i < n; i++)
{
if (scoreList[i] >= max && map.get(winnerList[i]) == max)
{
System.out.println(winnerList[i]);
return;
}
}
}
}