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

問題分類

背景

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

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

項目

競プロ典型 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~

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

ABC350~399

ABC368 A - Cut
山札をカットして上に積む
  • 範囲に注意してfor
  • mod
B - Decrease 2 max elements
降順にソート。手前2つを減算。0より大きい数字が1つになったら終了
  • 降順sort
C - Triple Attack
1 1 3 とダメージを与える人がN体のモンスターを倒すのにかかる時間
  • 周期でまとめて操作
  • 余りを愚直
D - Minimum Steiner Tree
指定頂点をすべて含む最小の木を求める
  • DFS
  • 木DP
E - Train Delay
電車が遅れる。乗り換え可能だった電車が乗り換え可能になるように他の電車を遅らせる。
  • イベント全部でソート
F - Dividing Game
約数のどれかに遷移。全部1にしたら勝利。必勝判定を行う。
  • 約数列挙
  • Grundy数
G - Add and Multiply Queries
A・B二つの数列があり、Aは加算・B乗算として操作。
L ~ R のiに対してAiかBiを作用させたときの最大値を出す。
  • BIT
  • 制約から状態を想定
ABC367 A - Shout Everyday
時間が3つ与えられるので、条件判定
  • 大小関係に注意して分岐
B - Cut .0
小数点以下の0を省略して出力
  • 文字列で処理
  • そのまま出力
C - Enumerate Sequences
条件を満たす数列を列挙
  • 全探索
D - Pedometer
円環で移動距離がMの倍数になるような点の組み合わせを数え上げ
  • mod で分類
E - Permute K times
参照を示す数列が与えられるのでK回後の状態を出力
  • ダブリング
  • level ancestor(ユーザー解説)
F - Rearrange Query
数列A・BのL~Rに現れる数字の数が等しいか判断
  • ハッシュ(乱数)
  • Schwartz-Zippel lemma
G - Sum of (XOR^K or 0)
数列Aの部分列をBとする。Bの要素数がMの倍数の時、総XORを取ってK乗したものの和を求める。
  • 未着手
ABC366 A - Election 2
2人で選挙。結果が確定しているか判定
  • 過半数
B - Vertical Writing
横書きで与えられた文字列を縦書きにする
  • グリッドの回転
C - Balls and Bag Query
袋に数字が書かれたボールを入れたり出したり。入っているボールの種類数
  • map
  • 0の変化に注目
D - Cuboid Sum Query
3次元配列の直方体の一部の和を出す
  • 累積和
E - Manhattan Multifocal Ellipse
今ある点からの距離の和がD以下の点の種類数
  • XYの独立操作
  • 尺取り法
  • 二分探索
F - Maximum Composition
合成関数の最大値を求める
  • 未着手
G - XOR Neighbors
隣接頂点とのxorが0になるグラフをつくる
  • 未着手