競技プログラミングのソース置場   WEB+DB 115   AOJ本   PAST本   けんちょん本   E8本(数学)   アリ本   ライブラリ   AOJ   ABC   ARC   PAST

001 データの入出力

旧サイトから移行する

001-01 ランダムデータでテスト
001-02 Dictionaryのデバッグ出力
001-03 セパレータと数値型の列挙を引数として、結合したstringを返す
001-04 二次元配列の入出力
001-05 ソートを定義した構造体とクラス
001-06 BigIntegerクラスのサンプル


002 データの加工

文字列のランレングス圧縮結果を返す ABC259-C XX to XXX
longの配列のランレングス圧縮結果を返す ARC023-C タコヤ木
列挙を引数として、座標圧縮し、座圧後の値[座圧前の値]なDictを返す ABC261-F Sorting Color Balls

配列のユーティリティクラス ABC340-E Mancala 2
OverLapした閉区間をマージ ABC256-D Union of Interval


003 データ構造

PriorityQueue (根が最小) (内部でDictionary使用) ABC212-D Querying Multiset
PriorityQueue (根が最大) (内部でDictionary使用) ABC249-F Ignore Operations
PriorityQueue (根が最小) (内部で配列使用) ABC323-D Merge Slimes
UnionFind AOJ DSL_1_A: Disjoint Set: Union Find Tree
UnionFindSizeInfo ABC214-D Sum of Maximum Weights
UnionFindSizeAndEdgeCntInfo ABC292-D Unicyclic Components
UnionfFindWithAnyInfo ABC229-E Graph Destruction
セグ木(RMQ) AOJ DSL_2_A: Range Minimum Query
セグ木(RMaxQ) 第3回PAST L スーパーマーケット
セグ木(RSQ) AOJ DSL_2_B: Range Sum Query
セグ木でモノイドを指定 ABC343-F Second Largest Query
フェニック木 典型90問 076 Cake Cut(★3)
フェニック木 (法を指定可能) ABC263-E Sugoroku 3
双対セグ木(区間加算、1点取得) AOJ DSL_2_E: Range Add Query (RAQ)
双対セグ木(区間加算、1点取得) (法を指定可能) ABC341-E Alternating String
遅延セグ木 AOJ DSL_2_F: RMQ and RUQ
遅延セグ木 AOJ DSL_2_G: RSQ and RAQ
遅延セグ木 AOJ DSL_2_H: RMQ and RAQ
遅延セグ木 AOJ DSL_2_I: RSQ and RUQ
遅延セグ木(RMaxQとRAQ) Educational DP Contest W Intervals
セグ木(RMQ)での拡張機能 (最小値と、最小値を持つIndを返す) (全区間のみ) ABC267-E Erasing Vertices 2
セグ木(RMQ)での拡張機能 (最小値と、最小値を持つIndを返す) (区間指定可) ARC134-B Reserve or Reverse
AVL木 ABC281-E Least Elements
AVL木で構造体でソート ABC267-E Erasing Vertices 2
RBST ABC134-E Sequence Decomposing
ウェーブレット木 AOJ 1549 Hard Beans
スパーステーブル ABC014-D 閉路
Deque AOJ DSL_3_D: Sliding Minimum Elements
ImplicitTreap ARC153-B Grid Rotations
kD Tree AOJ DSL_2_C: Range Search (kD Tree)


004 素数

試し割りで素数判定 AOJ ALDS1_1_C: Prime Numbers
素因数分解し、指数[素数]なDictを返す ABC169-D Div Game
約数列挙 ABC112-D Partition
ユークリッドの互除法 ARC110-A Redundant Redundancy
最大公倍数 ARC110-A Redundant Redundancy
エラトステネスの篩 ABC250-D 250-like Number

IEnumerable<long> を引数とし、最大公約数を返す E8本(数学) 015 Greatest Common Divisor of N Integers
IEnumerable<long> を引数とし、最小公倍数を返す ABC150-D Semi Common Multiple


005 場合の数

AOJの写像12相 AOJ DPL_5_C: Balls and Boxes 3
階乗 (mod Hou)を求める ARC143-B Counting Grids
nPr (mod Hou)を求める ARC143-B Counting Grids
nCr (mod Hou)を求める ARC039-B 高橋幼稚園
nCr をnの最大値指定で事前準備し、高速に求める ABC151-E Max-Min Sums
nHr を求める(法も指定可)

