[codeforces] 2A - Winner

来源:互联网 发布:floyd算法流程图 编辑:程序博客网 时间:2024/05/19 16:28
原题地址:http://codeforces.com/problemset/problem/2/A
英文渣,原题看了半天理解错了,然后各种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/Apublic 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;                        }                }        }}


0 0