作成日 2025/08/19
最終更新日 2025/10/18

問題分類

背景

解いた問題が増えてきて類題をパッと出せなくなってきたのでメモしておきます。解いた範囲でまとめます。

当然ですが解法に触れまくるので自力で解きたい人は要注意。

項目

競プロ典型 90 問

https://atcoder.jp/contests/typical90

001 - Yokan Party(★4)
みんなに分けたときの最小値の最大化
  • 貪欲
  • 決め打ち二分探索
002 - Encyclopedia of Parentheses(★3)
括弧列の種類数
  • 全探索
003 - Longest Circular Road(★4)
辺を一本足して最大のサイクルを作る
  • 木の直径
004 - Cross Sum(★2)
あるマスのある行と列の和を出す
  • 前処理
  • 包除原理
005 - Restricted Digits(★7)
K種の数字でN桁の数を作って、Bの倍数になる種類数
  • 桁DP
  • 行列累乗
  • ダブリング
  • 返し二乗法
006 - Smallest Subsequence(★5)
長さNの文字列SのK文字の部分列の辞書順最小
  • 貪欲
007 - CP Classes(★3)
レーティングAとレーティングBの差の絶対値の和を最小化
  • ソート
  • 二分探索
008 - AtCounter(★4)
N文字の文字列Sから部分文字列でAtCoderとなる種類数
  • DP
  • 耳DP
009 - Three Point Angle(★6)
XY平面で、もっとも180度に近い角をなす三点を探す
  • ソート
  • 二分探索
010 - Score Sum Queries(★2)
2つのクラスのL ~ R の点数の合計をQ回出す
  • 累積和
011 - Gravy Jobs(★6)
締め切りがDiで、連続するCi日を使ってSiの報酬をもらう。報酬の合計を最大化。
  • ソート
  • DP
012 - Red Painting(★4)
HWのグリッドに対して2つのクエリが与えられるので処理
・マスを塗る
・2マス間を塗られたマスだけで移動できるか判定する
  • UnionFind
013 - Passing(★5)
ある点を経由した最短距離を出す
  • 始点と終点からダイクストラ
014 - We Used to Sing a Song Together(★3)
始点と終点の距離の和を最小化
  • ソート
  • 貪欲
015 - Don't be too close(★6)
一定以上離れた数値をピックする方法の種類数
  • 調和級数
  • 組み合わせ
  • 二項係数
016 - Minimum Coins(★3)
3つの基底でNを作るとき、必要な要素の最小化
  • 工夫した全探索
  • 途中結果から最後を確定
017 - Crossing Segments(★7)
交差する弦の数
  • 条件整理
  • 余事象
  • 終点でソート
  • Binary Indexed Tree(BIT)
018 - Statue of Chokudai(★3)
時間によって変わる位置から、ある地点を見たときの角度
  • 三角関数
019 - Pick Two(★6)
連続要素を取り除くコストを2数の差の絶対値、全要素を除去した時のコストの最小化
  • 区間DP
020 - Log Inequality(★3)
対数の大小の比較
  • 誤差
  • 整数範囲で計算
021 - Come Back in One Piece(★5)
DAGの最大サイクルを探す
  • 強連結分解(SCC)
022 - Cubic Cake(★2)
直方体を立方体に分割したとき、最大の立方体求める
  • 最大公約数(GCD)
023 - Avoid War(★7)
周囲8マスに別のコマがない置き方の種類数
  • bit全探索
  • bitDP
  • 左上からDP/影響範囲だけ保持
  • 存在する状態だけチェック
024 - Select +/- One(★2)
2つの数列をK回の1の加減算の操作で一致させる
  • 偶奇の一致(パリティ)
025 - Digit Product Equation(★7)
各桁の積と元の数字の関係を条件を満たす数字の種類数
  • 工夫した全探索
  • ソート
  • 重複組み合わせ
026 - Independent Set on a Tree(★4)
木から隣り合わない頂点を取り出す方法
  • 二部グラフ
027 - Sign Up Requests (★2)
存在管理。あるidが存在しないなら処理をする。
  • map
028 - Cluttered Paper(★4)
紙を敷き詰めて指定枚数重なっている場所の面積
  • 2次元imos
029 - Long Bricks(★5)
長さの異なるブロックを置いてそれぞれの高さを求める
  • 座標圧縮
  • 区間最大/区間更新のlazySegTree
030 - K Factors(★5)
素因数がk個ある数字の種類数
  • 素因数分解
  • 約数列挙
031 - VS AtCoder(★6)
山から石を取るゲームの必勝判定
  • Grundy数
032 - AtCoder Ekiden(★3)
N人で駅伝。険悪な二人は襷をつなげない。かかる時間の最小化
  • 全探索
  • 別解 bitDP
033 - Not Too Bright(★2)
指定領域に条件を満たすように明かりを配置したとき、置ける最大値
  • 1のコーナーケースに注意
034 - There are few types of elements(★4)
連続部分列に登場する要素がK個になる、最長部分列を求める
  • 尺取り法
035 - Preserve Connectivity(★7)
指定した頂点が連結状態であるのに必要な枝の数を最小化
  • 木DP
  • 最近共通祖先(LCA)
  • 木の座標圧縮
  • 頂点の距離から枝数を出す
036 - Max Manhattan Distance(★5)
マンハッタン距離の最大値を出す
  • マンハッタン距離
  • 45度回転
037 - Don't Leave the Spice(★5)
L~Rの間で自由に使えるスパイスをちょうどW使い、作った料理の価値を最大化する
  • DP
  • 区間最大SegTree
038 - Large LCM(★3)
AとBの最小公倍数を出すが、大きい場合はlargeと出す
  • かける前に割る
