2023-01-01から1年間の記事一覧
Project Selection がピッタリハマる問題! 問題へのリンク 問題概要 個の家 がある。家 に入るためには のコストがかかるが、その代わり の利得が得られる。また、各家 に対して、次の 個の制約条件が付随している。 家 に入ることなくして、家 に入ること…
競プロにおいて、「Project Selection」や「2 変数劣モジュラ関数の和の最小化」などと呼ばれるテクニックがあります。いずれも、最小カット問題に帰着して解くことができます。これらは次のような関係にあります。なお、俗に「燃やす埋める」と呼ばれている…
「差分更新」の良い練習問題! 問題へのリンク 問題概要 以上 以下の整数からなる長さ の数列 が与えられる。 各 に対して、 の中で最も多く登場する値を答えよ。複数個ある場合はそのうちの最小の値を答えよ。 制約 考えたこと この問題のように、各 に対し…
ランレングス圧縮の典型題! なお、ランレングス圧縮は鹿本でみっちり解説している。 問題へのリンク 問題概要 英小文字のみからなる長さ の文字列 が与えられる。 の連続する部分文字列のうち、1 種類の文字のみからなる文字列の種類数を答えよ。 制約 考え…
昔の ABC B 問題って感じ! 問題へのリンク 問題概要 長さ の数列 が与えられる。すべての値が等しいわけではないことが保証される。 これらのうち、最大値でない中での最大値を求めよ。 解法 まず for 文を回すなどして、 個の値 の最大値を求める。たとえ…
与えられた文字列を空白区切りで出力する問題。なお、末尾に空白が入っていても AC になる! 問題へのリンク 問題概要 文字列 が与えられるので、各文字を空白区切りで出力せよ。 解法 次のコードのように、文字列 の各文字 について、 文字 を出力する 空白…
最小公倍数を求める。その際にはオーバーフローに注意! 問題へのリンク 問題概要 正の整数 が与えられる。 の最小公倍数を求めよ。ただし、 を超える場合は "Large" と出力せよ。 制約 解法:最大公約数から最小公倍数を求める まず、整数 の最大公約数を …
コンテスト中は迷走しまくってしまった 問題へのリンク 問題概要 マスがあって、最初はすべて白色である。以下の 種類の操作を好きな順序で好きな回数行うことができる。 種類目の操作: マス からマス までを黒色で塗る マス目の状態を変化させるような操作…
タイトル "Lazy Segment Tree" の名の通り、遅延評価セグメント木の練習問題! 問題へのリンク 問題概要 長さ の 0 と 1 のみからなる数列 が与えられる。この数列に対して、次の 回のクエリに答えよ。 クエリタイプ 1 ():数列の区間 内の各要素の値につい…
この処理は今後めっちゃ頻出なので、スラスラ書けるようになっておきたい! 問題へのリンク 問題概要 正の整数 が与えられる。 に最も近い 5 の倍数を求めよ。 解法 たとえば としてみよう。5 の倍数は 0, 5, 10, 15, 20, 25, 30, 35, 40, ... と続いていく…
これは最近の ABC A 問題では易しめ!! 問題へのリンク 問題概要 文字列 が与えられる。この文字列の各文字を 2 回ずつ繰り返した文字列を出力せよ。 たとえば、"beginner" は "bbeeggiinnnneerr" となる。 コード for 文を用いて、文字列 の各文字 を順に…
for 文の練習。色んな書き方がありそう。 問題へのリンク 問題概要 高橋君は 週間歩いた距離を記録した。 日目には、それぞれ 歩歩いた。 各週について、高橋君が 1 週間で歩いた歩数の合計を出力してください。 解法 前提として、配列を 0 始まりで考えるこ…
「単調増加かどうか判定」は典型。そのような処理の実装に慣れよう! 問題へのリンク 問題概要 長さ の数列 が与えられる。この数列が以下の条件を全て満たすかどうかを判定せよ。 広義単調増加である すべて 100 以上 675 以下である すべて 25 の倍数であ…
これ実は ACL Practice Contest の K 問題と同じらしい atcoder.jp 問題へのリンク 問題概要 長さ の数列 が与えられる。この数列に対して、次の 回のクエリに答えよ。 クエリタイプ 1 ():数列の区間 内の各要素の値を 倍して を足せ クエリタイプ 2 ():数…
遅延評価セグメント木の練習! 問題へのリンク 問題概要 長さ の数列 が与えられる。この数列に対して、次の 回のクエリに答えよ。 クエリタイプ 1 ():数列の区間 内の各要素の値を 倍して を足せ クエリタイプ 2 ():数列の区間 内の要素の総和を 99824435…
セグメント木の練習問題です。 クエリタイプ 1, 2 のみなら、ただの RMQ ですね。クエリタイプ 3 は、セグメント木上の二分探索を実行する関数 max_right() が使えます。 問題へのリンク 問題概要 長さ の数列 がある。この数列に対して、以下の 2 種類のク…
二部マッチングの練習問題 問題へのリンク editorial へのリンク 問題概要 二次元平面上に 体の飛行機がある。飛行機 は座標 にいる。各飛行機に対して適切に 8 種類の向き付けをしたい (上・下・左・右・左上・左下・右上・右下)。 具体的には、 秒後におい…
これは A 問題らしい A 問題 問題へのリンク 問題概要 個の整数 のうち、 以下のものの総和を求めよ。 コード for 文を回していき、 以下であるかを判定して、 以下であるものを足していけば OK。 #include <bits/stdc++.h> using namespace std; int main() { int N, X; ci</bits/stdc++.h>…
少し複雑めの全探索。 問題へのリンク 問題概要 1 年が ヶ月からなる暦がある。 月はそれぞれ 日ある。 この暦において、ゾロ目に日付は何日あるかを答えよ。 制約 考えたこと について順に調べていけば良い。 自体がゾロ目でないとダメ がゾロ目なら、その…
すごくよく似た過去問がある。これ → ABC 122 C - GeT AC 問題へのリンク 問題概要 英小文字からなる長さ の文字列 が与えられる。この文字列に対する次の 個のクエリに答えよ。 各クエリでは、文字列の区間 が与えられる。この区間を取り出した部分文字列に…
stack を使ってカッコ列判定をする問題の亜種! 問題へのリンク 問題概要 3 種類の文字 'A'、'B'、'C' からなる文字列 が与えられる。この文字列に対して、「左から見ていって "ABC" があったら消す」を何度も繰り返していって残る文字列を答えよ。 制約 考…
next_combination を使った! 普通に STL の next_permutation() でもできる。 問題へのリンク 問題概要 頂点数 、辺数 の連結な重み付き無向グラフが与えられる。 このグラフの全域木をすべて考えたときの、全域木に含まれる辺の重みの総和を で割ったあま…
重み付き Union-Find そのもの。もしくは、列挙可能 Union-Find 使ってマージテクでも。 問題へのリンク 問題概要 個の整数値 に関する制約条件が 個与えられる。 番目の制約条件では 3 つの整数の組 が与えられ、 という形をしている。ここで、次のクエリに…
lower_bound() 系の教育的問題 問題へのリンク 問題概要 一直線上に 個の点がある。点 の座標は である。 この直線上で幅 の区間を配置する。左端の座標を とするとき、 を満たす の個数をスコアとする。最大スコアを求めよ。 制約 考えたこと まず重要な考…
遅延セグ木 (区間加算 + 区間 max 取得) を用いた平面走査! 問題へのリンク 問題概要 二次元平面上に 個の点がある。点 の座標は である。 この 2 次元平面上でサイズが の長方形領域 (右辺と上辺は含まない) を自由に動かしていくとき、この長方形領域に覆…
2 変数劣モジュラ関数の和の最小化を最小カットにするやつ! 問題へのリンク 問題概要 種類のスキルがある。それぞれ初期状態のスキルレベルは 1 であるが、最大で 5 まで上げられる。スキル のスキルレベルを 1 上げるのに必要なコストは 円である。 種類の…
式がいかめしくて戸惑うけど、DP 自体は比較的単純 問題へのリンク 問題概要 個の値 が与えられる。 これらの中から順序を保っていくつか選ぶ。選び方のスコアは、 個の整数 を選んだとしたとき、 で与えられる。このスコアの最大値を求めよ。 制約 考えたこ…
まず、これをグラフの問題として捉えるところに、一つ山がある印象だけど、みんなあっさり超えていてすごい! 問題へのリンク 問題概要 以下の正整数からなる長さ の数列 、 が与えられる。これらの数列の組が次の条件を満たすかどうかを判定せよ。 0 と 1 …
次数制約つきのグラフを構築するためには、次数の大きいところから Greedy というよく知られた問題! 問題へのリンク 問題概要 正の整数からなる長さ の数列 が与えられる。 以下の条件を満たすような、頂点数 のグラフが存在するかどうかを判定せよ。 単純…
9 × 9 に並んだ数字が「数独」の解になっているかを判定する問題 問題へのリンク 問題概要 下のような 9 × 9 グリッドが与えられる。各マスの値は 1 から 9 までの整数値である。 このグリッドが数独の要件を満たすかを判定せよ。 1 2 3 4 5 6 7 8 9 4 5 6 7…