二分探索と二重ポインタの基本テクニック

二分探索 × 復習時の重要ポイント midの計算時にint mid = left + (right - left) / 2;を使用して、int mid = (left + right) / 2;による整数オーバーフローを防ぐ必要がある 通常の検索、左境界、右境界はすべて左閉じ右閉じ区間を使用可能。閉区間のright = arr.length-1と開区間のright = arr.lengthの違い、およびwhileループでの<=と<の使い分けに注意 3種 ...

6月28日 01:20 投稿

CF251A 直線上の点の解説

問題文 Petyaは点が大好きです。彼の母親は彼に数直線OX上のn個の点を与えました。Petyaは、最も遠い2点間の距離がd以下となるような3つの異なる点を選ぶ方法がいくつあるか知りたいです。3つの点の順序は関係ありません。 入出力形式 入力 最初の行には2つの整数n (1 ≤ n ≤ 105) と d (1 ≤ d ≤ 109) が含まれます。次の行には、Petyaが持つ点のx座標を表すn個の整数x1, x ...

6月27日 00:38 投稿

木材伐採問題における最適切断高さの探索

きこりのミルコは、ある特殊な伐採機を用いて、要求される長さの木材を収集します。この伐採機は、設定された高さ H を基準に動作します。具体的には、伐採機は巨大な鋸刃を高さ H まで持ち上げ、その高さよりも高い部分を持つ全ての木から、H を超える部分を切り落とします。切り落とされた部分がミルコによって収集されます。H 以下の高さの木はそのまま残り、切り落とさ ...

6月25日 20:21 投稿

競技プログラミングコンテスト問題解説:Codeforces Round 521 (Div. 3)

A. カエルのジャンプ 問題の条件に従って直接シミュレーションを行います。データ範囲に注意し、long long型を使用します。 void solve(){ long long a, b, k; cin >> a >> b >> k; cout n; vector<int> arr(n); for(int i = 0; i < n; i++) cin >> arr[i]; int result = 0; for(int i = 0; i < n - 2; i++){ if(arr[i] = ...

6月19日 23:58 投稿

文字列の最適削除と辞書順最小化アルゴリズム

各位置 i の文字を c[i] とし、canErase[x][y] を「文字 x が直後の文字 y を削除可能か」を表すブール配列とする。maxReach[i] は、位置 i から連続して削除可能な最大範囲の終端インデックスを示す(つまり、i+1 から maxReach[i] までの文字はすべて削除可能で、maxReach[i]+1 は削除不可能)。 貪欲戦略として、ある文字が自身の後続文字を削除でき、かつ自身も他の文 ...

6月11日 23:52 投稿

数学アルゴリズム問題の解法と思考プロセス

回文数の判定 回文数を判定する問題では、まず基本的なケースを考慮し、一般的なケースを解決した後、特殊なケースを処理することで問題を解決できます。 class PalindromeChecker { public boolean isPalindrome(int number) { if (number < 0) { return false; } if (number < 10) { return true; } ...

6月6日 19:31 投稿

グラフ理論:K値の最大化問題 - 二分探索とシミュレーションによる解法

グラフ理論:K値の最大化問題 - 二分探索とシミュレーションによる解法 問題文 n個の頂点とm辺の単純無向グラフが与えられます。このグラフを完全グラフに補完する必要があります。補完のルールは、あらかじめパラメータKを選び、各ステップで「頂点uとvの間に辺が存在せず、かつ両頂点の次数の和がK以上」である辺のみを追加することです。このルールに従って辺を追加し ...

6月6日 17:45 投稿

宿舎管理システムの設計と実装(C言語によるデータ構造の応用)

概要 本稿では、データ構造とアルゴリズムに関する課題として開発した「宿舎管理照会ソフトウェア」について紹介する。学生の宿舎情報を効率的に管理・検索・操作することを目的とし、C言語で実装された単方向連結リストを基盤としたシステムである。主な機能には、学生情報の追加・削除・検索・ソート・表示が含まれる。ユーザーインターフェースはテキストベースのメニュ ...

5月30日 11:45 投稿

上海大学プログラミングコンテスト2023春季ラウンド4の問題解説

A. 二分探索の学習 基本的な二分探索アルゴリズムを実装する問題です。指定された範囲内でターゲット値を見つけるために必要なステップ数を計算します。 #include <iostream> #include <vector> #include <algorithm> using namespace std; int binary_search_steps(int left, int right, int target) { int steps = 0; while (left <= r ...

5月28日 10:30 投稿

重量値セグメント木と動的ノード作成

目次- ブルートフォース法 (1) ブルートフォース法 (2) 重量値セグメント木 演習問題 はじめに主席木を学習中に、重量値セグメント木の学習ノートを更新しておくのを思い出しました まず、以下の問題を考えてみましょう: 配列に対して以下の操作を行います: 操作 (1):配列中の第k小さい要素を問い合せます(答えは存在すると仮定)。 操作 (2):ある要素を変更しま ...

5月28日 02:10 投稿