039 - Tree Distance(★5)
木の頂点間距離の和
  • 主客転倒
  • 枝を何回通るかで処理
  • 木DP
040 - Get More Money(★7)
鍵とお金がある家にW円払って入る。ただし、家に入るには鍵が必要。スコアの最大化
  • 燃やす埋める問題
  • 最大フロー/最小カット
041 - Piles in AtCoder Farm(★7)
多角形を作り、内部の格子点の数を数え上げ
  • 凸包
  • 割り算の切り上げ
  • ピックの定理
042 - Multiple of 9(★4)
9の倍数かつ、桁の和がKの数字の種類数
  • 倍数判定
043 - Maze Challenge with Lack of Sleep(★4)
迷路攻略で曲がる回数を最小化
  • 拡張BFS
  • 拡張ダイクストラ
  • 01-BFS
  • 方向ごとのパラメータを持つ
044 - Shift and Swapping(★3)
数列のシフトとスワップ処理をしたときに、Aiの値を出す
  • シフト回数を保持
  • オフセットを載せてスワップ
  • 見かけ上の変化
045 - Simple Grouping(★6)
N個の頂点をK個にグルーピング。距離の最大値を最小化
  • bitDP
  • 部分集合の部分集合
046 - I Love 46(★3)
3つの数列から数字を取ってきて、和を46の倍数にする種類数
  • modで分類
047 - Monochromatic Diagonal(★7)
一定のルールに従ってRGBでグリッドを塗る。斜線の数を数え上げ
  • 数字に置き換え
  • ローリングハッシュ
  • Z-Algolithm
048 - I will not drop out(★3)
満点がA点、部分点がB点のテストで時間内に取る点を最大化
  • 時間あたりにとれる点数でソート
  • 貪欲
049 - Flip Digits 2(★6)
L~Rのビットを反転させるアイテムを使って文字列を変換。一致可能か判定し、可能ならコストの最小化
  • 隣接する2つが一致してるかどうかを管理
  • 最小全域木
  • クラスカル法
  • 境界だけ操作
050 - Stair Jump(★3)
1かL進んでちょうどN進む方法の種類数
  • DP
051 - Typical Shop(★5)
N個の商品からK個選んで、合計をP以下にする種類数
  • 半分全列挙
052 - Dice Product(★3)
サイコロの出目の積が得点。得点の和を出す
  • 和を取ってから積を出す
053 - Discrete Dowsing(★7)
極大値を1つ持つ数列の極大値の位置を求める。数値は開くまで不明
  • 三分探索
  • 二分探索
  • 微分
  • 黄金分割探索
054 - Takahashi Number(★6)
すべての頂点に対してのある頂点からの最短距離
  • 完全グラフ
  • 中点を追加して辺を減らす
055 - Select 5(★2)
数列から5つ選んで乗じたときの余りがQになる種類数
  • 多重ループ
  • 定数倍
056 - Lucky Bag(★5)
Ai円とBi円の福袋から選んで、ちょうどS円になるようにする。可能かどうかと購入方法を出す
  • DP復元
057 - Flip Flap(★6)
一部の状態を変更する操作で、目標状態を作る操作の種類数
  • 操作の合体/置き換え
  • 行列の掃き出し
058 - Original Calculator(★4)
元の数字と桁和を足してmodを取り数字を変更。K回操作を行ったときの値
  • 周期性
059 - Many Graph Queries(★7)
DAGで、aからbに到達できるか判定
  • トポロジカル順
  • DP
  • bit演算で高速化
060 - Chimera(★5)
数列Aから極大値を1つ持つ部分列Bを作る。最長部分列の長さを求める
  • 両端から処理
  • 最長増加部分列(LIS)
061 - Deck(★2)
先頭と最後尾に入れる操作と、x番目の要素を出力する操作
  • deque
  • 大きな配列の真ん中で操作
062 - Paint All(★6)
条件つき操作で、すべての操作を完了する
  • DAG
  • 逆から操作
063 - Monochromatic Subgrid(★4)
HWのグリッドのうち、一部の行列を取りだして出現する数字が1つになるようにする
  • 小さい制約で全探索
064 - Uplift(★3)
区間加算減算の操作と、連続数の差の絶対値の和を求める
  • 境界だけ操作
  • 階差
065 - RGB Balls 2(★7)
制約を満たすボールの選び方の種類数
  • 組み合わせ/二項係数
  • 式変形
  • 下限/上限
  • 畳み込み
  • FFT
066 - Various Arrays(★5)
ランダムで作られる数列の転倒数の期待値
  • 期待値
067 - Base 8 to 9(★2)
8進数を9進数に変換。出た数字を一部変更。K回繰り返した値
  • N進法
  • オーバーフロー
068 - Paired Information(★5)
2つの項の関係が与えられる。ある数を固定した場合、別の数が一意に定まるか判定
  • UnionFind
  • クエリ先読み
069 - Colorful Blocks 2(★3)
条件を満たすようにする種類数
  • 漸化式
  • 繰り返し2乗法
070 - Plant Planning(★4)
マンハッタン距離の総和の最小化
  • XYの独立操作
  • 変化量の観察
  • 中央値で最小値
071 - Fuzzy Priority(★7)
条件を満たす順列をK個見つける
  • DAG
  • トポロジカルソート
  • DFS
072 - Loop Railway Plan(★4)
入れないマスがあるグリッドで、最大ループを求める
  • 全探索
  • DFS
  • バックトラック
073 - We Need Both a and b(★5)
ある木にa・b両方の文字を含むように枝を削除する方法の種類数
  • 木DP
  • 特徴ごとにDP
074 - ABC String 2(★6)
操作できる最大数を求める
  • 観察/実験
  • 数字で考える
  • 不変量
