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できるよう、また頑張ります!
明日からは仕事も始まります。こちらも頑張っていきます!