洛谷 P1381 単語暗記 問題の解説

問題の説明 霊夢は n 個の単語を覚えたいのですが、一つの文章の一部分を通じてこれらの単語を覚えようとしています。文章は m 個の単語から構成されており、彼女は文章の中から連続した一部分を見つけ出し、その中に含まれる覚えたい単語の数を最大にしたいと考えています(重複する単語は一つとしてカウントします)。そして、覚える単語の数を最大にした上で、選んだ文 ...

7月28日 00:31 投稿

テンプレートメソッドパターン - アルゴリズムの骨格を定義する設計パターン

概要 テンプレートメソッドパターンは、操作におけるアルゴリズムの骨格を定義し、特定のステップをサブクラスに延期させるデザインパターンです。これにより、サブクラスはアルゴリズムの構造を変更せずに、特定のステップを再定義できます。 実用性 アルゴリズムの不変部分を一度だけ実装し、可変的な振る舞いをサブクラスに実装させることができます。 サブクラス間 ...

7月26日 19:31 投稿

Javaアルゴリズム:動的計画法による0/1ナップサック問題の解法

ナップサック問題は、有限の容量を持つバッグにどの物品を詰めるかを最適化する古典的なアルゴリズム問題です。特に0/1ナップサック問題は、各物品をバッグに入れるか入れないかの二択しかない場合を指します。 問題設定: 3つの物品があります: 物品A:価値1000、重量1kg 物品B:価値2000、重量4kg 物品C:価値1500、重量3kg バッグの容量は4kgで、この中に詰められる ...

7月26日 16:45 投稿

センチネルノードによる効率的な探索アルゴリズムの実装

組み込みシステムの開発において、リアルタイム性が求められる処理では、実行時間の安定性が重要です。特に、特定の条件を満たす要素を線形探索する場合、単純な実装では処理時間が不安定になることがあります。 このような問題に対処するため、センチネル(番兵)と呼ばれる手法があります。これは探索対象の末尾に検索キーと同じ値を持つ要素を配置することで、ループ内 ...

7月25日 21:01 投稿

C言語初学者向けの実践プログラムと核心概念の解説

基本入出力と制御構造 初期学習段階では、標準入出力と基本的な制御フローをマスターすることが重要です。 #include <stdio.h> int main() { // 飛行機のASCIIアート printf(" ** \n"); printf(" ** \n"); printf("************\n"); printf("************\n"); printf(" * * \n"); printf(" * * \n"); ...

7月25日 17:40 投稿

連結リスト操作の基礎

要素の削除 連結リストの操作において、先頭ノードと他のノードの削除処理は異なります。他のノードは前のノードを介して削除されますが、先頭ノードには前のノードが存在しません。 先頭ノードを削除するには、単にヘッドポインタを次のノードに移動します。しかし、この特別なケースを避けるためにダミーヘッドノードを使用すると、全てのノードで一貫した削除方法が適用 ...

7月24日 21:23 投稿

2つのキューを使用したスタックの実装

2つのキューを使用したスタックの実装 問題分析 この問題は、配列やリンクリストでスタックを実装するのではなく、キューを使用してスタックを実装することを求めています。キューとスタックの関係は逆で、スタックは後入れ先出し(LIFO)の特性を持つのに対し、キューは先入れ先出し(FIFO)の特性を持っています。したがって、この問題はキューの性質をスタックの性質 ...

7月24日 20:46 投稿

睿抗省赛模拟题解

2024年問題 RC-u1 熱天気判定 1からnまでのループを行い、気温が35度以上かどうかをチェックし、指定されたルールに従ってカウントします。 void resolve() { cin >> n >> k; int result = 0, count = 0; for (int i = 1; i > temp; if (temp >= 35) { if (k == 4) count++; else result++; } k++; i ...

7月24日 18:58 投稿

C言語によるヒープと二分木の実装

ヒープデータ構造の実装 ヘッダファイル定義 #pragma once #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <stdbool.h> typedef int HeapValue; typedef struct MinHeap { HeapValue* elements; int count; int capacity; } MinHeap; void HeapInitialize(MinHeap* heap); void HeapDestroy(MinHeap* heap) ...

7月23日 19:21 投稿

循環リンクリストの検出と入環ノード特定

循環リンクリストの検出 問題概要 リンクリストの先頭ノードheadが与えられたとき、循環構造の有無を判定する。循環構造とは、ノードのnextポインタを追跡することで再訪問可能なノードが存在する状態を指す。循環が存在しない場合はfalseを返す。 入力例 例1: head = [3,2,0,-4], pos=1 → true 例2: head = [1,2], pos=0 → true 例3: head = [1], pos=-1 → false 解法: ...

7月22日 22:34 投稿