075 - Magic For Balls(★3)
素因数分解した数字を2つ作る。操作回数の最小化
  • 素因数分解
076 - Cake Cut(★3)
全体の1/10になるように連続部分列を選択する
  • 円環の延長
  • 累積和
  • 二分探索
077 - Planes on a 2D Plane(★7)
時間で移動するものを、条件を満たすように配置
  • 方向でBIT全探索(N≦6)
  • DAG
  • 二部マッチング
078 - Easy Graph Problem(★2)
自身より頂点番号が小さい頂点がただ1つ存在する頂点の個数
  • グラフ
  • ソート
079 - Two by Two(★3)
2*2のマスに操作を行い、別のグリッドと一致できるか判定
  • 前から操作
080 - Let's Share Bit(★6)
数列の要素すべてとbitAndをとっても0にならないもの種類数
  • 包除原理
081 - Friendly Group(★5)
条件を満たすようにグループ分け。グループの要素数の最大値
  • 二次元平面にプロット
  • 累積和
  • 包除原理
  • 全探索
082 - Counting Numbers(★3)
L~Rの間の数字xをx回書く。文字数を求める
  • 桁ごとに繰り返し
  • オーバーフロー
083 - Colorful Graph(★6)
グラフの頂点と隣接頂点に色を付ける。色を出力する。
  • スターグラフ/ウニグラフ
  • 平方分割
084 - There are two types of characters(★3)084 - There are two types of characters(★3)
連続区間に〇と×が含まれる区間の数を求める
  • 余事象
  • ランレングス圧縮(RLE)
085 - Multiplication 085(★4)
a*b*C = K となるabcの種類数
  • 素因数分解
  • 約数列挙
  • 工夫した全探索
086 - Snuke's Favorite Arrays(★5)
bitORの条件を満たす数列の種類数
  • bitごとに処理
  • bit全探索
087 - Chokudai's Demand(★5)
経路を結ぶ費用を設定し、条件を満たす費用の最大値を求める
  • ワーシャルフロイド
  • 広義単調減少
  • 二分探索
088 - Similar but Different Ways(★6)
数列Aから条件を満たすようにカードを選ぶ方法を1つ出力
  • 鳩ノ巣原理
  • DFS
089 - Partitions and Inversions(★7)
数列Aを分割し、各区間のバブルソートに必要な手数の回数の和がK以下になる分割方法の種類数
  • 切る/切らないの累乗(K=0)
  • 全探索
  • 転倒数
  • 尺取り法
  • Binary Indexed Tree(BIT)
  • 座標圧縮
  • DP
  • 累積和のDP
090 - Tenkei90's Last Problem(★7)
連続部分列の最小値*長さがK以下になる連続部分列の種類数
  • DP
  • 行列累乗
  • 全探索
  • 掛け算の不等式は割り算でまとめる
  • 多項間漸化式
  • FFT
  • 高速きたまさ法
  • ボストン森法

ABC400~

ABC430 A - Candy Cookie Law
公式解説(kyopro_friends)
条件が与えられるので判定
  • if
B - Count Subgrid
公式解説(kyopro_friends)
N*NからM*Mを取り出す。取り出せる模様の種類数を求める
  • set
C - Truck Driver
公式解説(kyopro_friends)
l~rの区間にaがA個以上、bがB個未満になるl,rの組み合わせを求める
  • 尺取り法
  • 二文探索
  • 個数の単調性に注目
D - Neighbor Distance
公式解説(physics0523)
i番目の人がxiに新しく立つ。最も近い人の距離の和を出す。
  • 隣接リスト
  • map
  • 差分更新
E - Shift String
公式解説(physics0523)
文字列Aの先頭を末尾に移動してBと一致するか判定
  • ローリングハッシュ
  • 2つ結合してシフトを再現
F - Back and Forth Filling
公式解説(physics0523)
位置関係が与えられる。i番目に出現しうる数字の種類数を出す
  • トポロジカル順
  • imos法
G - Range Set Modifying Query
公式解説(kyopro_friends)
L~Rの集合に対して要素の追加・削除をする。要素が最大数になっている集合を列挙する
  • 未着手
ABC429 A - Too Many Requests
公式解説(mechanicalpenciI)
1 ~ N がM以下か判定
  • for
  • if
B - N - 1
公式解説(sounansya)
全体の和から項目を1つ引いてMになるか判定
  • 累積和
C - Odd One Subsequence
公式解説(mechanicalpenciI)
Aから3つ選択。2つの数字が同じ、1つ別の選び方
  • 数字ごとにカウント
  • コンビネーション
D - On AtCoder Conference
公式解説(mechanicalpenciI)
地点nからC人すれ違うまで進む。同じ場所に人がいるのでCとは限らない。すべての地点からC人以上であうまで移動したとき、出会った合計の人数。
  • 尺取り法
E - Hit and Away
公式解説(mechanicalpenciI)
SとDの2種類の頂点が与えられる。Dから距離が近い2つのS距離の和。
  • 多始点BFS
  • 始点・距離の管理
F - Shortest Path Query
公式解説(sounansya)
高さ3の迷路が与えられる。ゴールまでの距離をQ回出す。毎回1マスだけ壁と道が反転する。
  • セグ木
  • 横方向に戻ることはないので、縦の移動量だけ管理
G - Sum of Pow of Mod of Linear
公式解説(sounansya)
k = 0 N−1 X ^((Ak+B)modM) を R で割ったあまりを求める
  • 未確認
ABC428 A - Grandma's Footsteps
公式解説(sheyasutaka)
A秒移動、B秒止まる。どれだけ移動できるか
  • シミュレーション
B - Most Frequent Substrings
公式解説(sheyasutaka)
長さKの部分文字列のうち、出現回数が最大のものを全部出力
  • map
