無念のゼロAC…
という訳で振り返りです。
A - AB Palindrome
やってみよう!
A
関数を完成させて「Run」ボタンをクリックしよう!
自由欄
try
以下のようなことを考えましたが、結果として全くの見当違いでした…
S
を前半後半に分けて、前半だけ操作して後半と一致するようにすればいいのかなぁS[0]
から順に見ていけばいいのかなぁ。いや、後半が...BBBBBA
みたに終わる場合は先頭から順に操作するわけじゃないしなぁ…- 実際に操作せずとも、後半部分が操作後の形になっていればいいのでは!?つまり、「(後ろから見て)1つ以上のAと1つ以上のBの組み合わせ」が1つ以上で成り立っていればいいのでは?
- いやいや、上に一致しない範囲でも初期値で回分状態になっていればいいわけで…
どうすりゃいいんだい!
泥沼です。無理くり実装してみましたが当然のごとくWAで紹介する価値もないので、以下解説を見てみましょう。
結局、以下の条件のいずれかを満たす場合のみ答えは
No
で、それ以外の場合答えはYes
です。
S
の先頭の文字がA
で末尾の文字がB
のときS
がBA
のとき
まじかぁ~!?
確かにぃぃ~~
結果:提出 #33648791 - AtCoder Regular Contest 145
自由欄
B - AB Game
やってみよう!
B
関数を完成させて「Run」ボタンをクリックしよう!
自由欄
try
解説にある通り、Aliceが勝つのは$n \ge A かつ n\mod A \lt B$の場合です。
その実装がなかなか難しく(解説がすんなり理解できない…)、以下のようにしてみました。
(よくよく解説を理解すると、やってることは大体一緒、のはず)
結果:提出 #33649868 - AtCoder Regular Contest 145
自由欄
C - Split and Maximize
やってみよう!
C
関数を完成させて「Run」ボタンをクリックしよう!
自由欄
try
せっかくなのでC問題まで見てみます。
とはいえ、解説を読んで理解はできても、その思考プロセスを身につけられる気がしません。
余談ですが、中学時代の数学の先生の言葉を思い出しました。曰く、
「分かる」と「できる」は違う。(だから何度も練習問題やろうね)
という訳で、思い立った時にこの記事上でサクッとコーディングできる環境だけ用意しておくことにします。(反復練習!)
以下はまんま解説の実装例です。
ARC143のB問題でも似たような計算をしていますが、そのときは$1 \le N \le 500$という制約下だったので計算途中にmodを組み込まなくても回答できました。
今回はさすがにmodを取りながらでないとTLEになってしまいます。
結果:提出 #33652061 - AtCoder Regular Contest 145
自由欄
まとめ
地道に継続します。