- a, b が整数 A, B を持っている。1ターンで自分の数字の順番を逆にするか下1桁を消すことができる。1000回以内にA=Bになれば a の勝ち、そうでなければ負け。
- 2人が最適に行動したとき a が勝つかどうかを求める。
- 1≦A, B≦999,999,999, A!=B, A,B には10進表記で 0 は含まれない
- 数字はせいぜい 9 桁なので、1000回もあれば勝敗はついていると思われる。→この条件は忘れる
- b は数字を消すと負ける可能性が高まるはず. せっかく 789 だったのに 78 にするなんて!
- なので、b はひたすら B をひっくり返していればいい
- A から作れる数字をすべてリストアップして、それに B が含まれれば a が勝つ。
- つまり A に B か B の逆が含まれればよいのか... と思ってみるとこの実装はやぼったい。
class TheNumberGame {
public:
string determineOutcome(int A, int B) {
vector<string> w;
stringstream ss, sb;
sb<<B;
ss<<A;
string s=ss.str();
REP(i, 2) {
if(i==1) reverse(ALL(s));
REP(sj, s.size()) {
RANGE(ej, sj, s.size()) {
if(s.substr(sj, ej-sj+1)==sb.str()) return "Manao wins";
}
}
}
return "Manao loses";
}
};