C - Brackets Stack Query
公式解説(Nyaan)
括弧列が正しいかどうかをチェック
  • 括弧列の条件
D - 183184
公式解説(sheyasutaka)
CとC+Xを結合した数字が平方数になるXの数を求める
  • C+Xの桁数で場合分け
  • 不等式
E - Farthest Vertex
公式解説(Nyaan)
1~Nの頂点から、最も遠いかつ、頂点番号が最大の頂点をそれぞれ出す。
  • グラフの拡張
  • 頂点番号を距離に影響しないように追加
  • 直径
F - Pyramid Alignment
公式解説(sheyasutaka)
長さが単調増加になるように区間がある。操作は次の3つ
・ある区間より小さな区間をその区間の右端に揃える
・ある区間より小さな区間をその区間の左端に揃える
・点x+1/2を含む区間数を出す
  • 区間更新のlazySegTree
  • そろっている位置が右端か左端か管理
  • 端点に注目してグループで管理
G - Necklace
公式解説(Nyaan)
選んだ宝石の積で美しさが決まるネックレスがある。2~Uすべての作り方の種類数を求める。
  • 未完了
ABC427 A - ABC -> AC
公式解説(cn449)
奇数長の文字列の真ん中を削除
  • erase
B - Sum of Digits Sequence
公式解説(cn449)
桁和と漸化式
  • 桁和
  • 累積和
C - Bipartize
公式解説(MMNMM)
あるグラフが与えられる。2部グラフを達成するのに削除すべき枝の最小数。
  • 頂点に対して全探索
D - The Simple Game
公式解説(cn449)
頂点にAかBが書かれたグラフが与えられる。コマを交互に動かし、最終的に自分の文字が書かれたマスにコマがあると勝。勝敗を出す。
  • 後ろからDP
E - Wind Cleaning
公式解説(cn449)
H*Wのマスにごみがある。
・すべてのごみを同一方向に移動させる。
・ゴミが入っちゃいけないマスがある。
・ゴミがマス外に出ると消える。
最小の操作回数を求める
  • 6次元dp
  • 中心、上下左右の端で管理
  • BFS
F - Not Adjacent
公式解説(MMNMM)
和がMOD下で0、隣接項を取らないで作れる取り方の種類数
  • 半分全列挙
G - Takahashi's Expectation 2
公式解説(MMNMM)
テンションがXi以上ならテンションがA上がる。それ以外はB下がる。
クエリは
・初期値を与えて最後のテンションを出す
・プレゼントを追加する
の2種類
  • 未完了
ABC426 A - OS Versions
公式解説(physics0523)
順番付けされた文字列を比較
  • map
  • 辞書順比較
B - The Odd One Out
公式解説(physics0523)
文字列にただ1つ出る文字を出力
  • map
  • 辞書順ソート
C - Upgrade Required
公式解説(physics0523)
X以下の数字をYにする
  • PriorityQueue
  • 最小値を管理
D - Pop and Insert
公式解説(yuto1115)
01からなる文字列を指定の操作で文字種を1種類にする。最小操作回数を求める
  • ランレングス圧縮(RLE)
  • 出現位置を二文探索
E - Closest Moment
公式解説(yuto1115)
直線に移動する人が2人。2人の距離の最小値を出す
  • 三分探索
  • 条件で場合分け
F - Clearance
公式解説(physics0523)
L ~ Rの要素からKを引く。0以下にはならない。引けた数字の和を毎回出力する。
  • 区間減算、0以下の要素を返す、LazySegTree
  • 商品の売り切れ状態を管理するsegTree
  • 負数を正の無限大で管理
G - Range Knapsack Query
公式解説(yuto1115)
L~Rの商品でナップサックDPを解く
  • 未完了
ABC425 A - Sigma Cubes
公式解説(sounansya)
与式の計算をする
  • for文の練習
B - Find Permutation 2
公式解説(sounansya)
-1に任意の数字を入れたときに1~Nの数字が各1つずつ現れているかをチェック
  • 順列
  • mapで個数管理
C - Rotate and Sum Query
公式解説(sounansya)
先頭の要素を最後尾に移動するクエリと、L~Rの和を求めるクエリを処理する
  • 先頭を管理
  • 循環は2倍の配列で管理
D - Ulam-Warburton Automaton
公式解説(toam)
隣接マスが2つ黒いと黒くなるマスがある。最終状態を求める。
  • シミュレーション
  • ターン性のBFS
E - Count Sequences 2
公式解説(toam)
各要素iがCiずつある整数列を作れる組み合わせのパターン数
  • 前計算
  • パスカルの三角形
  • 組み合わせ
F - Inserting Process
公式解説(toam)
部分文字列を作っていく。遷移の種類数を求める。
  • bitDP
  • 同一状態の排除
G - Sum of Min of XOR
公式解説(sounansya)
xとAiのXORの最小値を出す。0 <= x <= M-1の範囲すべてでやる。
  • 未完了
ABC424 A - Isosceles
公式解説(mechanicalpenciI)
二等辺三角形の判定
  • 一致判定
B - Perfect
公式解説(mechanicalpenciI)
N人の人がM個のテストを受ける。満点になった人を順に出力
  • 数値管理
C - New Skill Acquired
公式解説(kyopro_friends)
スキルを習得する条件が与えられる。最終的な所持スキルを出力
  • グラフ
  • 到達判定
D - 2x2 Erasing 2
公式解説(mechanicalpenciI)
2×2の黒い正方形があるとだめ
  • 列ごとにbitDP
  • 旗DP
  • DFS
E - Cut in Half
公式解説(kyopro_friends)
長い棒を半分に分ける。K回繰り返した後のX番目の棒の長さを求める。
  • PriorityQueue
  • 二分探索