C++のnext_permutation、prev_permutation C++のnext_permutation、prev_permutation
Rubyの順列、組合せ、重複順列、重複組合せ Rubyの場合の数を求めるメソッド
集合を指定した分割数に分割 集合を指定した分割数に分割
列挙、取得数下限、取得数上限を引数とし、配列の列挙を返す 競技プログラミングの鉄則 A72 Tile Painting

包除原理その1 E8本(数学) 068 Number of Multiples 2
包除原理その2 ABC246-F typewriter


006 合同式

ModPow(繰返し2乗法) ARC039-B 高橋幼稚園
フェルマーの小定理で逆元を求める ARC039-B 高橋幼稚園
フェルマーの小定理で逆元を求める(キャッシュ付き) ABC280-E Critical Hit
合同方程式、A*X ≡ B (mod M) を解く ABC186-E Throne
中国剰余定理 ABC193-E Oversleeping


007 グラフ

004-01 DFSのテンプレート
004-02 BFSのテンプレート

再帰でDFSその1(訪問済ノードをグローバルに持つ) ABC293-C Make Takahashi Happy
再帰でDFSその2(訪問済ノードをグローバルに持つ) ABC284-E Count Simple Paths

隣接リストのデータ作成(枝にコスト有り) 第8回PAST H 最短経路
隣接リストのデータ作成(枝にコスト無し) ABC199-D RGB Coloring 2

無向グラフの連結成分分解その1(代表ノード[ノード]なDict) ALDS1_11_D: Connected Components
無向グラフの連結成分分解その2(ノードList[代表ノード]なDict) ABC199-D RGB Coloring 2

有向グラフで強連結成分分解 ABC245-F Endless Walk

トポロジカルソート(DFS) Educational DP G Longest Path
トポロジカルソート(BFSで小さいノード番号を優先) ABC223-D Restricted Permutation

有向グラフでの閉路判定 第7回PAST J 終わりなき旅
無向グラフでの閉路判定 ABC231-D Neighbors

ファンクショナルグラフでの閉路数を返す ARC114-B Special Subsets

ダイクストラ法(コストが単数)その1 ABC340-D Super Takahashi Bros.
ダイクストラ法(コストが単数)その2 競技プログラミングの鉄則 A64 Shortest Path 2
ダイクストラ法(コストが単数)その3 ABC325-E Our clients, please wait a moment
ダイクストラ法(複数ソートキー) 競技プログラミングの鉄則 A73 Marathon Route
ダイクストラ法(逆辺)その1 ABC342-E Last Train
ワーシャルフロイド法(コストが単数) 典型アルゴリズム問題集 E 全点対最短経路問題
ワーシャルフロイド法(コストを構造体で管理) ABC286-E Souvenir
ベルマンフォード法 GRL_1_B: Single Source Shortest Path (Negative Edges)

クラスカル法 典型アルゴリズム問題集 F 最小全域木問題
プリム法 ALDS1_12_A: Minimum Spanning Tree

再帰でオイラーツアー(訪問と帰りを表示) ABC213-D Takahashi Tour
Stackでオイラーツアー(訪問と最後の帰りを表示) ABC202-E Count Descendants

ダイクストラ木 ABC252-E Road Reduction
DFS木 ABC251-F Two Spanning Trees
BFS木 ABC251-F Two Spanning Trees

木のLCAを求める ABC014-D 閉路

無向グラフの橋の列挙を返す ABC266-F Well-defined Path Queries on a Namori


008 ネットワークフロー

最大流でエドモンズ・カープ GRL_6_A: Maximum Flow
二部マッチングでエドモンズ・カープ GRL_7_A: Bipartite Matching
二部マッチングでフォード・ファルカーソン AOJ 1163 カードゲーム
最小費用流でベルマンフォード法 GRL_6_B: Minimum Cost Flow


009 C++のSIMD

ABC091-D Two Sequences


010 DP

構造体のハッシュ値を状態に持つDP ABC322-E Product Development

桁DPその1 Educational DP Contest S Digit Sum
桁DPその2 ABC336-E Digit Sum Divisible
桁DPその3 ARC173-A Neq Number
2進数での桁DPその1 ARC129-A Smaller XOR

区間DPその1 AOJ 1611 ダルマ落とし
区間DPその2 第5回PAST L T消し
区間DPその3 Educational DP Contest N Slimes
区間DPその4 競技プログラミングの鉄則 A21 Block Game

