けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

数列

AtCoder ARC 171 D - Rolling Hash (黄色, 600 点)

コンテスト後に解いた。こっちの方が解きやすかった。 問題へのリンク 問題概要 制約 考えたこと 最初は の指数を気にするのかな......などと考えていたが、考えていくうちに の値など、ただの飾りであることがわかってきた。 まず、問題の条件を言い換える…

AtCoder ABC 335 G - Discrete Logarithm Problems (橙色, 600 点)

この問題を思い出した! 問題へのリンク 問題概要 素数 と、 個の 1 以上 以下の整数 が与えられる。 を満たす整数 が存在するような の組の個数を数え上げよ。 制約 考えたこと 一瞬、原始根を考えたくなったが、原始根ではなく「位数」を考えた方が計算量…

AtCoder ABC 330 E - Mex and Update (緑色, 475 点)

データ構造をいい感じに設計する地力が問われる! 問題へのリンク 問題概要 長さ の数列 が与えられる。この数列に対する以下の 個のクエリに答えよ。 各クエリでは整数 が与えられる を に置き換える 置き換えたあとの数列 の mex を出力せよ 制約 考えたこ…

AtCoder ABC 330 A - Counting Passes (灰色, 100 点)

最近、易しめのいい感じの A 問題多いね! 問題へのリンク 問題概要 個の整数 のうち、 以上であるものの個数を求めよ。 解法 配列を使って入力を受け取って、for 文を使って配列の要素を 1 個 1 個見ていけばいい。 #include <bits/stdc++.h> using namespace std; int mai</bits/stdc++.h>…

AtCoder ABC 329 D - Election Quick Report (灰色, 350 点)

「差分更新」の良い練習問題! 問題へのリンク 問題概要 以上 以下の整数からなる長さ の数列 が与えられる。 各 に対して、 の中で最も多く登場する値を答えよ。複数個ある場合はそのうちの最小の値を答えよ。 制約 考えたこと この問題のように、各 に対し…

AtCoder ABC 329 B - Next (灰色, 200 点)

昔の ABC B 問題って感じ! 問題へのリンク 問題概要 長さ の数列 が与えられる。すべての値が等しいわけではないことが保証される。 これらのうち、最大値でない中での最大値を求めよ。 解法 まず for 文を回すなどして、 個の値 の最大値を求める。たとえ…

AtCoder ABC 308 A - New Scheme (灰色, 100 点)

「単調増加かどうか判定」は典型。そのような処理の実装に慣れよう! 問題へのリンク 問題概要 長さ の数列 が与えられる。この数列が以下の条件を全て満たすかどうかを判定せよ。 広義単調増加である すべて 100 以上 675 以下である すべて 25 の倍数であ…

AtCoder Library Practice Contest K - Range Affine Range Sum

遅延評価セグメント木の練習! 問題へのリンク 問題概要 長さ の数列 が与えられる。この数列に対して、次の 回のクエリに答えよ。 クエリタイプ 1 ():数列の区間 内の各要素の値を 倍して を足せ クエリタイプ 2 ():数列の区間 内の要素の総和を 99824435…

AtCoder Library Practice Contest J - Segment Tree

セグメント木の練習問題です。 クエリタイプ 1, 2 のみなら、ただの RMQ ですね。クエリタイプ 3 は、セグメント木上の二分探索を実行する関数 max_right() が使えます。 問題へのリンク 問題概要 長さ の数列 がある。この数列に対して、以下の 2 種類のク…

AtCoder ABC 327 E - Maximize Ratin (水色, 475 点)

式がいかめしくて戸惑うけど、DP 自体は比較的単純 問題へのリンク 問題概要 個の値 が与えられる。 これらの中から順序を保っていくつか選ぶ。選び方のスコアは、 個の整数 を選んだとしたとき、 で与えられる。このスコアの最大値を求めよ。 制約 考えたこ…

AtCoder ABC 327 D - Good Tuple Problem (茶色, 400 点)

まず、これをグラフの問題として捉えるところに、一つ山がある印象だけど、みんなあっさり超えていてすごい! 問題へのリンク 問題概要 以下の正整数からなる長さ の数列 、 が与えられる。これらの数列の組が次の条件を満たすかどうかを判定せよ。 0 と 1 …

AtCoder ABC 294 A - Filter (灰色, 100 点)

これは易しめの A 問題! 問題へのリンク 問題概要 長さ の数列 が与えられる。 これらの数値の中から偶数のみを抽出せよ。 考えたこと for 文を回していって、偶数のみ出力すればよい。 #include <bits/stdc++.h> using namespace std; int main() { int N; cin >> N; vect</bits/stdc++.h>…

AtCoder ABC 324 A - Same (灰色, 100 点)

これも条件をうまく言い換えることが大切になる問題 問題へのリンク 問題概要 個の整数 が与えられる。 これらの値がすべて等しいかどうかを判定せよ。 コード すごく色んな解法がある!!!! 個人的に最も楽だと思うのは、 に対して、 ならば Yes そうでな…

AtCoder ABC 324 G - Generate Arrays (橙色, 600 点)

Wavelet Matrix の練習に 問題へのリンク 問題概要 初期状態が の順列である数列 が与えられる。 次の 2 種類のクエリに答えよ。なお、 番目 () のクエリをこなした後には、数列は 個に分割された状態となる。 クエリタイプ 1:群数列の 番目について、先頭…

AtCoder ABC 043 A - キャンディーとN人の子供イージー (灰色, 100 点)

等差数列の和の公式を使ってもいいし、素直に for 文を足してもいい。 問題へのリンク 問題概要 正の整数 が与えられる。 の値を答えよ。 解法 1 素直に for 文で足していく方法。 #include <bits/stdc++.h> using namespace std; int main() { int N; cin >> N; int res = </bits/stdc++.h>…