F - Adding Chords
公式解説(kyopro_friends)
円に弦を張る。交差するなら張らない。与えられた2点間に弦を張れるかどうかを判定。
  • 区間管理
  • ハッシュで管理
  • 始点・終点を管理したLazySegTree
G - Set list
公式解説(mechanicalpenciI)
N人のアイドルがM曲使って踊る。i人目のアイドルはAi回踊れて、j曲目はBj人踊る必要があり、盛り上がりはCj。Cjの和を最大化する。
  • 未完了
ABC423 A - Scary Fee
公式解説(sheyasutaka)
1000円おろすのに手数料C円。最大いくらおろせるか
  • 操作回数を出す
B - Locked Rooms
公式解説(cn449)
一列の部屋に人がいる。どこまでいけるか
  • 数値の連続をチェック
  • 両端から処理
C - Lock All Doors
公式解説(cn449)
一列の部屋に人がいる。すべてのドアを閉めるのに必要な操作回数の最小値
  • 数値の連続をチェック
  • 区間の結合
D - Long Waiting
公式解説(sheyasutaka)
到着時刻と滞在時間が与えられる。入店時間を出力。
  • イベント時刻
  • PriorityQueue
E - Sum of Subarrays
公式解説(cn449)
3重Σ
  • 累積和
  • 縦横変換
F - Loud Cicada
公式解説(sheyasutaka)
Aの倍数年ごとに蝉が出現。M種類出る年の種類数
  • メビウス変換
G - Small Multiple 2
公式解説(sheyasutaka)
未完了
ABC422 A - Stage Clear
公式解説(MMNMM)
1-1 ~ 8-8 があるので次に進める
  • 条件に注意して分岐
B - Looped Rope
公式解説(MMNMM)
グリッドにおいて周囲のマスとの関係を満たすか判定
  • グリッド
  • 番兵(公式解説)
C - AtCoder AAC Contest
公式解説(MMNMM)
ABCのアルファベットが与えられるので作れるACの数の最大値
  • 最小値の最大値
  • ボトルネックを考える
  • 二分探索(ユーザー解説)
D - Least Unbalanced
公式解説(Nyaan)
最大値と最小値の差が小さくなるように分割する。
  • 再起関数
  • 逆操作
E - Colinear
公式解説(Nyaan)
N個の点のうち、過半数以上を通る直線を求める。
  • 乱択アルゴリズム
F - Eat and Ride
公式解説(MMNMM)
頂点に入るとコストWが増える。枝の移動はWかかる。各頂点にたどりつくのに必要なWの最小値を求める。
  • 頂点の寄与
  • 残りの操作回数を乗じる
G - Balls and Boxes
公式解説(Nyaan)
条件を満たすようにボールを分ける方法の種類数
  • 母関数
  • 畳み込み
ABC421 A - Misdelivery
公式解説(kyopro_friends)
i番目の名前が指定したものか判定
  • 配列
B - Fibonacci Reversed
公式解説(yuto1115)
フィボナッチ数列。ただし、足したものを桁を逆転させる
  • 各桁を取り出す
C - Alternated
公式解説(kyopro_friends)
文字列をABAB……かBABA……にするのに必要なスワップ回数
  • 差の絶対値の和
D - RLE Moving
公式解説(kyopro_friends)
ランレングス圧縮されている移動を解凍して、同じマスにいる時刻数を求める
  • ランレングス圧縮(RLE)
  • 移動の交差条件 
E - Yacht
公式解説(kyopro_friends)
ヨットゲームの期待値を求める
  • 期待値DP
  • メモ化再起
F - Erase between X and Y
公式解説(yuto1115)
Xの後ろに数字を追加。XとYの間にある数字を削除。削除した数字の和を出す
  • 連結リスト
  • 多始点でチェック
G - Increase to make it Increasing
公式解説(yuto1115)
区間L~Rに1を足す操作を複数回行う。単調増加列を作れるか判断、作るのに必要な操作回数
  • 未完了
ABC420 A - What month is it?
公式解説(sounansya)
X月のYヶ月後はいつ?
  • mod
B - Most Minority
公式解説(physics0523)
多数決の少数派にいると点が入る。最高点の人を列挙する。
  • ループ
C - Sum of Min Query
公式解説(sounansya)
二つの数列の最小値の和を出す。変更が複数回行われる
  • 累積和
  • 差分計算
D - Toggle Maze
公式解説(sounansya)
ボタンを押すと開閉するドアがある迷路でゴールにつく最短経路距離
  • 頂点倍化
  • 状態ごとにBFS
E - Reachability Query
公式解説(physics0523)
有向辺を追加・頂点の色を白黒反転・ある頂点から黒にたどり着けるかを判定
  • UnionFind
F - kirinuki
公式解説(physics0523)
N*Mのグリッド中にある.だけのKマス以下の長方形を探す。
  • 未完了
G - sqrt(n²+n+X)
公式解説(sounansya)
ルートの中が整数になるnを全部出す
  • 有利化
  • 平方完成
  • 約数列挙
ABC419 A - AtCoder Language
公式解説(cn449)
単語を別の単語で出力
  • 分岐
B - Get Min
公式解説(cn449)
袋に入れる操作と最小値を取り出す操作
  • PriorityQueue
C - King's Summit
公式解説(cn449)
縦横斜めに移動するものを一か所に集める
  • XY独立
  • 最大値と最小値の平均
D - Substr Swap
公式解説(toam)
SとTのL~Rを入れ替える。Q回後の状態を出力
  • imos法
  • 偶奇判定
E - Subarray Sum Divisibility
公式解説(cn449)
すべてのL個の連続部分列の和がMの倍数になる操作の最小回数
  • modで分類
  • DP
