CF996
A
link
2つの動物が常に中央に向かってジャンプする場合、中央の間隔が奇数であればもう一方の動物が勝利します(必ず2つの動物が隣り合う状況でアリスがジャンプするから)。偶数の場合、アリスが勝利します(必ず2つの動物が隣り合う状況で相手の動物がジャンプするから)。このように、動物たちは常に中央に向かってジャンプする傾向があります。なぜなら、端に向かって ...
8月9日 10:36 投稿
C++17新機能:クラステンプレートの引数自動推論
テンプレート引数の自動推論
C++17以前、クラステンプレートのコンストラクタは関数テンプレートのようにテンプレート引数を自動で推論できませんでした。例えば、以下のようなコードは書けませんでした。
std::pair a{1, "a"s}; // C++17以降
代わりに、以下のように明示的に型を指定する必要がありました。
std::pair<int, string> a{1, "a"s ...
7月25日 23:04 投稿
整数の最大公約数と最小公倍数の効率的計算手法
整数の最大公約数(GCD)と最小公倍数(LCM)は数論の基礎概念であり、暗号アルゴリズムや最適化処理で頻繁に利用される。GCDは共通の約数の最大値、LCMは共通の倍数の最小値を指す。これらの値は a × b = GCD(a,b) × LCM(a,b) の関係で結ばれ、GCDを先に求めることでLCMを効率的に導出できる。
標準ライブラリを活用する方法(C++17以降)
C++17では<numeric>ヘッ ...
7月8日 20:53 投稿
C++ std::variantの内部実装と型処理の詳細
C++17で導入されたstd::variantは、複数の型を安全に扱うためのユニオン型です。本記事では、その内部実装の詳細と動作メカニズムを解説します。特に、型特性を活用したメタプログラミング、メモリ管理の仕組み、および値の操作方法について焦点を当てます。std::negationは型特性の否定値を取得するメタ関数です。以下はその動作を示す例です。#include <type_traits&g ...
6月11日 19:57 投稿
Codeforces Round 1002 (Div. 2)
A - 二つの配列と要素の組み合わせ
問題文
2つの長さnの配列a,bが与えられる。この配列の各要素は少なくとも2回以上出現する。配列aとbを並べ替えて、c_i = a_i + b_iとなる長さnの配列cを作る。このcに3種類以上の異なる要素が存在するか判定せよ。
解法
n ≥ 3のため、aとbのそれぞれに含まれる異なる要素の数を確認する。aが1種類でbが2未満、または逆の場合にのみ「No ...
6月6日 22:31 投稿
C++17 高速非同期ロギングフレームワーク「limlog」の設計と実装
limlog は、マルチスレッド環境でも 1 マイクロ秒台のレイテンシを維持しながら、確実にログをファイルへ書き出す軽量ロギングライブラリです。本稿では内部構造、性能チューニング、および使用方法を詳述します。
設計目標
確実性:すべてのログが欠損なく出力され、スレッド間でログが混在しない。
可読性:1 行 1 ログ、awk 等での解析を容易にする。
利便性:printf ...
5月25日 00:36 投稿