2010年6月27日日曜日

Codeforces Beta Round #19

Codeforces Beta Round #17(6/25 0:00~2:00)
悪夢再び….

■A World Football Cup

□問題
nチームのリーグ戦の結果から,上位n/2チームを辞書式順に出力せよ.

□解法
ソートするだけ.

□コード
import java.util.*;

public class A{
Scanner sc=new Scanner(System.in);
HashMap<String, Integer> map=new HashMap<String, Integer>();
Team[] teams;

void run(){
int n=sc.nextInt();
sc.nextLine();
teams=new Team[n];
for(int i=0; i<n; i++){
String s=sc.nextLine();
map.put(s, i);
teams[i]=new Team();
teams[i].name=s;
}

for(int i=0; i<n*(n-1)/2; i++){
String[] s=sc.nextLine().split(" ");
String[] team=s[0].split("-");
String[] score=s[1].split(":");
int t1=map.get(team[0]);
int t2=map.get(team[1]);
int s1=Integer.parseInt(score[0]);
int s2=Integer.parseInt(score[1]);
if(s1>s2){
teams[t1].point+=3;
}else if(s1<s2){
teams[t2].point+=3;
}else{
teams[t1].point+=1;
teams[t2].point+=1;
}
teams[t1].diff+=s1-s2;
teams[t2].diff+=s2-s1;
teams[t1].goal+=s1;
teams[t2].goal+=s2;
}

Arrays.sort(teams, new java.util.Comparator<Object>(){
@Override
public int compare(Object o1, Object o2){
Team t1=(Team)o1;
Team t2=(Team)o2;
if(t1.point!=t2.point)
return t2.point-t1.point;
if(t1.diff!=t2.diff)
return t2.diff-t1.diff;
return t2.goal-t1.goal;
}
});

String[] s=new String[n/2];
for(int i=0;i<n/2;i++)
s[i]=teams[i].name;
Arrays.sort(s);
for(int i=0;i<n/2;i++)
System.out.println(s[i]);
}

class Team{
String name;
int point;
int diff;
int goal;
}

public static void main(String[] args){
Locale.setDefault(Locale.US);
new A().run();
}
}


そして,B,C,D,Eはどれ一つとして解けませんでした,無念….

・Result
○××××

・Rating
1580 -> 1554

残念な結果です.

0 件のコメント: