beet's soil

競プロのことなど

チーム戦における実装方針の確認事項

そろそろICPCなので

to つぶあんくん ()内が僕の流派です 直感的でなければ相談して

テンプレ
  • using namespace std;をするか(する)
  • #define int long longをするか(しない using Int = long long;)
  • chmin/chmaxの戻り値(voidにしてるけどbool返してもいいかも)
  • cin.tie(0)(ICPCインタラクティブは多分でないので入れる)
入出力
  • scanf / cin どちらを使うか(cin)
  • 大文字小文字(全部小文字(シフト押すのは実質二文字変数みたいなところがあるので))
  • 行列のNMをHWにするか(これはやるべきだと思う、NMが他で使えるのもでかい)
  • Kをループ変数のために他の文字に置き換えるか(これは場合によるけど三重ループが予想されるならしておきたい)
  • 0-indexedに直すか(直す)
  • マルチテストケース(while(cin>>n,n))
ループ変数
  • repマクロを使うか(使わない)
  • 二次元ループのときの(y, x)と(i, j)の対応(この順番)
  • ijkの次のループ変数(s,t,r,aかx,y,z)
  • bitDPのときのmaskの変数名(int s=1<<n;for(int b=0;b<s;b++);)
DFS
  • 現在、親、次のノードの変数名(v,p,u)
  • グローバルに移すかラムダ再帰をするか(fixpoint便利、要C++14なのでどうだろ)
命名規則
  • 変数名の長さ(入力とループ以外はなるべく二文字以上)
  • scalarとvectorの区別(vectorは末尾をsにしている)
  • pair, tupleのエイリアス(P, T)
  • 訪れたかどうかの変数(used)
  • DP用の変数(一つならdp,そうでなければdp+suffix)
  • queue用の変数(que)
  • priority_queue用の変数(pq)
  • const値のキャピタライズ(する 例:INF, MAX)
その他
  • while(!que.empty())かwhile(que.size())か(while(!que.empty()))
  • push_back / emplace_back(emplace_back)
  • スペースをどれくらいいれるか(横に長くなるの嫌なのであんまり入れない)
  • 改行をどれくらい入れるか(処理の区切りごとに入れる)
  • コメントをどれくらい入れるか(場合分けゲーは入れる、それ以外は状況に応じて)
  • スコープ(なるべく小さくするようにする)
  • for / range-based-for(indexがいらない処理はranged-based-forを使う)
  • 番兵(入れられるなら入れる)
  • 距離の初期化 -1 / INF (INF)