C++で競技プログラミングを戦う上で必要な知識を書き溜めていく記事です。
Dockerを用いたC++の環境構築方法や私が問題を解いていく中で得た知見をまとめていきます。
C++で競技プログラミングに取り組む上で少しでも参考になれば幸いです。
Contents
Sponsored Link
【C++】競技プログラミングのテクニックまとめ【随時更新】
以下にまとめていきます。
Dockerを用いたC++の環境構築方法
まずはDockerを用いたC++の環境構築方法についてです。
これについては、以下の記事にまとめてあるので参考にして下さい。
C++の開発環境をDockerで構築してHello WorldするC++の開発環境をDockerで構築してHello Worldする方法をご紹介します。...
初期テンプレート
次に、毎回使えるC++の初期テンプレートをご紹介します。
こちらです。
#include <bits/stdc++.h> using namespace std; int main() { // int N, K; // cin >> N >> K; // cout << "sample" << endl; }
このように記述することで、N,Kを標準入力から受け取り、sampleという文字列を標準出力することができます。
問題を解いて得られた知見を書き溜めていく【随時更新】
次に、私が実際にC++で競技プログラミングの問題を解いていく中で得た学びをまとめていきます。
少しでも参考になるものがあれば幸いです。
repマクロを使って指定した回数処理を繰り返す
以下のようにrepを使うと、指定した回数処理を繰り返すことができます。
#include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (int)(n); i++) using namespace std; int N; int main() { cin >> N; int ans = 0; rep(i, N) { ans += i; } cout << ans << endl; }
Nの部分が繰り返す回数です。
defile宣言は忘れずに記述するようにしましょう。
参考:ループの裏技repマクロ
数字の各桁の和を求める
数字の各桁の和は、以下のように記述することで求めることができます。
#include <bits/stdc++.h> using namespace std; int main() { int N;cin >> N; int n = N; // 数字の各桁の和 int sum = 0; while (n > 0) { sum += n % 10; n /= 10; } cout << sum << endl; }
数字を10で割った際の余りが一桁目の数字になる性質を利用した手法です。
数字の最大値を求める
以下のように{}でリストとして渡してやることで複数個の数字の比較ができます。
#include <bits/stdc++.h> using namespace std; int main() { int A, B; cin >> A >> B; int ans = max({ A + B, A - B, A * B }); cout << ans << endl; }