[codeforces] 2A - Winner

英文渣,原题看了半天理解错了,然后各种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;

                        }

                }

        }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值