JOI 2013 国内予選最終ラウンド解説
問題1:交互配列の最長連結区間
与えられた 0-1 列において、隣接要素が交互に変化する(例:01010)最大長の連続部分列を求める。ただし、1つの「交互セグメント」を反転することで、より長い連続交互列を得られる可能性がある。
まず、入力列を交互性に基づいて分割し、各セグメントの左右端点を記録。その後、隣接する3つのセグメント(左・中・右)を結合した長さを評 ...
7月14日 01:06 投稿
Codeforces 909 問題A〜Fの解説
Codeforces 909 問題解説
問題URL
A B C D E F
難易度:赤 黄 緑 青 緑 紫
解説
A
問題概要:2つの文字列が与えられる。非空の接頭辞を連結した文字列の中で辞書順最小のものを求める。
アルゴリズムラベル:貪欲
解法分析:
辞書順比較は左から順に文字を比較し、どちらかが終了するか異なる文字が見つかるまで続ける。このため、貪欲法が有効。前後の文字列の接頭辞を比 ...
6月26日 19:39 投稿
競技プログラミング問題解説:貪欲法から動的計画法まで
問題 1:目標値への到達ステップ数
この問題は貪欲法の適用例です。目標値 50 に対して、現在の値が不足している場合と超過している場合で戦略が異なります。不足時には 2 で割った余り、超過時には 3 で割った余りを考慮し、必要な操作回数を計算します。
具体的には、差額が偶数であれば単純に除算し、奇数であれば調整値を加えてから計算します。超過時についても同様に ...
6月22日 23:05 投稿
障害物のある格子路の問題解法:動的最適化による経路カウント
m 行 n 列の二次元グリッドが与えられた場合、左上隅の座標から右下隅の座標まで移動するシナリオを考慮します。移動ルールとして、一歩ごとに「下」または「右」へ進むことが許容されています。
この環境には障害物が混在しており、特定のセルは通ることが不可能です。データ構造上、障害物は整数 1、空席は 0 によって定義されます。これらの条件を満たしながら、スタ ...
6月17日 20:42 投稿
SMU Winter 2025 個人コンテスト第3回 解説
A. Vasya and Book
現在のページ x から目的のページ y まで、1回の操作で d ページ進むか戻る(ただし範囲外には行けない)ときの最小操作回数を求める。
以下の3通りを検討し、可能なものの最小値を取る:
|x - y| が d で割り切れる場合:直接移動可能。回数は |x - y| / d。
先頭ページ(1)経由: (y - 1) % d == 0 のとき、x → 1 → y の合計回数は ceil(x / d) + (y ...
6月16日 16:57 投稿
動的計画法による配列最適化問題の解法パターン
階段登拝における最小コストの算出
配列の各要素が階段のコストを表しており、索引 i の階段を登る際に cost[i] の体力を消費します。支払い済みの場合、1 つまたは 2 つの階段を 건너갈 수 있습니다. 最上部に到達するための最小総コストを求めます。初期位置として索引 0 または 1 を選択可能です。
状態遷移としては、i 番目の階段に到達する最小コストは、i-1 番目から ...
6月12日 16:13 投稿
競技プログラミングにおける行列の実装と応用例
行列の定義と基本性質
行列(Matrix)は、数値を長方形の配列状に配置した構造体です。一般に \(m \times n\) の次元を持つ行列 \(A\) は、以下のように表されます。
$$ A = \begin{bmatrix}
a_{1,1} & a_{1,2} & \cdots & a_{1,n} \\
a_{2,1} & a_{2,2} & \cdots & a_{2,n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m,1} & ...
6月7日 19:46 投稿
Pythonで最も長い回文部分文字列を検索する方法
問題定義
最も長い回文部分文字列とは、対称的な構造を持つ文字列のことです。例えば、文字列 s = "ababd" の場合、"aba" や "bab" が回文として該当します。
解決方針
最初の考えでは、括弧のマッチングのようなアプローチを使用し、スタックで要素を「ペア消去」することで回文を判定しようと考えました。しかし実際には「対称軸」の位置が固定されておらず、前方の消 ...
6月6日 21:19 投稿