リブの競プロテンプレート(随時更新)説明あり
コメント付きです。そのうちコメントじゃなくて見やすい解説を作ろうかな。
#include <bits/stdc++.h> using namespace std; //開発で使うべからず /* REPmacro */ //一個下は#define rep(i,n) for(int i=0;i<n;i++)の改良版 #define REP(i,n) for(int i=0,i##_len=(n);i<i##_len;++i) #define REPR(i,n) for(int i=((int)(n)-1);i>=0;--i) #define FOR(i,m,n) for(int i=(int)(m);i<(int)(n);++i) /* 上の説明 REP(i,10){...} //i=0~i=9までのループ FOR(i,3,10){...} //i=3~i=9までのループ REPR(i,10){...} //i=9~i=0までのループ */ /*alias*/ /*ALLはコンテナaが2回別々に評価される。 たとえばsort(ALL(field[y++]))のようなことをするとバグになるらしい。なので、気を付けて使うつもり。*/ #define ALL(x) (x).begin(),(x).end() //size()のunsignedをintへ #define SZ(x) ((int)(x).size()) #define F first #define S second #define PB push_back #define EB emplace_back #define MP make_pair //#define cauto const auto //#define caa const auto& const auto ampersand //y0は標準ライブラリ関数らしい。ので、事故防止 #define y0 y3487465 #define y1 y8687969 #define j0 j1347829 #define j1 j234892 #define next asdnext #define prev asdprev #define itn int /*using*/ //using lnt = long long; l(小文字のエル) //using unsi = unsigned; アンジーで覚えてる using ll = long long; //(小文字のエル) using ull = unsigned long long; using unsi = unsigned; using vi = vector<int>; using vvi = vector<vi>; using vvvi = vector<vvi>; using pii = pair<int, int>; //doubleは1e+15~1e-15ぐらい.floatは1e+6~1e-6ぐらいの精度 using db = double; using plex = complex<D>; using vs = vector<string>; /*した二つはエラーになるので使うならdefine*/ //using cauto = const auto; //using caa = const auto&; /*template*/ //標準のmaxは比べるだけだけどこれは代入(assign)してくれる template<class T>inline bool amax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; } template<class T>inline bool amin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; } /* func */ /*struct*/ struct aaa{ aaa(){ cin.tie(0); ios::sync_with_stdio(0); cout<<fixed<<setprecision(20); }; }aaaaaaa; //上の簡易版struct Fast {Fast(){std::cin.tie(0);ios::sync_with_stdio(false);}} fast; /* const */ //const int INF = 1001001001; //const ll LINF = 1001001001001001001ll; //const int MOD = 1e9 + 7; //10^9 //const db EPS = 1e-9; //上のやつらをconst autoにするのか問題 //加えてconstexprにするのか問題 const int dx[] = { 1, 1, 0, -1, -1, -1, 0, 1 }, dy[] = { 0, 1, 1, 1, 0, -1, -1, -1 }; //Counterclockwise from the 6o'clock direction //Take the x-axis downward and the y-axis right x軸を下、y軸を右 //#define int ll //#define int long long //これらはコメントアウトを消すことでsignedの力が解放する signed main() { /* 構造体aaaでmainの冒頭で書く処理を書いてmainをすっきりさせる。 cin.tie(0); ios::sync_with_stdio(false); (cin,cout)か(printf,scanf)の組のどちらかに使用を限定 */ return 0; } /* memo ・打ち間違いでもセーフというやつ。 #define itn int ・sign main()を見かけたけど使い道がよく分からん。 と思ってたけど long long を int にdefineする宗派がmain()を使うとエラーになるかららしい。 */