競技プログラミングで使える(使えない)マクロやテンプレートのおはなし

はじめに

最近になって競技プログラミングを始めたのですが、気づいたらテンプレートファイルがかなりの長さになっていました。
備忘録代わりに自分が普段使ってたり(使ってなかったり)するマクロやテンプレートについてまとめておこうと思います。

ソースコード

解説

種類ごとに分けて解説します。メモみたいな物なので説明が分かりにくいかも

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)

イテレータを渡す時にとても便利 使う機会がかなり多い

まとめ

見返してみるとロクに使わないような物ばっかりな気がしてきた 気が向いたら修正します