久しぶりに書きます。次の日が休みということで、終わったあとすぐに書いています。
いつも通り開始。今回は途中休憩に250を当てようということで、まずは500から解きます。
色の塗り分け問題です。正方形の各面を、与えられた色で塗り分けられるかどうかを考えます。隣り合った面を同じ色で塗ってはいけません。塗り分けられますか?というものです。一色は2回しか使えませんから、最大カウントを2回として、いったい何色使えるかを数えればOKです。Submitして通り、374.77点。
次に250です。これはかなり単純で、場合分けをして考えればOKです。228.59でSubmit。
その後1000を解こうとしたのですが、フェルマーの4n+1定理、三平方和定理、四角数定理などと考えて、うまい方法が思いつかず、そのまま撃沈でした。
チャレンジフェーズでは一つ見つけたのですが追いつかず、他の人がわずかに早くとってしまいました。初チャレンジかと思ったのですが、惜しかったです。
合計点で、順位は370/1367でした。久しぶりでしたが、楽しかったです。後は、JavaもしくはC++にもっと慣れなければなりません。Cと僅かな道具で戦っているだけでは、正直厳しいと思っています。(が、その向上にあまり時間をかけられていないのが実情です…)。
私の拙い解答ソースコードです。Javaなので、いつも以上に下手くそです。
250.
public class CubeAnts{
public static int getMinimumSteps(int[] pos){
int num=0;
for(int i=0;i<pos.length;i++){
if(pos[i]==6) return 3;
else if(pos[i]==2 || pos[i]==5 || pos[i]==7) num=(num<2)?2:num;
else if(pos[i]==1 || pos[i]==3 || pos[i]==4) num=(num<1)?1:num;
}
return num;
}
}
500.
public class CubeStickers{
public static String isPossible(String[] sticker){
int color=0;
for(int i=0;i<sticker.length;i++){
color++;
if(i==0) continue;
int count=0;
for(int j=i-1;j>=0;j--){
if(sticker[i].equals(sticker[j])) count++;
if(count==2){
color--;
break;
}
}
if(color>=6) break;
}
if(color>=6) return "YES";
return "NO";
}
}
0 件のコメント:
コメントを投稿