2023 年度 HDU マルチスクールコンテスト ラウンド 5 完全解答

本稿では、2023 年に開催された HDU 主催の大学生向け競技プログラミング大会(マルチスクール)第 5 回の各問に対するアルゴリズム解説と参考実装を示します。 A. タイフーン接近距離 問題概要 n 個の点によって構成される折線があり、q 回のクエリにおいて指定された座標からこの折線までの最短距離を計算する必要がある。データサイズは n, q ≤ 10^4 程度である。 解 ...

6月22日 20:42 投稿

AtCoder Beginner Contest 397 問題解説と実装アプローチ

第 1 問:温度計 (Thermometer) 体温の読み取り値に基づき、状態を示す整数を出力する単純なシミュレーション問題です。入力された小数点数がどの範囲に属するかを判断します。 解法の方針 温度値を float または double 型で受け取り、以下の条件ロジックで分岐処理を行います。 38.0 以上の場合:レベル 1 37.5 未満の場合:レベル 3 それ以外:レベル 2 実装コード # ...

6月22日 19:14 投稿

競技プログラミングにおけるアルゴリズム実装:SMU Autumn 2023 Round 4 解説

A. Access Denied:パスワードの推測と応答時間解析 この問題は、サーバーからの応答時間を利用してパスワードを推測する対話型の課題です。パスワードの最大長は20文字であり、推測した文字列の長さが正解と異なる場合、応答には5msの遅延が生じます。また、文字ごとの照合には9msの遅延が加算されるという仕組みを利用します。 まず、長さ1から20までの文字列を順次送 ...

6月21日 23:00 投稿

Codeforces Round #1058 (Div. 2) 問題解説

A - MEX Partition この問題の核心は、配列全体のMEX(Minimum Excluded Value)を求めることに帰着します。与えられた配列 $A$ をいくつかの部分集合に分割し、そのすべての部分集合のMEXが等しくなるための条件を考えます。 $A$ のMEXを $m$ とします。$m$ は $A$ に含まれない最小の非負整数であるため、$m$ より大きい要素は各部分集合のMEX計算において無視できま ...

6月21日 21:20 投稿

XOR線形基の基礎とアルゴリズム

XOR線形基(Linear Basis)は、与えられた数値列 A = {a1, a2, ..., an} に対して、その要素のXOR演算によって生成可能なすべての値を表現できる、最小サイズの集合 B を指します。線形基を用いることで、XORに関する複雑なクエリを効率的に処理できます。 主な性質 B の任意の要素を組み合わせたXOR和は0になりません。 集合 B のサイズは、最大値を V としたと ...

6月17日 18:56 投稿

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

C言語による基礎アルゴリズム実装:成績評価・桁和計算・べき乗・素数探索・ハノイの塔・組み合わせ・最大公約数

本稿では、C言語を用いた代表的なアルゴリズム課題を再構成し、各関数の設計意図と改善点を技術的に解説します。コード例は意図的に構造・変数名・制御フローを変更し、教育的かつ実用的な書き直しを行っています。 成績マッピング関数(文字列評価) 整数スコアを10点刻みで分類し、対応する等級記号を返す関数です。入力範囲に応じてA~Eの5段階評価を実施します。 #inc ...

6月14日 23:58 投稿

C++アルゴリズムの概要

C++の標準テンプレートライブラリ(STL)は、多くのアルゴリズムを提供しており、これらはコンテナ内の要素を効率的に操作するためのものです。 1. 非変更アルゴリズム これらのアルゴリズムは、操作対象となるコンテナの要素を変更しません。 1.1 findとfind_if find(first, last, value): valueと一致する最初の要素を見つけてイテレータを返します(見つからなければlast ...

6月11日 17:01 投稿

C++ におけるビットマップとブルームフィルタの構造と実装

ビットマップの基本原理 ビットマップ(BitMap)は、データの存在状態をビット単位で管理するデータ構造です。各ビットが特定の要素の有無を示すフラグとして機能するため、膨大な量のデータを扱う際にもメモリ消費を極限まで抑えることができます。主に、データに重複がない場合や、存在確認のみが必要な場景において効果的です。 ビットマップのカスタム実装 標準ライブ ...

6月10日 16:12 投稿

LeetCodeスライディングウィンドウパターン徹底解説

スライディングウィンドウ入門 「連鎖・部分文字列・配列の問題は、まず双方向ポインタを考えよ。 双方向ポインタ三兄弟、それぞれに魅力あり。 速いポインタと遅いポインタは魔法使い、連結リスト操作に敵なし。 マージソートで中点を探し、連結リストの循環を判定。 左右ポインタが最も一般的、配列の両端から中央へ。 反転配列にはこれを頼れ、二分探索は弟分。 スライ ...

6月8日 18:46 投稿