POJ 3869 Headshot
問題
リボルバー式の拳銃があり、シリンダー内の弾の装填の情報が与えられる。ロシアンルーレットで遊ぶとして、どの薬室からスタートしたかわからないが相手の手番では発砲しなかった。次の番はあなたで、そのまま打つか、シリンダーをランダムに回転させてから打つか選ぶことができる。どちらが発砲しない可能性が高いか答えよ。
やりかた
やるだけ
打つ前にランダムに回転させると、発砲しない確率は(0の数)/(薬室の数)になる。一方そのまま打つ場合では、相手が打ったあとなので銃身の薬室はこの時点で0という状況下である。その次の薬室が1なら発砲してしまうし、0なら発砲しない。なので発砲しない確率は(00という並びの個数/0の個数)になる。この大小を比べる。
以下ソース。
int main(int argc, char **argv){ string s; while(cin >> s){ int zero = count(ALL(s), '0'); int condition = 0, situation = 0; for(int i = 0; i < s.size(); i++){ if(s[i] == '0'){ condition++; if(s[(i + 1) % s.size()] == '0') situation++; } } if(zero * condition > situation * s.size()) cout << "ROTATE" << endl; else if(zero * condition < situation * s.size()) cout << "SHOOT" << endl; else cout << "EQUAL" << endl; } return 0; }
Get up! 明日のSUPER ST@R!