01ナップサック問題とその解法

ナップサック問題の概要 基本的な解決策 方法一:二次元配列を使用した01ナップサック問題 dp配列の定義 再帰式の決定 dp配列の初期化 ループ処理 import java.util.*; public class ItemManager { public static void main(String[] args) { Scanner reader = new Scanner(System.in); int itemCount = reader.nextInt(); int capacit ...

7月8日 22:25 投稿

LCT(リンクカットツリー)の基礎と応用

基本操作 LCT(リンクカットツリー)は、Splay木を使用して森を管理します。実際のエッジの追加や削除が可能です。親への参照のみを行い、子への参照はしません。 notroot: ノードがSplay木のルートである場合は0を、それ以外は1を返します。ノードがルートであるときには特別な扱いが必要なためです。 splay: 現在のノードを現在のSplay木のルートに回転させます。 Acce ...

7月8日 22:19 投稿

ソートアルゴリズムの種類と実装

1. ソートの概念と応用 ソートとは、一連のレコードを特定のキーに基づいて昇順または降順に並べ替える操作です。ソートアルゴリズムにはいくつかの重要な特性があります。 安定性:ソート前のシーケンスに同じキーを持つ複数のレコードが存在する場合、ソート後もこれらのレコードの相対的な順序が維持される場合、そのアルゴリズムは「安定」です。例えば、元のシーケン ...

7月7日 16:15 投稿

Go言語における配列の定義と操作手法

Go言語における配列(Array)は、同一データ型の要素を連続したメモリ領域に格納する複合型です。宣言時点で要素数(長さ)が固定され、実行中に長さを拡張したり型を変更したりすることはできません。個々のデータは要素(Element)と呼ばれ、ゼロベースのインデックスでアクセスします。 宣言と初期化のパターン 標準的な宣言構文は var 変数名 [要素数]型 です。用途に ...

7月6日 00:21 投稿

C言語によるLeetCode 1047と239の実装解説:スタック処理と単調キュー最適化

問題 1047: 隣接する重複文字の完全除去 問題定義 英小文字のみで構成される文字列が引数として渡されます。この文字列に対して、「隣接する同一文字をペアで取り除く」という演算を繰り返し適用します。すべての演算が行き詰まった時点で残っている文字列を返却してください。解答は一意に決まります。 入力例: "abbaca" → 出力: "ca" 制約条件: 文字列長は [1, 20000] ...

7月5日 22:28 投稿

スタックとキューを用いたデータ構造の実装と文字列処理

スタックによるキューの実装 2つのスタックを使用してキューの操作を実現します。入力用スタックと出力用スタックを用意し、要素の追加と取り出しを効率的に行います。 class QueueWithStacks { private: std::stack<int> inputStack; std::stack<int> outputStack; public: void enqueue(int value) { inputStack.push(value); ...

7月4日 22:11 投稿

競技プログラミングにおける代表的アルゴリズムテンプレート集

高精度計算 トライ木を用いたA+B #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> using namespace std; struct TrieNode { int children[26]; int value; } nodes[1000]; char buffer[100]; int nodeCount = 0, totalNodes = 0, resultSum = 0; bool negativeFlag; void insertNumber() { int cur ...

7月3日 20:44 投稿

C言語における基本的な配列操作とアルゴリズムの実装

本記事では、C言語における配列の基本的なメモリ構造、各種の配列操作、そしていくつかのデータ処理アルゴリズムについて、具体的なコード例を交えながら解説します。一次元配列から多次元配列まで、またデータの入出力、変換、ソートといった基礎的ながらも重要なテクニックを習得することを目的とします。 配列のメモリ配置の確認 C言語において、配列の要素はメモリ上 ...

7月2日 23:10 投稿

オンラインジャッジ向けGo言語構文ガイド

Javaとの主な構文の違い: 1) ++iは存在せず、i++のみ使用可能。whileループはなく、「for 条件」で代替。未使用の変数は定義不可。 整数型のmax、min、abs関数は標準で提供されていない。 2) 配列のサイズが定数でない場合、makeキーワードを使用してsliceを定義する必要がある。 クラスはなく、funcのみ存在。クラスに相当するものはstructキーワードで定義する。 ...

7月2日 18:47 投稿

C++でのファイルI/Oとデータソートの実験

タスク1:コンテスト参加者データの処理 このタスクでは、コンテスト参加者の情報を含むファイルを読み込み、特定のルールでソートし、結果を表示および保存するプログラムを作成します。 1. ソースコード (1) participant.hpp #pragma once #include <iomanip> #include <iosfwd> #include <string> struct Participant { long student_id; ...

7月2日 17:16 投稿