はじめに
過去に参加した AtCoder のコンテストを AI で分析して、自分の得意と苦手を洗い出しました。
使用したツール: Claude Code
分析は次の手順で行いました。(専用エージェントを構築)
- 公式解説をもとに、各問題をジャンル(全探索、貪欲、DP など 23 種)に分ける
- 自分の提出コードと解説の方針を比べ、同じ・別解・解説より重い、を記録する
- 解いた時間を難易度別の基準で「速い・普通・遅い」に分け、WA の回数も数える
- 自分のレート以下の問題で「遅い」かペナ 2 回以上が、同じジャンルで 3 回出たら「苦手」とする
分析対象
対象は abc434〜abc467 の 18 回(うち abc463 は unrated)で、各回の A〜G を見直しました。(実力的には F 以降はまだ解けないのですが...)
パフォーマンスは 692〜1640 と回ごとの振れ幅が大きいです。レートは abc449 で 1000 に届いてから、9 回続けて 955〜1123 の間にいます。
得意な分野
分析によると、灰〜茶前半の実装は速くて正確でした。
- A〜C の実装: 評価対象 48 問のうち「遅い」は 6 回でした。シミュレーション・実装は 25 問中 14 問が「速い」でした。abc442 は A〜D を 12.8 分・ペナ 0 で通し、それだけでパフォーマンス 1202 になりました。
- ペナルティの少なさ: 18 回中 13 回は、AC した問題がすべてペナ 0 でした。
- 解説と違う方針でも組み切れる: abc439 D は解説の余事象より軽い方法で 10.1 分、abc464 E はクエリの逆順処理+ DFS で一発 AC しました。
- セグ木を使う問題: テンプレートを用意していてすぐに使えるため、転倒数型の数え上げ(abc441 E、969 を 18.0 分)など、当時のレートより上の緑 diff も取れています。
自己ベストの abc464(パフォーマンス 1640)は、A〜E をペナ 0 で通した回です。E(1075)を 16.3 分で解けたのが大きかったです。
苦手な分野
基準で「苦手」に達したのは、場合分けを詰める数学と、独自の貪欲の 2 つです。知識の不足というより、小さなケースでの検証や考察の詰めが甘いという弱点が見えてきました。
数学(場合分け・言い換え)
- 該当した問題: abc449 D(927、41.0 分・WA 2)、abc450 D(647、59.8 分・WA 1)、abc467 D(928、WA 6・未AC)
- 共通点: 方針は解説と同じ。固定する変数の選び方で場合分けが増えた
この 3 問は整数論の知識ではなく、格子点や剰余を数える問題でした。abc449 D では常に y を固定したため、同じ計算を 4 回コピーして境界を合わせています。解説のように max を取る側を固定すれば、分岐は 2 つで済みました。
貪欲
- 該当した問題: abc443 D(738、WA 2・未AC)、abc447 C(318、約 38.7 分・WA 2)、abc459 D(701、33.9 分・WA 1)
- 共通点: 3 問とも解説と違う独自の方針で、正しさを確かめずに提出
この 3 問は問題の種類こそばらばらですが、共通するのは小さいケースの全探索と比べずに出したことです。abc447 C は「A 以外の並びは操作で変わらない」という不変量に気づけば、短く書けました。
よくあるミスのパターン
ジャンルをまたいで繰り返していたのは、次の 3 つです。いちばん効いているのは 1 つ目で、ここは AI にかなり痛いところを突かれました...
1. WA が出ても愚直解と比べない
少なくとも 12 問で、WA のあと愚直解と比べた跡がありませんでした。abc467 D は WA 6、abc462 E は WA 4 で、どちらも未AC です。
誤りはどれも小さいケースで再現します。abc454 D は 2 文字の入力で、abc443 D は 6 要素の配列で反例が出ます。abc459 では D の WA 後に 21 分使い、E は終了 21 分後に AC しました。
2. C・D で重い道具を使う
更新のない区間和や接頭辞の最小値で済むところに、セグ木や set を使った例が 10 回ありました。ほとんどは一発 AC ですが、abc442 F では初めて結果に響きました。
abc442 F は DP の遷移が常に接尾辞なので、累積 min で O(1) でした。それをセグ木で O(N² log N) にして TLE 4 回・未AC、終了 12 分後に累積 min 版で AC しました。
3. 解けるのに時間内に出せない
終了後や翌日に自力で AC した緑 diff が 10 問あります。abc465 E(桁 DP)は終了 20 分後にコードが完成し、abc436 F は E のあと 43 分残っていたのに未提出でした。
詰まったときに次の問題へ移れた回は結果が良いです。abc443 は D を離れて E(1301)を取り、パフォーマンス 1314 でした。逆に abc461 は D に約 85 分粘って未提出、パフォーマンス 968 でした。
おわりに
振り返ってみると、確かにそうかもしれないと感じる分析結果でした。考察の詰めの甘さや、小さなケース(具体的なケース)で検証しないことなど、自分の弱点を改めて認識できました。この結果を活かして、精進を積んでいきたいです。
また、今回分析したのは 18 回分だけなので、もっと多くのコンテストに参加してサンプルを増やす必要がありそうです。(すぐにサボってしまうのが悩みです...)