F - All Included
公式解説(toam)
与えられたN個の文字列をすべて含むL文字の種類数
  • Aho-Corasick法
  • DP
G - Count Simple Paths 2
公式解説(toam)
頂点1から頂点Nまでの単純パスで、経路長が1~N-1のものの個数をそれぞれカウント。
  • 無向グラフ
  • 未完了
ABC418 A - I'm a teapot
公式解説(Nyaan)
文字列がteaで終わるか判定
  • 比較
B - You're a teapot
公式解説(sheyasutaka)
tで始まってtで終わる部分文字列のうち、tの割合が最も高いものを探索
  • 全探索
C - Flush
公式解説(sheyasutaka)
同じ数字をK個選択するために必要な山札の大きさを探す
  • 累積和
  • 鳩ノ巣原理(?)
D - XNOR Operation
公式解説(Nyaan)
隣接する2数のxorを取って置き換える。最後に1になる部分文字列の種類数を求める
  • DP
  • 不変量
E - Trapezium
公式解説(sheyasutaka)
平面に台形がいくつあるか数え上げ
  • 傾きを整数で管理
  • 平行四辺形になる条件
F - We're teapots
公式解説(sheyasutaka)
・紅茶かコーヒーを入れる
・2連続でコーヒ-にしない
・ai != -1なら、1 ~ i のうち、ai個にコーヒーを入れる
・aiの値を変える
条件を満たす入れ方の種類数を出す。
  • 未完了
G - Binary Operation
公式解説(Nyaan)
{0,1}から要素をA,B,C,Dを選ぶ方法すべてに対して次を求める。
・隣接する2数を条件に従ってA~Dに変更する。最終的に1になるとOK
・Tの部分文字列のうち、上記の条件を満たす最長の長さと、条件を満たす部分文字列の個数を求める。
  • 未完了
ABC417 A - A Substring
公式解説(MMNMM)
先頭からA文字、末尾からB文字落とした部分文字列を出力
  • 条件に注意してfor or Substring
B - Search and Delete
公式解説(mechanicalpenciI)
数列に含まれる指定された数字を削除
  • mapで個数管理
C - Distance Indicators
公式解説(MMNMM)
i-j = A[i] + A[j]になるペアの数え上げ
  • 式変形
D - Takahashi's Expectation
公式解説(MMNMM)
指定したスコアより低い場合、スコアが下がり、指定したスコア以上の場合スコアが上がる。初期値を与えたときの最終スコアを出す
  • 後ろからDP
  • 変化が一定の場合は簡略化
  • 累積和
E - A Path in A Dictionary
公式解説(mechanicalpenciI)
始点から終点に辞書順最小で移動
  • DFS
F - Random Gathering
公式解説(MMNMM)
L~Rの石を全部集めて一つのさらに集める。最終的な石の数の期待値を出す。
  • mod期待値
  • 区間和/区間更新のlazySegTree
G - Binary Cat
公式解説(mechanicalpenciI)
文字列SLとSRと結合してSiを新規作成。X文字目を求める操作をQ回。
  • 未完了
ABC416 A - Vacation Validation
公式解説(kyopro_friends)
文字列のL~Rが全部oかを判断
  • for/if
B - 1D Akari
公式解説(sounansya)
oとoの間に#が必ず一つあるようにして、oの数を最大化
  • 貪欲
  • 仮想配置で場合分けを減らす
C - Concat (X-th)
公式解説(kyopro_friends)
K個の文字列を任意で結合。辞書順でX番目の文字列を出力
  • DFS
  • 辞書順
D - Match, Mod, Minimize 2
公式解説(sounansya)
A,Bを並び替え (Ai + Bi) mod M の和を最小化
  • modの工夫
  • ソート
  • 尺取り法
E - Development
公式解説(kyopro_friends)
N個の街を双方向に結ぶ陸路と、完全グラフを作る空路がある。陸路・空路の追加と移動時間を求めるクエリが与えられるので処理。
  • ワーシャルフロイド法
  • 一部更新のワーシャルフロイド法(陸路)
  • 完全グラフ(空路)
  • 中点を追加して辺を減らす(空路)
F - Paint Tree 2
公式解説(sounansya)
色が塗られてないパスを選択し、そのパスを塗る。パスにある頂点の数字の和を求める。
  • 木DP
  • 端点の管理
G - Concat (1st)
公式解説(kyopro_friends)
N個の文字列を並び替え結合。辞書順最小を出力。
  • 未完了
ABC415 A - Unsupported Type
公式解説(physics0523)
数列AにXが含まれるかチェック
  • setで管理
B - Pick Two
公式解説(physics0523)
前から#の位置を2つずつ出力
  • for文
C - Mixture
公式解説(physics0523)
N個の薬を混ぜると2^Nの状態がある。各状態が許されるかどうかが与えられるので、全部混ぜた状態を作れるか判定する
  • bitDP
D - Get Many Stickers
公式解説(yuto1115)
コーラ瓶Ai本を持っていくとコーラをBi本もらえる。 交換回数の最大化。
  • 貪欲
E - Hungry Takahashi
公式解説(yuto1115)
H*Wのマスを移動。マスi,jにはコインがAijあり立ち入ると回収できる。k日目はPkのコインを支払う。ゴールにたどりつくのに必要な最小の開始枚数を求める。
  • 二分探索
  • 後ろからDP
F - Max Combo
公式解説(physics0523)
長さNの文字列があり、1文字を変更するクエリと区間L~Rの中にある同じ文字が続く長さの最長を求める。
  • 左の文字数、右の文字数、区間内の最大連続数を保持したSegTree
