-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathC200C.java
More file actions
147 lines (131 loc) · 4.24 KB
/
Copy pathC200C.java
File metadata and controls
147 lines (131 loc) · 4.24 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
import java.io.*;
import java.util.*;
/**
* */
public class C200C {
public static List<Team> listTeams=Collections.synchronizedList(new ArrayList<Team>(4));
public static Team BERLAND=null;
public static TeamComparator teamComparator=null;
public class Team{
public String name;
public Map<String,Integer> selfScores=Collections.synchronizedMap(new HashMap<String,Integer>());
public Map<String,Integer> oppScores=Collections.synchronizedMap(new HashMap<String,Integer>());
public Integer points=0;
public Integer goalDiff=0;
public Integer goalFor=0;
public Team(String name){
this.name=name;
}
}
public Team newTeam(String name){
return new Team(name);
}
public static Team getTeam(String name){
Iterator<Team> iter=listTeams.iterator();
while(iter.hasNext()){
Team team=iter.next();
if(team.name.equals(name))
return team;
}
return null;
}
public static int getBerlandRanking(){
Iterator<Team> iter=listTeams.iterator();
while(iter.hasNext()){
Team team=iter.next();
team.points=team.goalDiff=team.goalFor=0;
Iterator<String> iterOpp=team.selfScores.keySet().iterator();
while(iterOpp.hasNext()){
String oppName=iterOpp.next();
int selfScore=team.selfScores.get(oppName);
int oppScore=team.oppScores.get(oppName);
team.points+=(selfScore>oppScore)?3:(selfScore==oppScore)?1:0;
team.goalDiff+=(selfScore-oppScore);
team.goalFor+=selfScore;
}}
Collections.sort(listTeams,teamComparator);
return listTeams.indexOf(BERLAND);
}
public class TeamComparator implements Comparator<Team>{
@Override
public int compare(Team team1, Team team2) {
if(team1.points.equals(team2.points)){
if(team1.goalDiff.equals(team2.goalDiff)){
if(team1.goalFor.equals(team2.goalFor))
return team2.name.compareTo(team1.name);
return team1.goalFor.compareTo(team2.goalFor);
}
return team1.goalDiff.compareTo(team2.goalDiff);
}
return team1.points.compareTo(team2.points);
}}
public TeamComparator newTeamComparator(){
return new TeamComparator(); }
/**
* @param args
*/
public static void main(String[] args){
try {
BufferedReader reader =new BufferedReader( new InputStreamReader( System.in)); // STDIN
// Teams
Solution solution=new Solution();
listTeams.add(solution.newTeam("BERLAND"));
BERLAND=getTeam("BERLAND");
teamComparator=solution.newTeamComparator();
//
for(int i=0;i!=5;i++){
String[] result=reader.readLine().trim().split(" ",3);
// Team1
String name1=result[0].trim();
Team team1=getTeam(name1);
if(team1==null){
listTeams.add(solution.newTeam(name1));
team1=getTeam(name1);
}
// Team2
String name2=result[1].trim();
Team team2=getTeam(name2);
if(team2==null){
listTeams.add(solution.newTeam(name2));
team2=getTeam(name2);
}
String[] score=result[2].trim().split(":",2);
Integer score1=Integer.valueOf(score[0].trim());
Integer score2=Integer.valueOf(score[1].trim());
team1.selfScores.put(team2.name,score1);
team1.oppScores.put(team2.name,score2);
team2.selfScores.put(team1.name,score2);
team2.oppScores.put(team1.name,score1);
}
String oppName="";
Iterator<Team> iterTeam=listTeams.iterator();
while(iterTeam.hasNext()&&(oppName=="")){
Team team=iterTeam.next();
if((team.oppScores.size()==2)&&(team.name!="BERLAND"))
oppName=team.name; }
//
boolean bPossible=false;
for(int diff=1;diff<=30;diff++){
for(int opp=0;opp<=30;opp++){
int selfScore=diff+opp;
Team oppTeam=getTeam(oppName);
oppTeam.selfScores.put(BERLAND.name,opp);
oppTeam.oppScores.put(BERLAND.name,selfScore);
BERLAND.selfScores.put(oppName,selfScore);
BERLAND.oppScores.put(oppName,opp);
if(getBerlandRanking()>=2){
System.out.println(selfScore+":"+opp);
bPossible=true;
break;
}
}
if(bPossible)
break;
}
if(!bPossible)
System.out.println("IMPOSSIBLE");
}catch(Exception e){
e.printStackTrace(System.err);
}
}
}