NISHIO Hirokazu
[Translate]
競技プログラミングで解法を思いつくための典型的な考え方
競技プログラミングで解法を思いつくための典型的な考え方 | アルゴリズムロジック
帰着する力
をつけるために言語化しつつあったものとかなりオーバーラップがある。
入力の制約から考える
小さい制約の問題
Nが8前後の制約
Nが10~20前後の制約
N が 30~40前後の制約
N が 50前後の制約
O(N^4) OK
N が 300~500前後の制約
N が 1000 前後の制約
分解して考える
小さな定数に注目
変数を一つ固定する
3つのものの真ん中を固定
行列の半分
XとYにわける
操作の不変量に注目
偶奇に注目
偶奇で場合わけ
操作の順番によらない
時間軸反転
元に戻せる操作
左右から累積積
等差数列の加算は差に注目
区間反転の合成はXOR
Grundy数
余事象を引く
k番目の数を二分探索
XORは繰り上がりのない足し算
XORは桁ごとに分割可能
45度回転
差の最小化は中央値
代表的なグラフで考察
木は二部グラフ
木の直径
最大化を二分探索で
選択肢が少ない方から貪欲
二次元座標を二部グラフにする
順序を有向グラフにする
凸関数の極値は三分探索
単調増加ならしゃくとり法
等比数列は剰余に注目
N進数は剰余に注目
括弧列は上り下り
競技プログラミングで解法を思いつくための典型的な考え方
から言及されている問題を確認していく。
keyence2020_d
abc152_f
agc026_c
arc060_a
JOI2008HO_C
ABC034D
ABC138E
ABC023D
Tweet
Related Pages
Grundy数
AtCoderEntrypoint
行列の半分
最大化を二分探索で
keyence2020 d
Nが10~20前後の制約
小さな定数に注目
N が 1000 前後の制約
JOI2008HO C
N が 300~500前後の制約
N が 30~40前後の制約
ABC023D
ABC034D
左右から累積積
計算量の見積もり
arc060 a
agc026 c
abc152 f
区間反転の合成はXOR
N進数は剰余に注目
凸関数の極値は三分探索
選択肢が少ない方から貪欲
木は二部グラフ
差の最小化は中央値
XORは繰り上がりのない足し算
k番目の数を二分探索
余事象を引く
ABC138E
帰着する力
→
帰着する力
×
計算量の見積もり
×
abc165c
×
agc048
×
思考の部品
×
abc034c
×
arc106d
×
貪欲法の証明パターン
×
abc146d
×
agc038a
×
agc036a
×
arc083a
×
arc026b
×
arc040c
×
arc024b
×
cf17_final_c
×
agc024b
×
soundhound2018_summer_qual_c
×
panasonic2020_d
×
arc091b
×
公式より小オーダー
×
ABC147D
×
abc006c
×
abc070d
×
ABC125C
×
agc014b
×
agc018a
×
abc132d
×
abc014c
×
aising2019c
×
code_festival_2017_quala_c
×
abc109d
×
abc112c
×
agc003b
×
arc062b
×
agc024c
×
indeednow_2015_quala_c
×
abc016d
×
abc121d
×
agc033a
×
arc054b
×
arc092a
×
arc052b
×
abc080c
×
tenka1_2017c
×
abc105c
×
abc032c
×
abc054c
×
diverta2019_2_c
×
indeednow_2015_qualc_c
×
abc089d
×
abc157d
×
abc012d
×
abc154e
×
arc032b
×
abc126d
×
arc081b
×
ABC138E
×
tenka1_2018_c
×
nikkei2019_qual_c
×
abc019c
×
abc140d
×
arc042b
×
arc064a
×
arc034b
×
ABC124D
×
arc037b
×
arc097b
×
arc097a
×
arc036b
×
abc096d
×
abc150d
×
doing
×
sumitb2019_e
×
nomura2020c
×
code_festival_qualb_c
×
m_solutions2019d
×
AGC019B
×
abc103d
×
agc029b
×
ARC087B
×
arc014c
×
abc165e
×
agc006b
×
codefestival_2016_final_c
×
agc031b
×
agc022b
×
AGC032B
→
帰着訓練
→
結合法則
×
頻度表
×
行列の半分
→
ARC115
→
abc195
×
選択肢が少ない方から貪欲
→
ABC195D RE
→
数え上げ
×
degwer
×
状態をまとめる
×
dpは全探索の高速化
×
arc059f
×
codefestival_2016_final_f
×
aoj2439
×
探索順の変更
×
大きい順に並べる
×
aoj2333
×
順列は挿入dp
×
bit_dp
×
区間は終点でソート
×
条件の言い換え
×
操作は多いが産物は少ない
×
agc013d
×
線形和への分解
×
演算順序の変更
×
ビット演算を桁ごとに分解
×
部分群
×
操作が可逆で全域→部分群
×
ラグランジュの定理
×
再帰的定義→dp
×
arc037d
×
桁dp
×
aoj0570
×
累積和
×
フェニック木
×
高速フーリエ変換
×
ntt
×
高速ゼータ変換
×
and_と_add_の畳み込み
×
二分累乗
×
agc013e
×
行列木定理
×
全域木の個数
×
lgv公式
×
非交叉経路の個数
×
小さい確率を無視する
×
二項係数の公式
×
経路数
×
45度回転
×
xとyにわける
×
カタラン数
×
包除原理
×
agc005d
×
約数系包除
×
arc064f
→
数え上げテクニック集
→
行列の半分
×
和の順序
×
期待値dp
×
dp_j
×
頻度表
×
フェニック木
×
abc194f
×
atcoder202103
→
ABC194
→
行列の半分
×
xorと和の交換
→
ABC147D
→
最小カットに帰着
×
最大流
×
project_selection_problem
×
aclpc_d
×
最大二部マッチング
×
帰着する力
×
最小費用流に帰着
→
最大流に帰着
→
最大化を二分探索で
→
ARC031D
PAST5M
arc021_3
→
chokudai
×
貪欲法の証明パターン
×
選択肢が少ない方から貪欲
×
マトロイド
×
クラスカル法
×
区間スケジューリング
×
交換しても悪化しない
×
アルゴリズムとデータ構造
×
区間はマトロイドではない
×
abc076b
×
現在が良いほど未来も良い
×
poj3617
×
poj3069
×
ダイクストラ法
×
agc009a
×
arc111
×
abc187
×
arc110c
×
一回り小さい同じ形の問題
×
agc049b
×
abc103d
×
ABC023D
×
和の比率の最大化
×
単位時間ジョブスケジューリング問題
×
乱択+貪欲
×
abc171_f
×
離散凸性
→
貪欲法
→
バケットソート
×
分布数えソート
×
計数ソート
×
ABC023D
×
基数ソート
×
ラディックスソート
×
挿入ソート
→
線形時間ソート
→
選択肢が少ない方から貪欲
→
ABC134D
ABC137D
→
abc181
×
区間が交わらないとしてよい
×
左右から累積積
→
ABC181E
→
rangeaddは二つのpointadd
×
abc183
×
座標圧縮
×
いもす法
×
イベントソート
×
特殊な制約
×
時間軸反転
×
heapq+dict
×
AGC044A
→
ABC188
→
集めるdp
×
繰り返し二乗法
×
45度回転
×
マンハッタン距離
×
abc178f
→
ABC178
→
僕のatcoderの学び方(〜水色)
×
僕のatcoderの学び方(〜past上級)
×
abc187
×
past過去問練習202012
×
変形テクニックに名前をつける
×
頂点数18の制約
×
辺が10^5の制約
×
行列の半分
×
二項定理
×
足し算の順序の変更
×
辺が10^5ならダイクストラ使える
×
典型力
×
問題変換
×
問題分割
×
認知の解像度
×
概念のハンドル
×
atcoder失敗リスト
×
AtCoderEntrypoint
×
アルゴリズム実技検定
×
第五回_アルゴリズム実技検定
×
最小費用流に帰着
×
帰着訓練
→
僕のatcoderの学び方(〜青)
→
オイラー路
×
グリッド上の幅優先探索
×
ハンガリアン法
×
二部グラフの最大マッチング
×
二重辺連結成分分解
×
二重頂点連結成分分解
×
全点対間最短路
×
単一始点最短路
×
強連結成分分解
×
彩色数
×
最大クリーク
×
最大流
×
最大独立集合
×
最小全域有向木
×
最小全域木
×
最小流量制限付き最大流
×
最小費用流
×
橋/関節点
×
bit
×
binary-trie
×
convex-hull-trick-add-monotone
×
li-chao-tree
×
link-cut木_部分木クエリ
×
link-cut木
×
ウェーブレット行列
×
スパーステーブル
×
スライド区間の昇順k個の和
×
セグメント木
×
トライ木
×
マージ可能ヒープ
×
列の平方分割
×
平衡二分探索木
×
永続配列
×
素集合データ構造
×
unionfind
×
ローリングハッシュ
×
接尾辞配列
×
最長共通接頭辞
×
最長回文
×
回文
×
複数文字列検索
×
hl分解
×
全方位木DP
×
最小共通祖先
×
木の直径
×
木の重心分解
×
根付き木に変換
×
mod-pow
×
オイラーのφ関数
×
オイラーのφ関数テーブル
×
ベル数
×
ラグランジュ補間
×
二項係数
×
二項係数テーブル
×
任意mod畳み込み
×
分割数
×
分割数テーブル
×
商列挙
×
形式的冪級数
×
形式的べき級数
×
拡張ユークリッドの互除法
×
拡張ユークリッド互除法
×
第2種スターリング数
×
約数列挙
×
素因数分解
×
素数テーブル
×
素数判定
×
組合せ
×
行列演算
×
進数変換
×
階乗
×
離散対数問題
×
高速フーリエ変換
×
divide-and-conquer-optimization
×
monotone-minima
×
スライド最小値
×
一次元累積和
×
二次元累積和
×
個数制限付きナップサック
×
最大長方形
×
最適二分探索木
×
最長増加部分列
×
ダブリング
×
包除原理
×
燃やす埋める問題
×
燃やす埋める
×
牛ゲー
×
mo’s_algorithm
×
offline-dynamic-connectivity
×
座標圧縮
×
アルゴリズム
→
Luzhiled's memo
→
僕のatcoderの学び方(〜緑)
×
僕のatcoderの学び方(〜青)
×
ARC106
×
気づきの言語化
×
結晶化
×
変形テクニックに名前をつける
×
行列の半分
×
二項定理
×
足し算の順序の変更
×
概念のハンドル
×
テストできるスニペットライブラリ
×
unionfind
×
mod_pでの組み合わせ
×
educational_dp_contest
×
動的計画法
×
atcoder_library_practice_contest
×
atcoder_library
×
帰着する力
×
帰着訓練
→
僕のatcoderの学び方(〜水色)
→
第四回_アルゴリズム実技検定
×
小さな定数に注目
→
PAST4N
→
アルゴリズム
×
蟻本
×
区間スケジューリング
×
二分探索木
×
unionfind
×
最短路問題
×
最小全域木
×
ユークリッドの互除法
×
ニ分探索
×
しゃくとり法
×
半分全列挙
×
座標圧縮
×
セグメント木
×
binary_lndexed_tree
×
バケット法
×
平方分割
×
ビットdp
×
bitdp
×
行列累乗
×
繰り返し二乗法
×
最大流
×
最小カット
×
二部マッチング
×
一般マッチング
×
マッチング
×
辺カバー
×
安定集合
×
点カバー
×
最小費用流
×
凸包
×
Grundy数
×
強連結成分分解
×
2-sat
×
lca
×
ダブリング
×
接尾辞配列
×
sparse_table
×
rmq
×
atcoder
→
プログラミングコンテストチャレンジブック
→
第四回_アルゴリズム実技検定
×
時間軸反転
×
操作を逆順で考える
×
塗りの時間軸反転
×
木の上のパスはlcaで分割できる
×
頂点を塗るのか辺を塗るのか
×
木の辺は根以外の頂点と対応する
→
PAST4M
→
第二回_アルゴリズム実技検定
×
括弧列は上り下り
×
動的計画法
×
範囲上下に番兵
→
PAST2K
→
帰着する力
×
帰着訓練
×
思考の結節点2020-12-18
×
agc049
×
agc048
×
agc047
×
特殊な制約の問題
×
一度ある状態になると抜け出せない
→
帰着関連2
→
配列
×
リンクトリスト
×
フェニック木
×
セグメント木
×
平衡二分木
×
帰着する力
→
配列もリストも都合が悪い
→
結合則
×
累積和
×
左右から累積積
×
一つ除き積
×
sparse_table
→
Disjoint Sparse Table
→
abc186
×
余事象を引く
×
削除可能集合で不等号条件
×
acl1a
×
フェニック木
×
長方形区間カウント
→
ABC186F
→
帰着する力
→
正解にたどりつけないパターン
→
連結なグラフの補グラフ
×
一つ構築せよ問題
×
小さい制約の問題
×
連結なグラフ
×
agc032
→
AGC032B
→
余事象を引く
×
数え上げ
→
Xであるものの数え上げ→Xならば?
→
操作の結果が同一になる条件
×
Xであるものの数え上げ→Xならば?
×
余事象を引く
×
頻度→三角数
×
列の範囲更新
×
操作の結果の数え上げ
→
AGC019B
→
帰着する力
×
agc022c
×
ゴールから逆算
×
2回やっても意味がない
×
最適な操作の順番が一位
×
コストが2^k→辞書順最小
×
1〜xで足りて1〜x-1で足りない時xは必須
×
問題変換
×
問題分割
×
状態情報の圧縮
→
典型力
→
時間軸反転
×
桁dp
×
agc044
×
atcoder
→
AGC044A
→
操作の順番によらない
×
三角数
×
値域と定義域の交換
→
ARC109
→
abc177
×
分配法則
×
行列の半分
×
積と和の交換
×
累積和
×
長整数が速い
→
ABC177C
→
unionfind
×
行列の半分
×
一列まとめて処理
×
二項定理
×
足し算の順序の変更
×
積と和の交換
×
mod_pでの逆元
×
mod_pでの組み合わせ
×
境界値テスト
×
区間スケジューリング
→
ARC106
→
状態遷移図
×
パターン発見
×
caddi2018_b
×
Grundy数
×
対戦系問題
→
状態遷移図を勝ち負けで塗る
→
nim
×
Grundy数
×
不偏ゲーム
×
arc038_d
×
arc046_b
×
dp_l
×
DP K
×
arc064_b
×
tkppc4_2_c
×
arc038_b
→
対戦系問題
→
時間軸反転
×
問題変換
→
塗りの時間軸反転
→
累積和
×
xとyにわける
→
ABC182
→
小さな定数に注目
×
問題変換
→
境界の位置を全探索
→
最大化を二分探索で
×
最小値の最大化
×
max
×
不等号
×
and
×
問題変換
→
maxの不等号は不等号のand
→
余事象を引く
×
包除原理
→
余事象を考える
→
xorは桁ごとに分割可能
→
ビット演算を桁ごとに分解
→
積と和の交換
×
三角数
×
xとyにわける
→
ARC107
→
余事象を引く
×
二項係数テーブル
×
差の和は和の差
→
abc151_e
→
余事象を引く
×
三角数
×
時間軸反転
×
unionfind
→
abc120_d
→
区間が交わらないとしてよい
×
区間反転の合成はXOR
→
ABC124D
→
mod_pでの逆元
×
一つ除き積
×
左右から累積積
×
高速素因数分解
→
abc152e
→
xとyにわける
→
ARC087B
→
左右から累積積
×
ABC125C
×
交換法則
×
結合法則
×
逆元
→
一つ除き積
→
一つ除き積
×
左右から累積積
→
ABC125C
→
帰着する力
×
ソートしても一般性を失わない
×
ユークリッドの互除法
×
最長経路探索
×
負の費用
×
最小費用流
×
偶奇で場合わけ
×
小さい問題を力づくで解いて観察
×
tutte_の定理
×
二部グラフ判定
→
ARC105
→
地図読み込み時に番兵をつける
×
数列を有理式にする
×
ラグランジュ補間
×
対称性で次元削減
×
余事象を引く
×
未ac
×
足し算の順序を変える
×
xごとのf(x,y)の和はyごとのf(x,y)の和
×
最大値の期待値
×
順位統計量
×
maxの不等号は不等号のand
×
0,1
→
HHKB2020
→
動的計画法
×
余事象を引く
→
ABC172E
→
順序のない列は多重集合
×
並び替え→頻度カウント
×
頻度カウントは範囲和
×
累積和
×
二者間の関係からより大きな構造ができる
×
重なるなら同じ長さ→偶数長のブロック
×
帰着する力
→
ARC104
→
木dp
×
逆元
×
単位元
×
結合則
×
左右から累積積
×
動的計画法
→
全方位木DP
→
時間軸反転
→
DP K
→
時間軸反転
×
AGC044A
×
経路に依存しない
→
問題文の順にやらない
"
Engineer's way of creating knowledge
" the English version of my book is now available on
[Engineer's way of creating knowledge]
(C)NISHIO Hirokazu / Converted from
[Scrapbox]
at
11/23/2025, 6:14:17 PM
[Edit]