競技プログラミング問題集の解法解説
問題一覧
A: StringGame (考察)
B: SequenceGame (貪欲法+二分探索)
C: 猫の世話 (幾何学、考察)
D: 数列H (数学)
E: キャンディーH (考察)
F: エンコーディング1.0 (動的計画法)
G: エンコーディング2.0 (深さ優先探索)
H: 迷路 (幅優先探索+二点探索)
I: レーティング (考察+優先度付きキュー)
J: 文字列変換 (総当り)
K: 新ゲーム! (計算幾何学+最短経路)
A: StringGa ...
8月7日 07:18 投稿
二分木の非再帰的走査
前順走査
前順走査では、ノードの値を「根 → 左の子 → 右の子」の順に処理します。
再帰的な実装
public void traverse(Node node) {
if (node == null) {
return;
}
System.out.println(node.value);
traverse(node.left);
traverse(node.right);
}
非再帰的な実装
非再帰では、スタックを使用してノードを管理します。根ノードを最初に処理 ...
8月4日 15:22 投稿
C言語でXOR演算子を使って、古き良きXORリストを実装する方法
XORリストの基本概念
XORリストは、各ノードが前後のノードのアドレスをXOR演算子を使って1つのポインタフィールドに格納する特別な連結リストです。これにより、通常の双方向リストで必要な2つのポインタ(前と次)の代わりに、1つのポインタフィールドで済むため、メモリ使用量を削減できます。
この手法の鍵となるのは、XOR演算子の性質です。AとBがポインタ(アドレス ...
8月4日 11:12 投稿
Pythonプログラミング基礎:制御構造、ファイル操作、データ型の変換と実践例
条件分岐とブール値の取り扱い
Pythonでは真偽値を表すためにTrueとFalse(英字の大文字始まる)を使用します。条件判断はif~elif~else構文で実現され、コードブロックの区切りはインデント(半角スペースまたはタブ)によって明示的に定義されます。
# ブール値の初期化
is_connected = True
if is_connected:
print("接続状態が有効です")
elif not is_connected: ...
8月4日 09:21 投稿
Javaプログラミングの実践的学習と課題解決
はじめに
本記事では、主に以下の重要な概念と技術について取り扱います。
クラスとオブジェクトの基本概念、コンストラクタ、アクセス修飾子、メンバ変数。
文字列入力と出力の処理方法、文字列の分割、結合、変換操作。
ループ、条件文、配列、リスト。
今回の課題は主にPTAの第7回問題セットと期末試験で構成されており、主に「成績管理システム2」と「3」、および一部 ...
8月3日 09:43 投稿
トライ木(Trie木)の基礎と応用
基本概念
トライ木(Trie木)は文字列に関連するデータ構造で、辞書木または接頭辞木とも呼ばれます。その主な思想は「空間で時間を換える」ことです。大量の文字列を統計、ソート、または保存するために使用できます。検索する文字列をsとすると、トライ木の単一クエリの複雑度はO(|s|)です。
01トライ木は、XOR関連問題を扱うデータ構造のバリエーションです。複数の数 ...
8月3日 03:10 投稿
PythonでTrie(接頭辞木)を実装する
問題 208:Trie(接頭辞木)の実装
Trie(トライ、発音は「トライ」に近い)または接頭辞木は、文字列のデータセットを効率的に保存および検索するための木構造データ構造です。このデータ構造は、オートコンプリートやスペルチェックなど、多くの応用シーンで使用されます。
以下の操作をサポートする Trie クラスを実装してください。
Trie() - 接頭辞木オブジェク ...
8月1日 06:51 投稿
eJOI競技プログラミング問題解説
eJOI(European Junior Olympiad in Informatics)の過去問から、いくつかの問題を解説します。
eJOI2017 A - Magic
問題概要
長さ\(n\)の文字列\(a\)が与えられ、使用される文字の種類数を\(|\Sigma|\)とします。部分文字列が「魔法的」であるとは、その部分文字列内に全ての種類の文字が少なくとも1回含まれ、かつ全ての種類の文字の出現回数が等しいことを意味します。 ...
8月1日 00:11 投稿
線形リストの基礎と実装:配列とリンクリストの比較
2.1 線形リストの定義と基本操作
2.1.1 線形リストの定義
線形リストとは、同一データ型を持つn個のデータ要素からなる有限の順序付き集合である。nを表の長さと呼び、n=0のとき空の線形リストとなる。線形リストをLとすると、一般的にL=(a1, a2, ..., an)と表される。
ここでa1は唯一の「最初」のデータ要素(先頭要素)、anは「最後」のデータ要素(末尾要素)である。 ...
7月31日 02:50 投稿
アルゴリズム学習ノート:C/C++基礎と基本的なアルゴリズム
1 C/C++の基礎知識
1.1 無限大の定義(INF)
整数型の無限大を表す定数の定義方法:
const int INF = 0x3f3f3f3f;
1.2 scanf関数の使い方
一般的なデータ型のscanfフォーマット指定子:
データ型フォーマット指定子
int%d
long long%lld
float%f
double%lf
char%c
文字列(char配列)%s
1.3 実用的な出力フォーマット
1.3.1 %md
%mdは、int型変数がm桁に満たない ...
7月30日 08:28 投稿