期待値DPその1 ABC184-D increment of coins
期待値DPその2 Educational DP Contest J Sushi
期待値DPその3 TDP J ボール
期待値DPその4 PAST5回 K - 的あて
期待値DPその5 ABC280-E Critical Hit

部分列DPその1 AOJ 2895 回文部分列 (Palindromic Subsequences)
部分列DPその2 ARC081-E Don't Be a Subsequence
部分列DPその3 TDP G 辞書順

木DPその1 競技プログラミングの鉄則 B65 Road to Promotion Hard
木DPその2 ABC239-E Subtree K-th Max

全方位木DPその1 AOJ 1595 Traffic Tree
全方位木DPその2 Educational DP Contest V Subtree
全方位木DPその3 ABC160-F Distributing Integers
全方位木DPその4 ABC220-F Distance Sums 2

円環で、先頭と直前を状態に持つDPその1 ABC229-F Make Bipartite
円環で、先頭と直前を状態に持つDPその2 ABC251-E Tahakashi and Animals

いもす法で配るDPその1 Educational DP Contest M Candies
いもす法で配るDPその2 ABC179-D Leaping Tak
いもす法で配るDPその3 ABC222-D Between Two Arrays
いもす法で配るDPその4 ABC249-E RLE
いもす法で配るDPその5 ABC253-E Distance Sequence

連結DPその1 ABC248-F Keep Connect


011 DP復元

DP復元その1 競技プログラミングの鉄則 A17 Dungeon 2
DP復元その2 典型90問 056 Lucky Bag(★5)


012 TSP問題

TSP問題その1 競技プログラミングの鉄則 B23 Traveling Salesman Problem
TSP問題その2 ABC180-E Traveling Salesman among Aerial Cities
TSP問題その3 ABC274-E Booster


013 LIS

列挙を引数として、LISの長さを返す ARC121-B Dividing Subsequence


014 二分法

二分法でLowerBound(配列) ARC121-B RGB Matching
二分法でUpperBound(配列) TDP G 辞書順
二分法でLower_Max(配列) TDP G 辞書順
二分法でLowerOrEqual_Max(配列) ABC172-C Tsundoku

二分法でUpperBound(List) ABC346-F SSttrriinngg in StringString

二分法で、Valとの差の最小値を返す ARC121-B RGB Matching

CanAchieveメソッドを使った二分法その1(long型) ABC144-E Gluttony
CanAchieveメソッドを使った二分法その2(decimal型) ABC236-E Average and Median
CanAchieveメソッドを使った二分法その3(double型) ABC255-B Light It Up

二分法で広義単調減少での連続した値の区間を求める ABC230-E Fraction Floor Sum
二分法で関数の最大下界を求める ABC342-E Last Train


015 三分探索

三分探索で極小値(long)を求めるその1 ABC212-C Min Difference
三分探索で極小値(long)を求めるその2 ABC279-D Freefall
三分探索で極小値(double)を求める 第6回PAST J ポイントとコストと


016 尺取法

尺取法その1 ABC032-C 列
尺取法その2 ARC022-B 細長いお菓子
尺取法その3 典型90問 034 There are few types of elements(★4)


017 オーバーフローの検知

2つの非負整数の足し算が、Limitを超えるかを返す TDP G 辞書順
2正数の掛け算が、Limitを超えるかを返す E8本(数学) 089 Log Inequality 2


018 幾何

ベクトルの内積を求める ARC042-B アリの高橋くん
ベクトルの外積を求める ARC042-B アリの高橋くん

線分の交差判定 AOJ CGL_2_B: Intersection

点と線分との距離を求める ARC042-B アリの高橋くん
線分と線分との距離を求める AOJ CGL_2_D: Distance

度数法の角度をラジアンに変換 ABC259-B Counterclockwise Rotation
ベクトルとSinとCosを引数として、回転したベクトルを返す ABC259-B Counterclockwise Rotation

円の軌跡が指定座標を含むかを返す ABC259-D Circumferences
円と円の位置関係を判定する E8本(数学) 035 Two Circles

2次元ベクトルの各成分を、GCD(X成分,Y成分)で割る ABC248-E K-colinear Line


019 等差数列

初項と公差と項数を引数として、等差数列の和を返す ABC253-D FizzBuzz Sum Hard
初項と公差と項数と法を引数として、等差数列の和を返す ABC238-C digitnum
初項と末項と公差と法を引数として、等差数列の和を返す HHKB 2020 D Squares


