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

Pythonで最も長い回文部分文字列を検索する方法

問題定義 最も長い回文部分文字列とは、対称的な構造を持つ文字列のことです。例えば、文字列 s = "ababd" の場合、"aba" や "bab" が回文として該当します。 解決方針 最初の考えでは、括弧のマッチングのようなアプローチを使用し、スタックで要素を「ペア消去」することで回文を判定しようと考えました。しかし実際には「対称軸」の位置が固定されておらず、前方の消 ...

6月6日 21:19 投稿

AtCoder ABC389のアルゴリズム実装と解説

問題C: キューによる区間管理のシミュレーション この問題では、列の先頭への追加や末尾からの削除、特定位置の要素へのアクセスを効率的に行う必要があります。全ての要素を個別に保持するとメモリや計算量が膨大になるため、連続する要素を「区間」として管理する手法をとります。 各区間について「先頭からの相対距離(開始位置)」と「区間の長さ」を構造体で定義し ...

6月6日 19:20 投稿

C++ STLアルゴリズムの使い方と実装例

1. 非変更シーケンス操作 これらのアルゴリズムはコンテナの要素を変更しない。 1.1 find系関数 find(first, last, value):値がvalueと等しい最初の要素を検索。 find_if(first, last, pred):述語predを満たす最初の要素を検索。 find_end(first, last, s_first, s_last):部分列の最後の出現位置を検索。 #include <vector> #include <algorithm> #inc ...

6月4日 19:07 投稿

AtCoder Beginner Contest 366 の問題解説と実装

はじめに 今回のコンテストでは問題Eに大部分の時間を費やすことになり、残り15分でようやく正解にたどり着くという危ない場面でした。緑色レベルの問題にも苦戦するようでは、まだまだ実力不足を感じます。 A - Election 2 高橋君と青木君のどちらかが過半数の票を獲得したかどうかを判定するシンプルな問題です。 #include <iostream> using namespace std; ...

6月4日 17:22 投稿