二分探索と自動機を用いた計算機構築

アプローチ 共通接尾辞の再帰的な構築。(実質は有限状態オートマトン) 直接力技を使う?二分木を作れば良いが、ノードが多すぎて無理。 しかし、多くの部分木が繰り返し利用されるため、共有すれば良い。詳細はコードで確認。 実装 verify_length 関数 void verify_length(int start, int end, int left, int right) { int mid = (start + end) / 2; if (start ...

6月12日 18:47 投稿

河川の岩場問題:二分探索による最適解

問題リンク https://www.luogu.org/problemnew/show/P2678 問題背景 年一度の「岩場飛び」大会が開催されます! 問題説明 この大会は一直線の川で行われ、川の中には大きな岩が点在しています。主催者はすでに2つの岩をスタート地点とゴール地点として選定しました。スタートとゴールの間にはN個の岩(スタートとゴールを含まない)があります。競技中、参加者はスター ...

5月19日 12:57 投稿

配列内のピーク要素を対数時間で特定する二分探索アルゴリズムの実装

問題の定義と制約条件 隣接する要素よりも厳密に大きい値を「ピーク」と定義する。配列の両端(インデックス -1 および n)は負の無限大と見なせるため、配列内には必ず少なくとも1つのピークが存在することが数学的に保証されている。複数のピークが混在する可能性があるが、要件としていずれか1つのインデックスを返せば十分である。重要な制約として、線形探索ではなく ...

5月15日 04:44 投稿

2024年钉耙コーディング中国大学生アルゴリズム設計スーパーリーグ(1)

本稿では、2024年钉耙コーディング中国大学生アルゴリズム設計スーパーリーグ(1)から選出された数問の問題とその解法について説明する。 循環位移(Circular Shift) HDU - 7433 アプローチ 文字列ハッシュを用いて、文字列Aを2回連結したAAを作成する。この文字列のハッシュ値を計算し、mapまたはsetに記録する。|A| ≤ |B| であるので、B中での長さ|A|のすべての部分文 ...

5月10日 23:24 投稿