020 等比数列

初項,公比,項数,法を引数とし、等比数列の和を返す(法が逆元を持つ場合) ABC224-F Problem where +s Separate Digits
初項,公比,項数,法を引数とし、等比数列の和を返す(法が逆元を持たなくても可)  ABC293-E Geometric Progression


021 群数列

群数列その1 ABC-029-D 1
群数列その2 競技プログラミングの鉄則 B37 Sum of Digits


022 ハッシュ値

Zobrist Hash ABC250-E Prefix Equality


023 転倒数

列挙を引数として、列挙内での転倒数を返す ABC261-F Sorting Color Balls


024 インタラクティブ問題

集合に無い値を返す ABC244-C Yamanote Line Game
二分探索のように、範囲を絞るその1 ABC299-D Find by Query
二分探索のように、範囲を絞るその2 ABC269-E Last Rook


025 二次元グリッド

ベクトルのX成分とY成分を引数とし、90度回転させた値を設定 ABC339-B Langton's Takahashi

右に90度回転させた盤面を返す ABC210-D National Railway
盤面のハッシュ値を求める ABC264-C Matrix Reducing
盤面の指定行を消す ABC264-C Matrix Reducing
盤面の指定列を消す ABC264-C Matrix Reducing
2次元配列の使用してない部分を縮小して返す(char型の2次元配列用) ABC322-D Polyomino

2次元グリッドへの敷き詰めその1 ABC196-D Hanjo
2次元グリッドへの敷き詰めその2 ABC322-D Polyomino
2次元グリッドへの敷き詰めその3 ABC345-D Tiling

二次元累積和その1 ARC025-B チョコレート
二次元累積和その2 競技プログラミングの鉄則 A08 Two Dimensional Sum
二次元累積和その3 典型90問 081 Friendly Group(★5)

二次元いもす法その1 競技プログラミングの鉄則 A09 Winter in ALGO Kingdom
二次元いもす法その2 典型90問 028 Cluttered Paper(★4)


026 01BFS

01BFSその1 典型90問 043 Maze Challenge with Lack of Sleep(★4)
01BFSその2 ABC213-E Stronger Takahashi
01BFSその3 ABC277-E Crystal Switches


027 マンハッタン距離

45度回転 典型90問 036 Max Manhattan Distance(★5)


028 階乗

ルジャンドルの定理 ABC280-D Factorial and Multiple


029 文字列

文字列のソートでStringComparer.Ordinalの指定で定数倍の高速化 ABC155-C Poll

ローリングハッシュ(long型) 競技プログラミングの鉄則 A56 String Hash
ローリングハッシュ(decimal型) ABC287-E Karuta
ローリングハッシュ(decimal型) で左や右に文字追加の拡張機能 ARC172-C Election

文字列Sが、文字列Tの(連続してなくてもよい)部分列かを判定 ARC154-B New Place
文字列を引数として、部分集合の文字列の個数を返す 第11回PAST K 部分列


030 ビット演算

引数のBitSetの部分集合の列挙を返す Educational DP Contest U Grouping
C++のPopCount ABC242-D ABC Transform

ビット全探索と島判定 ABC219-E Moat


031 途中からサイクルになる数列

途中からサイクルになる数列その1 ABC179-E Sequence Sum
途中からサイクルになる数列その2 典型90問 058 Original Calculator(★4)
途中からサイクルになる情報 ABC258-E Packing Potatoes

ダブリングその1 競技プログラミングの鉄則 A57 Doubling
ダブリングその2 競技プログラミングの鉄則 B57 Calculator


032 イベントソート

イベントソートその1 ABC274-F Fishing


033 乱択アルゴリズム

ラスベガス法(Guidでランダマイズソート) ABC315-D Magical Cookies
モンテカルロ法(1.9秒の間、最良値を調べる) ARC173-B Make Many Triangles


034 ゲーム問題

勝敗をメモ化再帰で求めるその1 競技プログラミングの鉄則 A32 Game 1
勝敗をメモ化再帰で求めるその2 ABC349-E Weighted Tic-Tac-Toe


090 その他の未整理なもの

平衡三進数に変換 第7回PAST G べき表現

行列での繰り返し二乗法 Educational DP Contest R Walk

decimal型でのsqrtメソッド ABC279-D Freefall


091 C#メモ

C#メモ