2018科大讯飞校招---足球队

import java.io.BufferedReader;
        import java.io.InputStreamReader;
        import java.util.*;

public class Soccer {
    public static void main(String args[]) throws Exception {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.valueOf(bf.readLine());
        List<String> teamsList = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            String name = bf.readLine();
            teamsList.add(name);
        }
        Map<String, Team> teamMap = new HashMap<>();
        for (int i = 0; i < n * (n - 1) / 2; i++) {
            String score = bf.readLine();
            String team1 = String.valueOf(score.charAt(0));
            String team2 = String.valueOf(score.charAt(2));
            int score1 = Integer.valueOf(String.valueOf(score.charAt(4)));
            int score2 = Integer.valueOf(String.valueOf(score.charAt(6)));
            if (score1 > score2) {
                int ballNum = score1 - score2;
                checkRank(team1, teamMap, 3, ballNum, score1);
                checkRank(team2, teamMap, 0, 0, score2);
            } else if (score1 == score2) {
                checkRank(team1, teamMap, 1, 0, score1);
                checkRank(team2, teamMap, 1, 0, score2);
            } else {
                int ballNum = score2 - score1;
                checkRank(team1, teamMap, 0, 0, score1);
                checkRank(team2, teamMap, 3, ballNum, score2);
            }
        }
        List<String> winners = new ArrayList<>();
        for (int i = 0; i < n / 2; i++) {
            Team winner = null;
            for (String name : teamsList) {
                Team t = teamMap.get(name);
                if (winner == null) {
                    winner = t;
                } else {
                    if (winner.getRank() < t.getRank()) {
                        winner = t;
                    } else if (winner.getRank() == t.getRank()) {
                        if (winner.getGD() < t.getGD()) {
                            winner = t;
                        } else if (winner.getGD() == t.getGD()) {
                            if (winner.getNum() < t.getNum()) {
                                winner = t;
                            }
                        }
                    }
                }
            }
            winners.add(winner.getName());
            teamMap.remove(winner);
        }
        System.out.println(winners);
    }


    public static void checkRank(String team, Map<String, Team> teamMap, int score, int ballNum, Integer ball) {
        if (teamMap.containsKey(team)) {
            Team t = teamMap.get(team);
            t.setRank(t.getRank() + score);
            t.setGD(t.getGD() + ballNum);
            t.setNum(t.getNum() + ball);
            teamMap.put(team, t);
        } else {
            Team t = new Team();
            t.setRank(score);
            t.setGD(ballNum);
            t.setNum(ball);
            teamMap.put(team, t);
        }
    }

}

class Team {
    private String name;
    private Integer rank;
    private Integer GD;
    private Integer num;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getRank() {
        return rank;
    }

    public void setRank(Integer rank) {
        this.rank = rank;
    }

    public Integer getGD() {
        return GD;
    }

    public void setGD(Integer GD) {
        this.GD = GD;
    }

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }


}

题目描述:

大学生足协决定举办全国性的大学生足球赛,由每个学校派遣一支队伍代表该校参赛。比赛分为几个赛区进行,最终的总决赛中,将有不超过n支队伍参赛。经过激烈的角逐,有机会参与总决赛的队伍已经决出。

协会对比赛的规则进行了调整,以便是的比赛更具有观赏性:

1、总决赛的参赛队伍有n支,n为偶数。

2、进入前1/2的队伍才有资格进入淘汰赛。

3、队伍按积分排名,具体规则:胜一场积3分,平一场积1分,负一场积0分。队伍首先按积分降序排列,积分相同按净胜球数降序排列,仍然相同的按进球数降序排列。

4、基于上述规则,尚未出现有排名歧义的情况发生。

输入说明:

第一行为一个整数n,为参与总决赛的球队数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值