2011/07/03

Topcoder SRM511(Div.2) 参戦記

Javaしか使えないのを含めて、TopcoderはCodeforcesやCodechefに比べて苦手です。勝つために、JavaやC++をもっと練習すべきかもしれません。

開始後、慣れないJavaに苦戦しながら、250点問題を解きます。非常に時間がかかり、約30分かけてSubmit.155.83点です。

その後、やはりいろいろ考えながら、一見難しそうな500点問題に取り組みます。これにも約30分かかり、281.23点。そのままCoding Phaseは終了しました。

Challenge Phaseも、遅くて0点。自分のソースが撃墜されてしまいました(TT)。

結果、741位でScore=155.83でした。
[250-points]
public class GameOfLifeDivTwo{
public static String theSimulation(String init, int T){
char[] tmpstr=new char[init.length()];
char[] strings=new char[init.length()];
strings=init.toCharArray();
for(int time=0;time<T;time++){
for(int i=0;i<init.length();i++){
int tmp=0;
tmp=strings[i]=='1'?1:0;
tmp+=strings[i==init.length()-1?0:i+1]=='1'?1:0;
tmp+=strings[i==0?init.length()-1:i-1]=='1'?1:0;
if(tmp>=2) tmpstr[i]='1';
else tmpstr[i]='0';
}
for(int i=0;i<init.length();i++) strings[i]=tmpstr[i];
}
String ret=new String(strings);
return ret;
}
}

[500-points](撃墜されたソースです)
public class Zoo{
public static long theCount(int[] answers){
java.util.Arrays.sort(answers);
int ma,mb=0;
ma=answers[answers.length-1];
if(ma>=answers.length) return 0;
int[] check=new int[ma+1];
for(int i=0;i<ma+1;i++) check[i]=0;
for(int i=0;i<answers.length;i++) check[answers[i]]++;
int flg=0;
for(int i=0;i<ma+1;i++){
if(check[i]!=2 && check[i]!=1 || (flg==1 && check[i]==2)) return 0;
if(check[i]==2) mb++;
else if(check[i]==1 && flg==0) flg=1;
}
long ret=1;
for(int i=0;i<mb;i++) ret*=2;
ret*=2;
return ret;
}
}

0 件のコメント:

コメントを投稿