CF996

A link 2つの動物が常に中央に向かってジャンプする場合、中央の間隔が奇数であればもう一方の動物が勝利します(必ず2つの動物が隣り合う状況でアリスがジャンプするから)。偶数の場合、アリスが勝利します(必ず2つの動物が隣り合う状況で相手の動物がジャンプするから)。このように、動物たちは常に中央に向かってジャンプする傾向があります。なぜなら、端に向かって ...

8月9日 10:36 投稿

競技プログラミング問題集の解法解説

問題一覧 A: StringGame (考察) B: SequenceGame (貪欲法+二分探索) C: 猫の世話 (幾何学、考察) D: 数列H (数学) E: キャンディーH (考察) F: エンコーディング1.0 (動的計画法) G: エンコーディング2.0 (深さ優先探索) H: 迷路 (幅優先探索+二点探索) I: レーティング (考察+優先度付きキュー) J: 文字列変換 (総当り) K: 新ゲーム! (計算幾何学+最短経路) A: StringGa ...

8月7日 07:18 投稿

動的プログラミング基礎問題集 - 5つの典型問題と解法

動的プログラミング基礎問題集 ======= 問題1: スキー場の最長滑走ルート 難易度: 入門~中級 解法: メモ化探索 スキー場の地図が与えられ、各地点の標高がわかっています。標高が高い地点から低い地点へのみ滑ることができるとき、最長の滑走ルートの長さを求めてください。 解法として、すべての地点を起点としてDFS(深さ優先探索)を行い、メモ化テクニックを用いて ...

8月5日 17:53 投稿

Codeforces Round 1051 (Div. 2) A~D2問題の解説

A. 全ての長さの減算 思考問題。 長さが \(k(k \in [1,n])\) の区間を選び1を引く操作を繰り返す場合、まず\(a_i = n\) の位置を特定します。次に、\(n\) が存在する区間を維持し、\(n-k+1\) がその両側に存在するか確認し、存在すれば区間を拡張します。存在しない場合は操作は不可能です。 コードを表示``` #include <bits/stdc++.h> using namespace std; using i ...

8月1日 18:57 投稿

eJOI競技プログラミング問題解説

eJOI(European Junior Olympiad in Informatics)の過去問から、いくつかの問題を解説します。 eJOI2017 A - Magic 問題概要 長さ\(n\)の文字列\(a\)が与えられ、使用される文字の種類数を\(|\Sigma|\)とします。部分文字列が「魔法的」であるとは、その部分文字列内に全ての種類の文字が少なくとも1回含まれ、かつ全ての種類の文字の出現回数が等しいことを意味します。 ...

8月1日 00:11 投稿

アルゴリズム競技問題集:動的計画法とデータ構造の応用

問題A:連続要素の除去 この問題では、与えられたシーケンスから連続する重複要素を除去する必要があります。 解法:連続する同じ要素を1つにまとめることで、シーケンスの長さを最小化します。 #include <iostream> #include <vector> using namespace std; typedef long long ll; void process() { int elements; cin >> elements; ...

7月29日 16:55 投稿

洛谷 P1381 単語暗記 問題の解説

問題の説明 霊夢は n 個の単語を覚えたいのですが、一つの文章の一部分を通じてこれらの単語を覚えようとしています。文章は m 個の単語から構成されており、彼女は文章の中から連続した一部分を見つけ出し、その中に含まれる覚えたい単語の数を最大にしたいと考えています(重複する単語は一つとしてカウントします)。そして、覚える単語の数を最大にした上で、選んだ文 ...

7月28日 00:31 投稿

睿抗省赛模拟题解

2024年問題 RC-u1 熱天気判定 1からnまでのループを行い、気温が35度以上かどうかをチェックし、指定されたルールに従ってカウントします。 void resolve() { cin >> n >> k; int result = 0, count = 0; for (int i = 1; i > temp; if (temp >= 35) { if (k == 4) count++; else result++; } k++; i ...

7月24日 18:58 投稿

SMU Summer 2024 Contest Round 5

SMU Summer 2024 Contest Round 5 ロボット高橋君 思考プロセス 重み (W_i) でソートし、前後の 1 と 0 の個数を計算します。答えはおおよそ (\max(ans,pre_i+suf_{i+1})) の形式になります。 ソート後、(W_i = W_{i+1}) の場合、i と i+1 の間で分割できないため特別な処理が必要です。 コード #include <iostream> #include <vector> #include <algorithm ...

7月20日 17:48 投稿

牛客周赛 Round 69 問題解説

Cの構築問題 解法 AとBの絶対差と最大値の和を取ることで、第三項を構築できます。 コード #include <bits/stdc++.h> using namespace std; using i64 = long long; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int a, b; cin >> a >> b; int d = abs(a - b); cout << max(a, b) + d << &q ...

7月20日 03:34 投稿