配列データ構造と基礎的なアルゴリズム手法の解説
配列の検索および演算テクニック
配列は連続したメモリ領域を使用する基本的なコレクションであり、インデックスによる高速アクセスが可能です。ここでは、配列を扱う際の代表的なアルゴリズムパターンとその実装について解説します。
1. 二分探索アルゴリズムの境界条件
ソートされた配列から特定の値を検索する際に、二分探索法が用いられます。実装上の注意点として、 ...
8月12日 23:48 投稿
Wdoi R2 プログラミングコンテスト問題解法
本記事では、プログラミングコンテスト「Wdoi R2」の問題に対する解法を解説します。各問題の戦略と実装の詳細について見ていきましょう。
問題 A: 幻の如く咲く花
解法
配列に対する操作は「要素の反転」と「整数値の加算」の2種類です。配列を反転させる操作は、最大でも1回行えば十分です。なぜなら、2回反転させると元に戻るためです。したがって、反転操作を行う場合 ...
8月7日 20:25 投稿
競技プログラミングにおける主要アルゴリズム実装テクニック集
高速入出力と座標圧縮
大量のデータ処理を行う際、標準的な入出力関数はボトルネックになることがあります。以下では、カスタム関数による高速化と、std ライブラリを使用した最適化の両方を示します。
#include <bits/stdc++.h>
using namespace std;
// カスタム関数による高速入力
inline int fastRead() {
int val = 0;
char ch = getchar();
bool ...
7月27日 18:41 投稿
C言語による基本的な数値計算と特殊数の探索
1. BMI(体格指数)の計算
BMIは体重(kg)を身長(m)の2乗で割った値で、健康状態の指標として広く使われます。
入力: 体重(kg)と身長(cm)をスペース区切りで1行に入力
出力: BMI値を小数点以下2桁まで表示
#include <stdio.h>
int main() {
int weight, height_cm;
scanf("%d %d", &weight, &height_cm);
double height_m = height_cm / ...
6月28日 00:30 投稿
アルゴリズム実践トレーニングカリキュラム
配列操作編
二分探索と要素削除
二分探索:境界条件の2つの実装方法に注意。rightの定義、if条件と境界更新ロジックが重要。
左閉右閉左閉右開
rightの定義len(arr) - 1len(arr)
ループ条件while left <= right:while left < right:
境界更新right = mid - 1right = mid
class Solution:
def binary_search(self, arr: List[int], target: int) -> int:
...
6月26日 18:36 投稿
C言語プログラミング:反復構造と数学的アルゴリズムの実装例
指定された精度での交互級数の和
特定の精度(eps)に達するまで、数列 1 - 1/4 + 1/7 - 1/10 + ... の部分和を計算します。各項の絶対値が指定された精度以下になった時点で計算を終了します。
#include <stdio.h>
#include <math.h>
int main() {
double precision, term, total = 0.0;
int denominator = 1, sign = 1;
if (scanf("%lf", & ...
6月21日 01:19 投稿
Dijkstraアルゴリズムを用いた最短経路探索の実装
グラフ理論における最短経路問題は、ダイクストラ法(Dijkstra's Algorithm)を用いることで、負の重みを持たないグラフにおいて効率的に解くことができます。以下に、隣接リスト形式でグラフを表現し、指定された始点から終点までの最短経路を算出する実装例を示します。
実装例
#include <iostream>
#include <vector>
#include <algorithm>
#include ...
6月18日 22:26 投稿
平方探测法の実装と注意点:ハッシュテーブル衝突解決の深層
平方探测法の実装と注意点:ハッシュテーブル衝突解決の深層
ハッシュテーブルにおける衝突処理手法として、平方探査法はその特異な動作特性から多くの場面で採用されています。この手法は単なる線形探索とは異なり、特定の数列パターンを用いたジャンプ型検索を行うことで、データ構造の効率的な運用を実現します。しかし、実装時にはいくつかの落とし穴に注意が必要です ...
6月18日 19:35 投稿
第14回 藍橋杯 C/C++ Bグループ 省大会 競技課題の解説と実装
1. 日付統計 (Date Statistics)
8桁の数値が並んだ100個のデータから、2023年に存在する有効な日付(YYYYMMDD形式)がいくつ作れるかをカウントする問題です。部分列として抽出する必要があるため、全探索や動的計画法でアプローチします。このコードは計算済みの結果を出力する例です。
#include <iostream>
int main() {
// 探索アルゴリズムによって算出され ...
6月9日 22:20 投稿
二分木の深さ優先探索と幅優先探索、および関連アルゴリズムのSwift実装
// 二分木ノードの定義
public class BinaryNode {
public var value: Int
public var leftChild: BinaryNode?
public var rightChild: BinaryNode?
public init(value: Int) {
self.value = value
}
}
// 深さ優先探索(前順)
func preorder(node: BinaryNode?) -> [Int] {
guard let currentNode = node else { return [] }
...
6月8日 21:08 投稿