G - Get Many Cola
公式解説(yuto1115)
コーラ瓶Ai本を持っていくとコーラをBi本もらえる。 飲める量の最大化。
ABC414 A - Streamer Takahashi
公式解説(toam)
Xi時からYi時まで配信を見れる人がいる。L時からR時を包含している人がいるか判定
  • if文
  • for文
B - String Too Long
公式解説(toam)
ランレングス圧縮の復元
  • if文
C - Palindromic in Both Bases
公式解説(sheyasutaka)
10進法とA進法でどちらも回文の数字の種類数を求める
  • DFS
D - Transmission Mission
公式解説(sheyasutaka)
N個の点をM個の線分で覆う。線分の長さの和の最小値を求める。
  • sort
  • 貪欲
E - Count A%B=C
公式解説(sheyasutaka)
1 ≦ a,b,c ≦ N かつa,b,c,は相異なる。 a%b = cの種類数を求める。
  • 式変形
  • ルートNで場合分け
F - Jump Traveling
公式解説(toam)
N頂点木の上で距離Kの点に移動。頂点1から頂点kに移動可能かどうかを判定。
  • 工夫したBFS
  • 同じ頂点には2回しか入らない
G - AtCoder Express 4
公式解説(toam)
l~rで人が乗りL~Rで人を下す電車がある。初乗り運賃cと距離に応じた費用が掛かる。駅1から各駅に移動する経路があるなら、必要な最小運賃を求める。

ABC350~399

A - Cut A - Cut
公式解説(kyopro_friends)
山札をカットして上に積む
  • 範囲に注意してfor
  • mod
B - Decrease 2 max elements
公式解説(Cyanmond)
降順にソート。手前2つを減算。0より大きい数字が1つになったら終了
  • 降順sort
C - Triple Attack
公式解説(kyopro_friends)
1 1 3 とダメージを与える人がN体のモンスターを倒すのにかかる時間
  • 周期でまとめて操作
  • 余りを愚直
D - Minimum Steiner Tree
公式解説(kyopro_friends)
指定頂点をすべて含む最小の木を求める
  • DFS
  • 木DP
E - Train Delay
公式解説(kyopro_friends)
電車が遅れる。乗り換え可能だった電車が乗り換え可能になるように他の電車を遅らせる。
  • イベント全部でソート
F - Dividing Game
公式解説(Cyanmond)
約数のどれかに遷移。全部1にしたら勝利。必勝判定を行う。
  • 約数列挙
  • Grundy数
G - Add and Multiply Queries
公式解説(Cyanmond)
A・B二つの数列があり、Aは加算・B乗算として操作。
L ~ R のiに対してAiかBiを作用させたときの最大値を出す。
  • BIT
  • 制約から状態を想定(2以上の乗算回数は少ない)
ABC367 A - Shout Everyday
公式解説(toam)
時間が3つ与えられるので、条件判定
  • 大小関係に注意して分岐
B - Cut .0
公式解説(physics0523)
小数点以下の0を省略して出力
  • 文字列で処理
  • そのまま出力
C - Enumerate Sequences
公式解説(physics0523)
条件を満たす数列を列挙
  • 全探索
D - Pedometer
公式解説(physics0523)
円環で移動距離がMの倍数になるような点の組み合わせを数え上げ
  • mod で分類
E - Permute K times
公式解説(physics0523)
参照を示す数列が与えられるのでK回後の状態を出力
  • ダブリング
  • level ancestor(ユーザー解説)
F - Rearrange Query
公式解説(toam)
数列A・BのL~Rに現れる数字の数が等しいか判断
  • ハッシュ(乱数)
  • Schwartz-Zippel lemma
G - Sum of (XOR^K or 0)
公式解説(toam)
数列Aの部分列をBとする。Bの要素数がMの倍数の時、総XORを取ってK乗したものの和を求める。
  • 未完了
ABC366 A - Election 2
公式解説(MtSaka)
2人で選挙。結果が確定しているか判定
  • 過半数
B - Vertical Writing
公式解説(sotanishy)
横書きで与えられた文字列を縦書きにする
  • グリッドの回転
C - Balls and Bag Query
公式解説(MtSaka)
袋に数字が書かれたボールを入れたり出したり。入っているボールの種類数
  • map
  • 0の変化に注目
D - Cuboid Sum Query
公式解説(MtSaka)
3次元配列の直方体の一部の和を出す
  • 累積和
E - Manhattan Multifocal Ellipse
公式解説(sotanishy)
今ある点からの距離の和がD以下の点の種類数
  • XYの独立操作
  • 尺取り法
  • 二分探索
F - Maximum Composition
公式解説(MtSaka)
合成関数の最大値を求める
  • 式変形
G - XOR Neighbors
公式解説(sotanishy)
隣接頂点とのxorが0になるグラフをつくる
  • 未完了
ABC363 A - Piling Up
公式解説(mechanicalpenciI)
100の倍数ごとに増える瓦を増やしたい。必要な数値は?
  • MOD
B - Japanese Cursed Doll
公式解説(mechanicalpenciI)
髪の伸びる呪いの人形。髪の長さがT以上の人形がP体以上になるのは何日後か。
  • ソート
C - Avoid K Palindrome 2
公式解説(mechanicalpenciI)
長さKの回文が存在しない長さNの文字列Sの並び替えの種類数
  • DFS
  • nextPermutation
D - Palindromic Number
公式解説(Nyaan)
X番目の回文数を求める。
  • 繰り返し前の回文で管理
E - Sinking Land
公式解説(mechanicalpenciI)
i年後に高さiになる海に囲まれた島。沈まないで残っている面積を出す。
  • BFS(ダイクストラ)
F - Palindromic Expression
公式解説(Nyaan)
1~9の整数と乗算記号を使ってNを作れるか判定
  • 約数列挙
  • メモ化再起
