C++における例外処理の基本とベストプラクティス

例外処理の概要 例外処理は、C++プログラミングにおける重要なエラーハンドリングメカニズムです。戻り値をチェックする従来の方法に比べ、例外はエラーを自動的に伝播させ、メインロジックからエラーハンドリングコードを分離し、複数の関数にまたがる制御フローを処理できます。これにより、各関数で戻り値を繰り返しチェックし、エラーステータスを渡す必要がなくなりま ...

7月18日 01:06 投稿

HUAWEI Programming Contest 2024(AtCoder Beginner Contest 342)解説

A - Yay! 長さが3以上の文字列中に2種類の文字が含まれており、そのうち1つはちょうど1回だけ出現する。その位置を1-indexedで出力せよ。 最初の文字が一意であれば、残りにその文字は存在しない。そうでなければ、最初の文字とは異なる最初の文字を探せばよい。 #include <iostream> #include <string> using namespace std; int main() { string s; ...

7月18日 00:29 投稿

プログラミングコンテスト初級:典型問題の実装パターン

問題1:文字列の反復生成 文字 'L'、'o' を N 回繰り返した文字列、そして "ng" を連結して出力する問題です。ループを使用せず、文字列コンストラクタを活用することで簡潔に記述できます。 #include <iostream> #include <string> int main() { int repeat; std::cin >> repeat; std::string result = "L" + std::string(repeat, 'o') + ...

7月17日 16:04 投稿

ABC356コンテスト問題解説

問題A 問題の指示に従ってシミュレーションを行います。 #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { int size, left, right; cin >> size >> left >> right; vector<int> sequence(size); for (int i = 0; i < size; ++i) { sequence[i] = i + 1; } ...

7月17日 03:05 投稿

C++の定数最適化テクニック ─ 高速化のための実践的手法

C++プログラムにおいて、関数呼叫やループ、回路上的の最適化だけでなく、定数レベルでコードを高速化する手法があります。以下では、実際に効果が期待できる定数最適化の手法を解説します。 共用体(union)の活用 基本的な定義 共用体は複数のメンバーが同一のメモリ領域を共有する特殊なクラスです。定義は以下のようになります(関数内 maupun 関数外どちらでも定義可 ...

7月16日 23:36 投稿

洛谷100題チャレンジ (5/100)

洛谷100題チャレンジ (5/100) P1002 [NOIP2002 普及組] 馬避け - 洛谷 | コンピュータ科学教育新生態 long long型を使用しないと問題発生注意!!! 馬の制御点を全てマークし、残りは通常通り转移すればよい \(dp[i][j] += dp[i - 1][j] + dp[i][j - 1]\) \(i=0||j=0\)の場合、左または上からのみ转移可能 using i64 = long long; using namespace std; typedef pair Pair ...

7月16日 23:20 投稿

バックトラックアルゴリズムの理論と組み合わせ問題の実装

バックトラック法の基本概念 バックトラック法は探索手法の一種で、再帰処理と密接に関連しています。再帰処理を行う際には必ずバックトラックが発生するため、バックトラックは再帰の副産物と言えます。 バックトラック法の効率性 バックトラック法は本質的に全探索アルゴリズムであり、効率的とは言えません。ただし、枝刈り(pruning)を適用することで多少の効率改善 ...

7月16日 16:50 投稿

プログラミング問題の解法メモ

P2671 [NOIP2015 初級者部門] 和の計算 この問題では、xとzの色が同じで偶奇が一致する条件を満たす要素の組み合わせで和を計算する必要がある。単純なO(n²)の解法では時間制限に間に合わないため、色と偶奇で分類する方法を採用。 色ごとに偶数・奇数グループを分けて集計し、各グループ内で次の式を適用: ans += 要素番号 × (該当色グループ内の要素数 - 1) × 値 + 要素 ...

7月15日 23:21 投稿

関数テンプレートの概念とその意義

変数を交換する方法 1. マクロコードブロックを定義する 利点: コードの再利用性が高く、あらゆる型に適応できる 欠点: コンパイラはマクロの位置を知ることができず、型チェックができない 2. 関数を定義する 利点: 実際の関数呼び出しであり、コンパイラが型をチェックする 欠点: 型ごとに関数を再定義する必要があり、コードの再利用性が低い <strong>#inclu ...

7月15日 21:14 投稿

競技プログラミング問題の解法とコード例

A 問題 ある日を選んで問題を解くとき、その日の問題数が次の日の問題数よりも多い場合に選択します。ただし、n+1 日目は 0 問とする。 コードを見る <code> #include <iostream> #include <vector> using namespace std; int n; vector<int> a, b; void solve() { cin >> n; a.resize(n + 1); b.resize(n + 1); for (i ...

7月15日 16:53 投稿