AtCoder ABC 321 D - Set Menu (緑色, 400 点)

「二分探索 lower_bound()」「累積和」を活用する、とてもとても典型的かつ教育的な問題ですね。 問題へのリンク 問題概要 サイズ の数列 と、サイズ の数列 が与えられる。 これらの数列から 1 個ずつ選んでできる 通りの各ペア についての、 の総和を求め…

JOIG 2023 B - 絶対階差数列 (AOJ 0758, 難易度 2)

いわゆる「愚直シミュレーション」と呼ばれる分野の問題ですね。問題文で指示されたことを、とにかく愚直に忠実に実装できるかが問われています。地味な印象を受けるかもですが、大切なスキルです! 問題へのリンク 問題概要 黒板に、はじめ 個の整数値 が書…

JOI 本選 2023 A - 碁石ならべ 2 (難易度 6)

どうなっているのかを観察して計算量を減らす系。観察力が問われる! 問題へのリンク editorials 問題概要 個の碁石を左から順に並べていく。 番目に並べる碁石の色は である ( 以上 以下の数値)。碁石を並べるときの規則は次のようになる。 番目の碁石を 番…

鉄則本 A58 - RMQ (Range Maximum Queries)

セグメント木の最初の練習問題によさそうな問題 問題へのリンク 問題概要 長さ の数列 がある。最初はすべての要素が 0 となっている。この数列に対して、以下の 2 種類のクエリに答えよ ( 個のクエリが与えられる)。 クエリ 1: が与えられるので、 の値を …

Codeforces Round 897 (Div. 2) D. Cyclic Operations

Functional Graph のサイクル列挙!!! ライブラリ整備したことがあったおかげでライブラリ使えてよかった! 問題へのリンク 問題概要 (意訳) 要素数 の数列 があって、はじめは全要素が 0 となっている。以下の操作を好きな回数だけ行って、数列を の状態…

CodeQUEEN 2023 決勝 E - Good Partition

これは学びの深い DP 問題! 問題へのリンク 問題概要 長さ の数列 がある (負値もありうる)。これらの数列をいくつかの連続する区間に分割する。 区間分割の仕方を最適化したときの、各区間における「最大値と最小値の差」の総和として、考えられる最大値を…

AtCoder ABC 318 E - Sandwiches (緑色, 450 点)

色んな解法がありそう。今回は、あまり解説書かずに備忘録程度に。 問題へのリンク 問題概要 長さ の数列 がある。各要素は 以上 以下の整数値である。 制約 メモ 各値ごとに考えていった。つまり、 として、 について求めていった。 各 について、 となる添…

競プロキャンプ2023関西 L - (sum)mer

FPS + 負の二項係数 問題へのリンク 問題概要 長さが で総和が であるような、正の整数のみからなる数列 すべてについての の総和を 998244353 で割ったあまりを求めよ ( ケース)。 制約 解法 (1):FPS 求めたいものは である。これはちゃんと計算すると、 …

AtCoder ARC 155 D - Avoid Coprime Game (赤色, 800 点)

モノグサ社内で同僚と一緒に解いた! 問題へのリンク 問題概要 要素からなる数列 が与えられる。各 に対して次の問に答えよ。 先手と後手が交互にプレイする。整数 を管理する。最初 である。 先手は初手は を選び、 と に更新し、数列からその整数は削除す…

Codeforces Round 892 (Div. 2) E. Maximum Monogonosity (R??00)

つい最近 CodeQUEEN 決勝 E 問題でも出てきた「最大値の最大化」典型テクニック!!!! 問題へのリンク 問題概要 長さ の 2 つの数列 と が与えられる。今、互いに disjoint な区間群 をとる ( は自由)。ただし、区間の長さの総和がちょうど となるようにす…

yukicoder No.2423 Merge Stones

ビットベクターで高速化するのは、いつも見落としてしまう! 問題へのリンク 問題概要 円環状に 個の魔法石があり、 番目の魔法石は、価値が 、色が である。色は 1 以上 50 以下の整数で表される。 今、これらの魔法石に対して、隣り合う魔法石の色の差が …

AtCoder ABC 222 B - Failing Grade (灰色, 200 点)

for 文の練習問題 問題へのリンク 問題概要 人のテストの得点 のうち、 点未満のものが何個あるかを答えよ。 解法 for 文を用いて、 であるような の個数を数えればよい。 コード #include <bits/stdc++.h> using namespace std; int main() { // 入力 int N, P; cin >> N ></bits/stdc++.h>…

AtCoder ABC 313 G - Redistribution of Piles (橙色, 625 点)

floor sum!!! コンテスト中に思いつけてよかった! 問題へのリンク 問題概要 皿 があって、皿 には 個の石が乗っている。また、空の袋がある。 あなたは以下の 2 種類の操作を好きな順番で 0 回以上何度でも行うことができる。 石が 1 個以上載っている皿…

AtCoder ABC 313 C - Approximate Equalization 2 (茶色, 400 点)

ちゃんと証明しないと、なかなか安心して提出できない系 問題へのリンク 問題概要 整数列 が与えられる。次の操作を繰り返し行って、 の最大値と最小値の差が 1 以下となるようにしたい。実現のための操作の最小回数を求めよ。 を選んで、 に 1 を足し、 か…

AtCoder ABC 313 A - To Be Saikyo (灰色, 100 点)

トップタイがある場合に注意! 問題へのリンク 問題概要 (0 始まりに表現改) 人の人 がいる。人 のプログラミング力は である。 人 は必要に応じてプログラミング力を鍛えることで、 人の中で単独トップになろうとしている。 そのためにプログラミング力をい…