G - Dynamic Scheduling
公式解説(Nyaan)
期日までにタスクを終わらせると報酬がもらえる。1つのタスクの期日と報酬が変わるので、Q回求める
  • 未完了
ABC362 A - Buy a Pen
公式解説(toam)
3つの要素のうち買えないものが1つある。最小値を出す。
  • if文
B - Right Triangle
公式解説(toam)
3点が与えられる。直角三角形か判定
  • ピタゴラスの定理
C - Sum = 0
公式解説(toam)
L~Rの値を取る値がN個。総和が0になるなら方法を出力。
  • 最大値・最小値を作成
  • 中間地の定理
  • 貪欲
D - Shortest Path 3
公式解説(sotanishy)
頂点と辺にコストがある。各頂点への最小移動コストを出す。
  • ダイクストラ
E - Count Arithmetic Subsequences
公式解説(sotanishy)
部分列が等差数列になる組み合わせ数を求める。
  • 公差に注目
  • dp
F - Perfect Matching on a Tree
公式解説(sotanishy)
グラフの最大重みマッチングを求める。
  • グラフの重心
G - Count Substring Query
公式解説(toam)
Sの部分文字列がTと一致する個数をQ回求める。
  • SuffixArray
ABC361 A - Insert
公式解説(physics0523)
数列に数字を挿入
  • insert
B - Intersection of Cuboids
公式解説(kyopro_friends)
立方体の衝突判定
  • 区間の交差
Make Them Narrow
公式解説(physics0523)
要素をK個削除。最大値と最小値の差が最小になるようにする。
  • ソート
  • 残り要素数で差分
D - Go Stone Puzzle
公式解説(kyopro_friends)
石を2つずつまとめて移動。初期状態から終状態を作るのに必要な手数
  • BFS
E - Tree and Hamilton Path 2
公式解説(kyopro_friends)
すべての頂点を1度は通る経路の最小値
  • Tree
  • 直径
F - x = a^b
公式解説(physics0523)
a^b乗の形で表現できるN以下の数字の種類数
  • 約数包除原理
G - Go Territory
公式解説(kyopro_friends)
石で囲まれたマスの数を求める
  • 未完了
ABC360 A - A Healthy Breakfast
公式解説(Cyanmond)
3文字の位置関係を出力
  • map
  • 総当たり
B - Vertical Reading
公式解説(MtSaka)
c文字ずつで改行。縦に指定の文字列が出現するか判定。
  • 総当たり
C - Move It
公式解説(MtSaka)
各荷物が最初に入っている箱と重さが与えられる。すべての箱に荷物が一個ある状態にするのに必要な最小の移動量。
  • 最大以外を移動
  • ソート
D - Ghost Ants 公式解説(MtSaka)
衝突しないアリが左右に動く。すれ違うアリの数を出力。
  • 向き別に分類
  • ソート
  • 二文探索
E - Random Swaps of Balls
公式解説(Cyanmond)
1個の黒とたくさんの白。場所を2つ選んでスワップ。黒の最終的な位置をmod下で求める。
  • mod期待値
  • dp
F - InterSections
公式解説(MtSaka)
N個の区間が与えられる。新しくL~Rの区間を張ったときに、交差する最大数を出す。一番左になるようにする。
  • 未完了
G - Suitable Edit for LIS
公式解説(Cyanmond)
数列の値を1つ自由に変更できる。LISの最大長を求める。
  • 操作を記録して復元
  • 耳DP(要復習)
ABC359 A - Count Takahashi
公式解説(MMNMM)
入力に指定文字列がいくつあるか数える
  • if
  • map
B - Couples
公式解説(nok0)
数列AのうちAiとAi+2が等しいものを見る
  • for文
C - Tile Distance 2
公式解説(MMNMM)
横幅2高さ1のタイルを交互に互い違いに敷き詰める。ある点からある点までに踏むタイルの最小数を求める
  • 実験
  • 式変形
D - Avoid K Palindrome
公式解説(MMNMM)
A・B・?からなる文字列が与えられる。長さKの回文が発生しないように?に文字を入れる方法は何種類あるか
  • DP
  • 旗DP?
E - Water Tank
公式解説(MMNMM)
高さHiの壁がN個与えられる。手前から水を満たしたときにi個目の区画に水が入るのはいつになるか
  • Stack
  • 区間更新・区間和の遅延セグ木
  • SegmentTreeBeats
F - Tree Degree Optimization
公式解説(nok0)
出次数の2乗と頂点の重みをかけたものの総和の最小値を求める
  • 貪欲
  • 2乗は分解して、辺を追加するときのコストを(2d+1)Aiとする。
G - Sum of Tree Distance
公式解説(nok0)
未確認
ABC358 A - Welcome to AtCoder Land
公式解説(yuto1115)
文字列比較
  • stringの比較
B - Ticket Counter
公式解説(yuto1115)
到着時間と処理時間が与えられるので、実際に購入が終わる時間を出す
  • 到着と前の処理のminを取る
C - Popcorn
公式解説(yuto1115)
M種類のうち一部を売っている売り場がN個。コンプに必要な売り場数。
  • 全探索
D - Souvenirs
公式解説(cn449)
Bを超えるAをペアにする。選択したAの最小値
  • ソート
  • マッチング
  • 二分探索
E - Alphabet Tiles
公式解説(cn449)
K文字以下の文字列の作り方。各アルファベットの使用可能回数も与えられる。
  • コンビネーション
  • パスカルの三角形
  • dp
F - Easiest Maze
公式解説(yuto1115)
指定された経路長になる一本道を作れるか判定。実際に作る
  • 達成可能か判定
  • 移動は必ず+2ずつ
G - AtCoder Tour
公式解説(cn449)