SMU Summer 2023 Contest Round 4のアルゴリズム解説
A. Telephone Number
この問題では、与えられた文字列から標準的な11桁の電話番号を作成できるかを判定します。電話番号の最初の数字は'8'でなければならないため、最初の'8'が現れる位置が重要です。文字列の長さを n とすると、最初の'8'のインデックスが n - 11 以下であれば、その後ろに残りの10桁を配置するための十分な文字数が存在します。
#include <iostream&g ...
6月24日 00:42 投稿
テンプレートプログラミングの基礎
1. ジェネリックプログラミングとは
異なる型の変数を交換する関数を実装する際、通常は次のように型ごとに関数を用意します:
void swap(int& a, int& b) {
int tmp = a;
a = b;
b = tmp;
}
void swap(double& a, double& b) {
double tmp = a;
a = b;
b = tmp;
}
しかし、このような関数オーバーロードには以下のような問題 ...
6月23日 21:09 投稿
USACO問題「Cow Exhibition」の動的計画法による解法
問題概要
n 個の要素があり、それぞれに整数値の属性 a と b が割り当てられています。いくつかの要素を選択して、選ばれた要素の a 属性の合計 と b 属性の合計 の総和を最大化したいと考えます。ただし、以下の条件を満たす必要があります:
a 属性の合計 ≥ 0
b 属性の合計 ≥ 0
この条件下で、(aの合計) + (bの合計) を最大にするプログラムを作成します。
アプロ ...
6月23日 20:37 投稿
Qtカスタムウィジェット:QPainterによる回転待機アニメーションの実装
GUIアプリケーション開発において、処理中の待機時間をユーザーに視覚的に伝えるためのインジケータは重要な要素です。GIFアニメーションを利用する手法もありますが、QtのQPainterを活用して純粋なコードで描画することで、解像度に依存しない鮮明な表示が可能になり、動的な色やサイズの変更も容易になります。ここでは、QWidgetを継承したカスタムクラスを作成し、QTime ...
6月22日 22:56 投稿
C++ によるファイル操作:ストリームクラスを活用した入出力処理
C++ では、ストリームクラスを介してファイルの作成、読み取り、書き込みを実現できます。この手法により、データをハードディスクやSSDなどの永続ストレージに保存し、プログラム終了後でもアクセスが可能です。
ファイル処理の基本手順は以下の3ステップです:
ファイルのオープン
データの入出力処理
ファイルのクローズ
ファイルオープンの方法
ファイル操作の前に ...
6月22日 22:43 投稿
ABC379 問題解説:C・D・E・F
C問題:石の山の配置
石を後方にしか移動できないという制約下で、目標の配置が可能かどうかを判定し、最小移動回数を求める問題です。
条件を満たす配置は一意に定まるため、以下の3点をチェックします。
石の総数がnと一致しない場合は不可能。
最初の山の位置が1でなければ不可能。
途中の位置で、それまでの石の合計数が必要数に満たない場合は不可能。
解 ...
6月22日 21:01 投稿
C++ における std::shared_ptr を活用したメモリ寿命の自動制御
C++ 開発において、動的確保されたメモリの解放忘れは重大なバグとなり得ます。従来の生ポインタでは明示的な delete 操作が必要ですが、std::shared_ptr を利用することで参照カウントベースの自動管理が可能になります。
ここでは、試験紙のライフサイクル(作成、回答、採点、破棄)を例に、生ポインタとスマートポインタの実装差異を比較します。
生ポインタによる実装 ...
6月22日 20:02 投稿
C++におけるテンプレートとジェネリックプログラミング
テンプレートの基本概念
テンプレートはクラスや関数の設計図であり、コンパイル時に特定の型に基づいて具体的なコードが生成される。このプロセスをインスタンス化と呼ぶ。
関数テンプレートの定義
// 型パラメータTを持つ関数テンプレート
template<typename T>
int compare_values(const T& lhs, const T& rhs) {
if (lhs < rhs) return -1;
...
6月22日 18:10 投稿
競技プログラミングにおけるアルゴリズム実装:SMU Autumn 2023 Round 4 解説
A. Access Denied:パスワードの推測と応答時間解析
この問題は、サーバーからの応答時間を利用してパスワードを推測する対話型の課題です。パスワードの最大長は20文字であり、推測した文字列の長さが正解と異なる場合、応答には5msの遅延が生じます。また、文字ごとの照合には9msの遅延が加算されるという仕組みを利用します。
まず、長さ1から20までの文字列を順次送 ...
6月21日 23:00 投稿
Qt水平レイアウトの実装と応用例
Qtの水平レイアウト管理器であるQHBoxLayoutは、GUIアプリケーションの要素を効率的に整列させるための基盤技術です。本記事では、実践的なコード例を通じてレイアウトの構築方法と動的調整技術を解説します。
#include <QApplication>
#include <QWidget>
#include <QHBoxLayout>
#include <QPushButton>
int main(int argc, char *argv[]) {
...
6月21日 22:23 投稿