LoginSignup
17
23

More than 1 year has passed since last update.

競プロ用テンプレート(C++)

Last updated at Posted at 2020-02-01

前書き

競技プログラミングでのタイプ数を減らすためにテンプレートを作りました。できるだけ直感的に書けるようにしたつもりです。

以下は自分の使いやすいな表記をしているので、使いやすいように適宜変えてください。

追記・修正・削除の履歴

追記(2020/02/29)

max_elementをいちいち書くのが面倒なのでMAX関数を作成しました。
vectorなどの最大値はこの関数を使えば求めることができます。

追記(2020/03/27)

最大の配列の長さを設定するためにMAXRを導入しました。
素数列挙の際に使用しています。

追記(2020/04/06)

集合演算のための関数などが含まれているiteratorをincludeすることにしました。
二つのvectorの共通部部分を取ってくる事などができます。

追記(2020/04/26)

FORループ内にllへの型変換を追加しました。
マクロの部分にいくつかコメントアウトを追加してわかりやすくしました。
また、記事の全体的な記述を簡略化しました。

修正(2020/04/29)

全角スペースが混じっていたので修正しました。

修正(2020/05/15)

使いやすいようにコメントアウトを簡略化しました。

追記(2020/05/20)

入力(cin)の高速化用のコードをmain関数内に追加しました。
$10^5$以上程度の回数の入力がある場合はかなり高速化されます。

削除および修正(2020/06/20)

作成してから一回も使ってないMAXとMINを削除しました。
追記・修正・削除の履歴を折り畳みにしてまとめました。
それに伴い構成を一部変更しました。

修正および追記(2020/06/25)

テンプレート内の冗長な表現を修正しました。
実験的にUmapとUsetを追記しました。

修正および追記(2020/06/30)

テンプレート内の冗長な表現を修正しました。
コンパイラ最適化用のコードを追加しました。

修正および追記(2020/07/21)

テンプレート内の冗長な表現を修正しました。
実行時間計測用にchronoをインクルードしました。

修正および追記(2020/07/31)

#include<bits/stdc++.h>でまとめてライブラリをインクルードするようにしました。
範囲for文のマクロFORAを追記しました。
コンパイル時のデバッグ用のオプションをメモとしました。

追記(2020/10/17)

小数の桁数の出力指定を追加しました。

修正および追記(2020/11/04)

ceil関数とfloor関数を追加しました。
冗長なコメントアウトを省略しました。

追記(2020/11/05)

Codeforcesで128bit整数で提出する際の注意点をメモしました。

修正および追記(2020/11/22)

コメントアウトの冗長な表現を削除及び改変しました。
INFのオーバフローを避けるためにINF32,INF64を用意しました。

修正及び追記(2020/11/28)

空白区切りでの出力のマクロを追加しました。
MACRマクロが使いにくいので削除しました。
合わせて他の記事の内容も変わっています。

修正及び削除(2020/12/15)

諸事情あってデバッグオプションを削除しました。

修正及び削除(2020/12/18)

理解して使えてないので、最適化用のpragmaを除きました。
テンプレートの説明を大幅に消去しました。
また、PBを使うとpop_back,push_backの区別がつきにくいこと及びmake_pairでなく{}を使っているので、いずれも消去しました。

自分のテンプレート

template.cc
//Codeforcesで128bit整数を使いたいとき
//→__int128_tを使う&GNU C++17 (64)で提出する

//インクルードなど
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

//イテレーション
#define REP(i,n) for(ll i=0;i<ll(n);i++)
#define REPD(i,n) for(ll i=n-1;i>=0;i--)
#define FOR(i,a,b) for(ll i=a;i<=ll(b);i++)
#define FORD(i,a,b) for(ll i=a;i>=ll(b);i--)
#define FORA(i,I) for(const auto& i:I)
//x:コンテナ
#define ALL(x) x.begin(),x.end() 
#define SIZE(x) ll(x.size()) 
//定数
#define INF32 2147483647 //2.147483647×10^{9}:32bit整数のinf
#define INF64 9223372036854775807 //9.223372036854775807×10^{18}:64bit整数のinf
#define MOD 1000000007 //問題による
//略記
#define F first
#define S second
//出力(空白区切りで昇順に)
#define coutALL(x) for(auto i=x.begin();i!=--x.end();i++)cout<<*i<<" ";cout<<*--x.end()<<endl;

//aをbで割る時の繰上げ,繰り下げ
ll myceil(ll a,ll b){return (a+(b-1))/b;}
ll myfloor(ll a,ll b){return a/b;}

signed main(){
    //小数の桁数の出力指定
    //cout<<fixed<<setprecision(10);
    //入力の高速化用のコード
    //ios::sync_with_stdio(false);
    //cin.tie(nullptr);
}
17
23
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
23