AtCoder Beginner Contest 198のきろく
AtCoder Beginner Contest 198に参加、レートが+1されました。
- A - Div (100点)
- B - Palindrome with leading zeros (200点)
- C - Compass Walking (300点)
- D - Send More Money (400点、実行時間制限: 5 sec)
- E - Unique Color (500点)
- F - Cube (600点): 未提出
- 結果、感想
A - Div (100点)
A君が 個貰うとすると、B君は 個貰うことになるので かつ より のとき より は整数であるため 通り存在します。 のとき条件を満たす分け方は存在しないので、どちらの場合も 通りとなります。
B - Palindrome with leading zeros (200点)
でない限り先頭に0
はもともと来ないので末尾の0
を削除した文字列が回文なら条件を満たし、そうでなければ条件を満たしません。
文字列が条件を満たしているかどうかは実際に両端から文字が等しいかどうか調べることで判別できます。
C - Compass Walking (300点)
歩移動後に高橋くんがいる点の集合は半径 の円周となります。
そのあともう 歩移動することで、
これ以降は、数学的帰納法により、 歩移動後の点の集合は半径 の円周及び内部となります。
よって、原点から の距離が の時は答え 、 未満の時は答え 、それ以外の時は答え となります。
誤差が怖かったのでfor文を用いて条件を求めましたが、繰り返し回数を 回にしていたため、1つのケースを落としてしまい、2ペナとなってしまいました。上限は のときの となります。
D - Send More Money (400点、実行時間制限: 5 sec)
最初、覆面算 という条件を見落としていて1ペナついてしまいました(問題名の意味を考えれば...)。
文字と数字が対応するため 種類以上の文字を用いている場合、UNSOLVABLE
となります。
そうでない場合、文字と数字の対応を全て試してみます。高々 通りなので間に合います。std::next_permutaion
を用います。 文字目が0
でないか、stoll
を用いて が成り立っているかどうかを判別しましょう。
E - Unique Color (500点)
根からDFSしていきます。答えをstd::set
を用いてとっていく場合は、マージテクを用いるようにしましょう。そうでなければ になってTLEしてしまいます(1敗)。
F - Cube (600点): 未提出
色々回してよく分からなくなりました。
結果、感想
本当にギリギリ暖まりました。4ペナが痛い...