はじめに
最近になって競技プログラミングを始めたのですが、気づいたらテンプレートファイルがかなりの長さになっていました。
備忘録代わりに自分が普段使ってたり(使ってなかったり)するマクロやテンプレートについてまとめておこうと思います。
ソースコード
解説
種類ごとに分けて解説します。メモみたいな物なので説明が分かりにくいかも
include.名前空間,定数
#include <bits/stdc++.h>
一括インクルード コンパイラによっては対応してなかったりするので気をつけましょう(戒め)
typedef long long ll
とても便利
INF,LINF,MOD
少なくともINFは定義した方がいいと思う
using namespace std;
便利 maxとかminとかを変数名にしてバグらせないように気をつけよう
型名の簡略化
P pair<int,int>,V vector<int>,M map<int,int>,S set<int>
この辺りはよく使うのでやって損はなさそう listとかqueueになると微妙?
PQ priority_queue<int>,PQG priority_queue<int,V,greater<int>>
昇順と降順の両方とも使う機会がありそう
for文省略
REP,FOR,REPR
タイプ数が減らせてとても良い
FOREACH(x,a)
タイポしづらくなって非常によろしい 参照で渡してるので値が変えられる
標準入力
VECCIN(v)
非常に分かりやすくて非常に便利 タイプ数もかなり減るのでおすすめ
CIN(...),LCIN(...),SCIN(...)
宣言と入力を同時にできる 可変長引数テンプレートとか使ってるのでCIN(n,a,b)とかもできて楽しい
IN()
cinからのreturn インラインでできて便利
VCEACH(n,..),VCREP(n,...)
この辺になると作った意味が分からない a1,a2,...,an,b1,b2,...,bnならVCEACH(n,a,b),a1,b1,a2,...,b3ならVEREP(n,a,b) 正直いらない
標準出力
COUT(n)
タイプ数減らすためのやつ 便利
SCOUT(n)
まぁcout<<n<<" ";ってやるだけなんだけどそれすら打ちたくないんですよね
dump(x)
デバッグ用 目で見て分かりやすい
YES(bool),Yes(bool)
案外よく使う 大文字小文字を間違えてWAを吐く事がよくある
POSSIBLE(bool),Possible(bool)
使う機会は少ないけど綴りでWAを吐きたくないので念のため
SANKOU(bool,str1,str2)
三項演算子使うよりほんの少し楽 Aの早解きぐらいでしか役に立たない
ENDL
ここまでくるとcoutを省略したいだけだよね いらない
その他
pb push_back,mp make_pair
よく使う あるととても楽
ALL(a)
イテレータを渡す時にとても便利 使う機会がかなり多い
まとめ
見返してみるとロクに使わないような物ばっかりな気がしてきた 気が向いたら修正します