二項係数と多項式展開による係数計算
多項式 $(ax + by)^k$ を展開したとき、項 $x^n y^m$ の係数を $10007$ で割った余りとして求めよ。ただし、$n + m = k$ が常に成り立つ。
解法の概要
二項定理より、$(ax + by)^k$ の展開における $x^n y^m$ 項の係数は以下の式で表される:
$$
\binom{k}{n} \cdot a^n \cdot b^m
$$
ここで $\binom{k}{n}$ は二項係数であり、$k \leq 1000$ であるため、動的計画法(パ ...
5月31日 20:30 投稿
C++におけるスマートポインタの活用と実装
スマートポインタの概要
スマートポインタの重要性
スマートポインタは、現代のC++アプリケーション開発において不可欠なメモリ管理メカニズムです。従来の生ポインタでは、開発者が明示的にメモリ確保と解放を管理しなければならず、メモリリークやダングリングポインタ、ダブルフリーなどの問題が発生しやすかったのです。スマートポインタを活用することで、オブジェ ...
5月31日 19:40 投稿
C++におけるメモリ管理:new/delete演算子の仕組みと実践
1. C言語の動的メモリ管理
void Test()
{
int* p1 = (int*)malloc(sizeof(int));
free(p1);
// malloc/calloc/realloc の違い
int* p2 = (int*)calloc(4, sizeof(int));
int* p3 = (int*)realloc(p2, sizeof(int) * 10);
// p2 を free する必要はあるか?
free(p3);
}
realloc は元のメモリブロックを拡張(インプレース)するか、新しい ...
5月31日 03:10 投稿
AtCoder Beginner Contest 387 参加記録と解法まとめ
A - Happy New Year 2025
2つの整数 $A$ と $B$ が与えられます。$(A + B)^2$ を出力するだけの問題です。計算結果が整数型の範囲に収まるか注意が必要ですが、今回の制約では問題ありません。
#include <iostream>
using namespace std;
void solve() {
long long val1, val2;
if (cin >> val1 >> val2) {
long long combined = val ...
5月30日 22:13 投稿
C++における二分探索木の実装と操作
二分探索木とは
二分探索木(Binary Search Tree: BST)は、以下の条件を満たす二分木構造です:
左部分木に含まれるノードの値は、常に親ノードの値より小さい
右部分木に含まれるノードの値は、常に親ノードの値より大きい
左右の部分木もまた二分探索木を満たす
基本操作
探索(Search)
探索操作は以下のように行われます:
ルートノードから比較を開始します
探索 ...
5月30日 20:39 投稿
C++でvectorコンテナを自作実装する方法
C++の標準ライブラリで提供されるstd::vectorの動作を理解するために、独自の動的配列クラスを実装します。この記事では、イテレータ、メモリ管理、要素アクセス、変更操作などの実装手順をコード例とともに解説します。
メンバ変数
std::vectorと同様に、内部では3つのポインタ(イテレータ)で管理します。std::stringとは異なり、サイズやキャパシティはこれらのポイン ...
5月30日 17:22 投稿
C++におけるマルチスレッド処理とstd::async、std::future、std::atomic、volatileの使用法
C++標準ライブラリはスレッド操作を包括的にサポートしており、特にstd::threadやstd::asyncが頻繁に利用されます。『Effective Modern C++』では、スレッドのネイティブなローカル処理が必要でない限り、タスクベースのプログラミングを推奨しており、std::asyncの使用が望ましいとされています。本記事では、std::asyncを中心にその仕組みと使用法を解説します。
std::as ...
5月30日 14:48 投稿
スライディングウィンドウの最大値を求めるアルゴリズム
スライディングウィンドウ問題において、各ウィンドウ内の最大値を効率的に求めるには、双方向キュー(deque)を活用した単調キューというデータ構造が有効である。このアプローチにより、O(n)の時間計算量で解を導出できる。
双方向キューの特性と選択理由
通常のキュー(queue)は、要素の追加が末尾から、取り出しが先頭からのみ可能である。一方、双方向キュー(deq ...
5月29日 23:52 投稿
C++におけるテンプレート、型変換制御、および関数オブジェクト
1. C++のテンプレート機構について
C++におけるテンプレートは、データ型に依存しない汎用的なコード(ジェネリックプログラミング)を実現するための仕組みです。テンプレートを使用することで、異なるデータ型に対して同じロジックを適用するコードを一度記述するだけで済み、コンパイル時に特定の型に応じたコードが生成されます。これにより、コードの再利用性が大幅 ...
5月29日 19:55 投稿
C++におけるファクトリーメソッドと抽象ファクトリーの実装戦略
オブジェクト指向設計において、生成型デザインパターンはシステムの柔軟性を高める重要な手法です。特にファクトリーメソッドパターンと抽象ファクトリーパターンは、オブジェクト生成のカプセル化を通じて依存関係を解消し、拡張性を確保するための有効なアプローチです。
ファクトリーメソッドパターンの再考
このパターンでは、基底クラスがオブジェクト生成のインタ ...
5月29日 17:49 投稿