七夕祭プログラミングコンテスト問題

A. 神話キャラクター 解決アプローチ:各要素についてソート後の隣接要素を確認します。二分探索により位置を特定し、左右の値が条件を満たすか判定します。 #include <bits/stdc++.h> using namespace std; using ll = long long; #define YES(x) (x ? "Yes" : "No") const int MOD = 1e9 + 7; int main_val[100005], backup_val[100005]; vo ...

8月10日 05:07 投稿

競技プログラミングにおける主要アルゴリズム実装テクニック集

高速入出力と座標圧縮 大量のデータ処理を行う際、標準的な入出力関数はボトルネックになることがあります。以下では、カスタム関数による高速化と、std ライブラリを使用した最適化の両方を示します。 #include <bits/stdc++.h> using namespace std; // カスタム関数による高速入力 inline int fastRead() { int val = 0; char ch = getchar(); bool ...

7月27日 18:41 投稿

JOI 2013 国内予選最終ラウンド解説

問題1:交互配列の最長連結区間 与えられた 0-1 列において、隣接要素が交互に変化する(例:01010)最大長の連続部分列を求める。ただし、1つの「交互セグメント」を反転することで、より長い連続交互列を得られる可能性がある。 まず、入力列を交互性に基づいて分割し、各セグメントの左右端点を記録。その後、隣接する3つのセグメント(左・中・右)を結合した長さを評 ...

7月14日 01:06 投稿

グラフ理論における極大および最大クリークの探索アルゴリズム

グラフ理論において、クリーク(clique)とは、頂点集合のうち、任意の2頂点間に辺が存在する部分グラフを指します。言い換えると、その集合内のすべての頂点が互いに隣接している完全なサブグラフです。 基本概念の整理 クリーク:頂点集合 \(C \subseteq V\) で、\(\forall u,v \in C,\ (u,v) \in E\) を満たすもの。 極大クリーク(maximal clique):自身を真部 ...

6月27日 16:33 投稿

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 投稿

2025牛客暑期多校訓練キャンプ第1回 解説

G. Symmetry Intervals 文字列 $S$ と $q$ 個のクエリが与えられる。各クエリでは文字列 $T$、整数 $a$、および区間 $[l, r]$(ただし実装上は $T$ 全体を対象)が与えられ、$S_{a+x-1} = T_x$ がすべての $x \in [l, r]$ で成り立つような連続部分区間の個数を求める。 アプローチとしては、$T$ の各位置 $j$ に対して対応する $S$ のインデックス $ps = j + a - 1$ を計 ...

5月16日 19:59 投稿