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,为参与总决赛的球队数。