ABC414に参戦しました

昨日、AtCoder Beginner Contest 414 に参加しました。
結果は、ABの2完 でした。

C問題は「回文」と「N進数」の問題でしたが、サンプルの1つ目しか合わず、2つ目・3つ目は微妙に異なる結果に。
N進数の回文判定プログラムには問題がなかったので、おそらく10進数の回文生成の部分に誤りがあったのだと思います。

その後、公式の解説動画を確認しました。
👉 公式解説動画はこちら

なるほど、回文の生成方法がとても洗練されていました。


回文の生成方法のポイント

  • 偶数桁の場合
    上位桁の文字列を反転してつなげるだけでOK。
    例えば「123」を反転して「321」を作り、つなげて「123321」にする、という具合です。
    これを1〜999999まで全て試せば良いとのこと。

  • 奇数桁の場合
    偶数桁の文字列の中央1文字を削除して作ると「12321」のような奇数桁の回文になります。

  • 標準関数を活用する
    C++の標準関数を使うと、短く分かりやすいコードになるのも学びでした。
    例えば:

    • to_string()…数値 → 文字列

    • reverse()…文字列を逆順にする

    • stoll()…文字列 → long longの数値

私はこれまで文字列関数をあまり使わずに書いていましたが、実際は処理時間も500msほどで済んでおり、標準関数を活用するほうが良さそうだと感じました。

また、10進数の回文生成の部分は、各桁ごとに回文の生成パターンを考えていましたが、解説の方法だとシンプルなコードでもれなく作成できるのが良かったです。


コンテスト結果

  • 順位: 6588位

  • パフォーマンス: 447

  • レート: 568 → 557(-11)

パフォーマンスは、B問題のACまでが12分未満だったので、なんとか茶色のパフォーマンスを保ち、レートもそれほど落とさずに済みました。
次の回文問題はぜひACできるよう、また頑張ります!


明日からは仕事も始まります。こちらも頑張っていきます!