SRM472
250/500は簡単。
1000はランダムウォークの問題。メモリや計算時間を考慮すると、難解。というか解き方分からないよ…。
250/ColorfulTilesEasy
1列に赤・緑・青・緑のいずれかの色のついたタイルが並んでいる。
隣あったタイルが同じ色とならないようにするには、何枚のタイルの色を塗り替える必要があるか。
class ColorfulTilesEasy { public: int theMin(string room) { int count = 0; for(unsigned int i=1; i<room.size(); i++){ if(room[i] == room[i-1]){ count++; i++; } } return count; } };
特に難しいところもなし。
500/PotatoGame
ある数値が始めに与えられる。太郎と花子が順番に4の累乗の中で任意の数字を、0未満にならないように始めに与えられた数値から引いていく。
与えられた数値を0に出来るのは太郎か花子か。
class PotatoGame { public: string theWinner(int n) { int div = n; int validnum = 1; int turns = 0; while(div != 0){ if( div % (validnum*4) == 0){ validnum = validnum * 4; }else{ div -= validnum; turns++; } } string result; if(turns % 2 == 1){ result = "Taro"; }else{ result = "Hanako"; } return result; } };
結構撃墜された人が多かったみたい。
テストデータがあまりに簡単すぎたせいなのかな。
追記:System Testで弾かれてるww
optimalに動くことをそもそも考えてなかった…。
ミスったなー。
mod5を考えればすぐに解が出ます。