AIで解説 AtCoder攻略 寄与分解

読了 約6分 たびすけ
AIで解説 AtCoder攻略 寄与分解

寄与分解ページの位置づけ

項目内容
必修度標準
学習目安標準〜発展
前提ソート・BIT
対象問題54問(推定値あり54問、未算出0問)

この記事のdifficulty区分は、問題を解く順番を決めるための目安です。AtCoderの公式なA〜F区分ではなく、取得できたdifficulty推定値を次の範囲に分けています。

学習目安difficulty推定値問題数
入門difficulty < 020
標準0〜79914
標準〜発展800〜11994
発展1200以上16
未算出0

全体の組合せを要素ごとの寄与へ分解し、BITや順序付き構造で高速に集計するページです。

問題ごとの細かな実装は異なりますが、最初に確認する条件は共通しています。

寄与分解の見分け方

  • 全体の組合せを足し合わせる
  • 1要素の寄与が区間や順位で決まる
  • BIT・順序付き集合で挿入と順位取得を行う

寄与分解の実装前チェック

  • 寄与の数え上げを小さい例で確認する
  • データ構造の添字範囲を確認する
  • 重複と端点を確認する

先に確認する文法・ライブラリ

まずは必須Python文法で、入力・配列・条件分岐・ループなどの基本を確認してください。問題に合わせたキュー、ヒープ、二分探索などの選び方は標準ライブラリ・定石にまとめています。

代表問題で実装を確認する

最初の一問として、ABC287 A Majority公式解説)を解きます。各投票を1回ずつ読み、賛成票だけを合計します。全体の半分を超えるかを最後に判定する、最も基本的な集計です。

N = int(input())
for_count = sum(input().strip() == 'For' for _ in range(N))
print('Yes' if for_count > N / 2 else 'No')

入力を1回読むだけなのでO(N)時間、追加メモリはO(1)です。全票を何度も数え直すO(N^2)の実装を避けられます。

寄与分解の学ぶ順番

このページでは全件を一度に並べず、difficultyの推定値を目安に代表問題を段階分けしています。難易度が未算出の問題は、制約と出題意図を先に確認します。

まず解く

問題公式解説出題意図difficulty
ABC287 A Majority公式解説賛成票の数が過半数か判定する。-1023
ABC260 A A Unique Letter公式解説3文字の出現回数が1回の文字を探す。-989
ABC447 A Seats 2公式解説Count the available seats satisfying the two-seat condition.-904
ABC268 A Five Integers公式解説5個の整数の異なる値の個数を数える。-876
ABC240 B Count Distinct Integers公式解説入力された整数を集合へ入れ、異なる値の個数を出力する。-819

次に解く

問題公式解説出題意図difficulty
ABC365 B Second Best公式解説Official editorial intent is classified as second max.-757
ABC378 A Pairing公式解説各値の出現回数を2で割った整数部分の総和を求める。-755
ABC426 B The Odd One Out公式解説公式Editorialの方針を odd one out frequency として整理する。-703
ABC359 B Couples公式解説Official editorial intent is classified as pair pattern.-678
ABC216 B Same Name公式解説姓と名の組を集合に登録し、同一の組が再登場するかを判定する。-537

挑戦問題

問題公式解説出題意図difficulty
ABC241 B Pasta公式解説注文ごとに在庫数を1つ減らし、全注文を供給できるかを判定する。-503
ABC386 B Calculator公式解説連続する00を一回のボタン入力としてまとめ、必要入力回数を数える。-497
ABC393 B A..B..C公式解説Enumerate the middle position and equal-distance endpoints of an A-B-C pattern.-480
ABC338 B Frequency公式解説Official editorial intent is classified as frequency count max.-449
ABC381 B 1122 String公式解説隣接2文字が等しいことと、各文字がちょうど2回現れることを同時に確認する。-417

問題文を読んだら、まず「見分け方」のどれに当たるかを一行で記録します。当てはまらない問題は、別のページへ移す判断自体を復習材料にします。

寄与分解の次に読むページ

必須Python文法標準ライブラリ・定石