こんにちは、nullpointerlogです。
一週間前に開催された AtCoder Beginner Contest 406(ABC406)に参加しました。
結果は A問題のみの1完 という悔しい内容でした。
💥 コンテスト結果
- 解けた問題:A問題
- B問題:WA
- C問題:WA
- レート:519 → 490 にダウン ⬇️
✅ A問題:A - Not Acceptable
与えられた時刻(時・分)を検証するだけの問題でした。
内部的には時を60倍して「分」に換算し、条件と比較することで解決しました。
実装は素直で、ここは無事にAC。
❌ B問題:B - Product Calculator
1桁の数字を次々に掛けていき、結果が K桁以上(最大K=18)になったら 1 に戻す、という問題です。
ここでやってしまいました。
C++で long long を使っていましたが、乗算結果が long long の範囲を超え、正しく判定できていませんでした。
// 誤った判定(オーバーフローの可能性あり)
if (ans * a >= rim) ans = 1;
これを以下のように修正することで、オーバーフローを回避できます:
// 乗算前に判定する方法
if (a > (rim - 1) / ans) ans = 1;
この改善点は、AtCoder公式の解説動画で学びました。なるほど納得です。
❌ C問題:C - 〜(※問題名省略)
サンプルケースはACできましたが、本番テストケースでは約半分がWA。
ロジック的に甘い部分、もしくはコーナーケースを見落としていたようです。
こちらも解説をしっかり確認して、次につなげたいと思います。
🔁 今後の課題と意気込み
レートは490に下がってしまいましたが、今は我慢のとき。
ここ最近、調子が良いときと悪いときが交互に来ていて、なかなかレートが伸びません。
B問題もC問題も、もう少しというところだったと思うので、本日は落ち着いていきたいと思います。
それではまた、次回の結果報告で!