Codeforces のち TopCoder 台風26号

久々の投稿です。
暇があるかといえばありません。情報処理の勉強をそろそろやらなければ
また同じ一途を辿りそうなので。

昨日は朝に暗号講座を聞きに行き、お昼はラーメン。
前回油そばで死んでいったので、今回は無難にラーメンにしておきました。
やはりこのぐらいの量がちょうどいい!

Codeforces のち TopCoder 台風26号_f0019846_11223025.jpg


その後は勉強するつもりがぐったりしていて、時間が過ぎてしまう。
夜には自分が受け持っているプロジェクト班の発表練習。
炎上しない程度には仕上げてきていたようで、何より。

その後は帰宅となりましたが、台風の影響をもろに受けていて、正直早く帰るべきでした。
疲れきっていたせいか、電車も乗り過ごし、Codeforces前にゲーセンに行くことができなくなる。

帰宅後はすぐにCodeforcesへ。
A問題は、1,2,3,4...点以上の人が配列で与えられていて、
グループ分けしてx人以上y人以下に収まるようにしたときに、
点数の高いグループの最低得点がいくつかを出すという問題。
なんか落ちていたのでソースは載せられないです。

B問題は前置きがよくわからなかったですが、毎回3人がダンスする。
色は白と緑と青で、ダンサーがそれぞれ何らかの色で割り当てられている。
必ず解が存在する場合の色の割り当て方を出力せよ。

適当にまだ選ばれていない色を愚直に割り当てていくだけで問題なかったです。


import java.util.Arrays;
import java.util.Scanner;

public class Main2 {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] num = new int[n];
for(int i = 0 ; i < m ; i++){
int fst = sc.nextInt();
int sst = sc.nextInt();
int tst = sc.nextInt();
boolean used[] = new boolean[4];
used[num[fst-1]] = true;
used[num[sst-1]] = true;
used[num[tst-1]] = true;
for(int j = 1 ; j < 4 ; j++){
if(!used[j]){
if(num[fst-1] == 0){
num[fst-1] = j;
}else if(num[sst-1] == 0){
num[sst-1] = j;
}else if(num[tst-1] == 0){
num[tst-1] = j;
}
}
}
}
for(int i = 0 ; i < n ; i++){
if(i != n-1){
System.out.print(num[i]+" ");
}else{
System.out.println(num[i]);
}
}
}
}


C問題は、王の人数と試合数が与えられていて、
試合はA~Bまでの王が参加(既に負けてる王は参加してない)し、
Cの王が勝ったという情報が試合数分与えられていて、
すべての王が誰に負けているのかを出力するという問題。
ちなみに負けてない優勝者は0を出力する。

愚直にやると300000*300000で絶対に間に合わないので、
更新しない部分も作ってあげなければいけない。
プレテストは通したのですが、最終通らず。残念。

終了後はSRMに登録して速攻でゲーセンへ。
台風の中でしたが、気合で行きました。
プレー回数は弐寺、リフレク、ポップン1クレずつ。時間もないので。
成果ですが、WARGAME(灰)の等速フルコンボ。
Codeforces のち TopCoder 台風26号_f0019846_11302811.jpg


リフレクでも成果が出ました。
Codeforces のち TopCoder 台風26号_f0019846_11312853.jpg

ZZ(HARD)フルコンボ!

ポップンは相変わらずヒプロ3がBAD30で落ちる。
49で遊びたいけどこの辺先に埋めたいよなーという。

帰宅後はすぐにTopCoderへ。

easyは、n*mの行列の椅子があり、毎回行と列に1をたす。mod n、mod mでそれぞれ割って、
すべての椅子に座ることが出来るかという問題。

こういう問題は思いつかなかったら愚直に全探索していくのが安全。
気づけばnとmのgcdが1になれば可能、そうでなければ不可能と求められるが。

public class FoxAndClassroom {

public String ableTo(int n, int m) {
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < m ; j++){
boolean[][] seatable = new boolean[n][m];
int count = 0;
int str = i;
int stc = j;
boolean isok = true;
while(true){
str = (str+1) % n;
stc = (stc+1) % m;
if(!seatable[str][stc]){
seatable[str][stc] = true;
count++;
}else{
if(count == n*m){
return "Possible";
}else{
return "Impossible";
}
}
}
}
}
return "Impossible";
}

}


mediumは、惑星のAの周期とBの周期の値が与えられていて、
どちらも同じ情報を示している場合、最小でいくつの惑星があるか。
倍々するのはokなので、全通り試せばいいかなと思ったけど落ちました。なんでだー。

hardは、囲碁のようなもので、盤面に白の石がおかれていて、
そこに黒を置いていくつ白を除去できるかという問題。
白の判定を先に行う。ただし黒が囲まれるのもダメということ。
なんか適当に黒がおけるかどうか全箇所で判定し、その後白を判定するように書いたけどダメでした。

チャレンジは2回成功。どちらもeasyの書き方が適切で無いものでした。
152位 342.95点です。

その後少しだけモンハンしましたが、テオ2体Lv100クエを貼られるなどして、
やる気が失せたので寝る。

  by ddrer-yossi | 2013-10-15 23:21 | TopCoder

<< モンハンしたり日記書いたり JJF 2013 in Shi... >>

SEM SKIN - DESIGN by SEM EXE