見出し画像

自分が使っているテンプレ(6/5更新)

テンプレ好きなのにテンプレについて書いていなかったので今現在のテンプレを載せておきます。ちょくちょく変更しているので、更新履歴とかもここに書いていく予定です。(→自分用のメモ)
記事作成(5/22)

普段のテンプレ

// @SyNtAx_error_1
// CC0
/* #region  templates */
// clang-format off
#include<bits/stdc++.h>
//#include<atcoder/all>
#define rep(i,n) REP(i,0,n)
#define REP(i,a,b) for(ll i=a; i<ll(b);i++)
#define REPD(i,a,b) for(ll i=ll(b)-1;i>=ll(a);i--)
#define ALL(x) x.begin(),x.end()
using namespace std;
//using namespace atcoder;
using ll=long long;
using pll=pair<ll,ll>;
using vll=vector<ll>;
using vpll=vector<pll>;
using Graph=vector<vll>;
template<typename T>using p_queue=priority_queue<T>;
template<typename T>using rp_queue=priority_queue<T,vector<T>,greater<T>>;
constexpr int INF32=2147483647;
constexpr ll INF64=9223372036854775807LL;
struct Init{Init(){ios::sync_with_stdio(0);std::cin.tie(0);cout<<fixed<<setprecision(15);}}init;
ll inline ceils(ll a,ll b){return (a+b-1)/b;}
void inline yes(bool end=1){cout<<"Yes"<<"\n";if(end)exit(0);}
void inline no(bool end=1){cout<<"No"<<"\n";exit(0);if(end)exit(0);}
void inline yesno(bool b,bool end=1){if(b)yes(end);else no(end);}
template<typename T>bool inline chmin(T &a,T b){return(a>b?a=b,1:0);}
template<typename T>bool inline chmax(T &a,T b){return(a<b?a=b,1:0);}
template<typename T>auto inline prt(T t,string end="\n"){cout<<t<<end;return [](auto t,string end="\n"){return prt(t,end);};}
template<typename T> void inline coutALL(T begin,T end){while(begin!=end){cout<<*begin<<(++begin==end?"\n":" ");}}
template<class T>void inline coutALL(T &t){coutALL(t.begin(),t.end());}
template<typename T>T inline powint(T x,T n){T ans=1;while(n>0){if(n&1)ans*=x;x*=x;n>>=1;}return ans;}
template<typename T>T inline gcd(T a,T b){if(a%b==0)return b;else return gcd(b,a%b);}
template<typename T>T inline lcm(T a,T b){return a/gcd(a,b)*b;}
template<class T>ll inline siz(T &t){return ll(t.size());}
template<class T>bool inline exist(T &t){return !empty(t);}
ll inline stoll(string N,ll base){ll r=0;for(const auto&c:N)r=r*base+min<ll>(c-'0',base-1);return r;}
string inline lltos(ll N,ll base=10){string r;while(N>0)r+='0'+N%base,N/=base;reverse(ALL(r));return r;}
string inline baseNtoM(const string i,const ll N,const ll M){if(N==M)return i;return lltos(stoll(i,N),M);}
// clang-format on
/* #endregion */

int main() {
  ll N;
  cin >> N;
}

【変更履歴】
5/29
prt()関数を変更(記事)
6/5
nCr,nPrをメモ化し、スニペット化
N進数(文字列)→M進数(文字列)とそれにかかわるライブラリの追加

スニペット

Modint

過去記事をご覧ください。
便利です

UnionFind

過去記事をご覧ください。
便利です。

数学関連

nCr,nPrがスニペットになりました。

template <typename T = ll>
vector<vector<T>> inline comb(ll n) {
  vector v(n + 1, vector<T>(n + 1, 0));
  rep(i, n + 1) {
    v[i][0] = 1;
    v[i][i] = 1;
  }
  REP(i, 1, n + 1) {
    for (ll j = 1; j * 2 <= i + 1; j++) {
      v[i][j] = v[i][i - j] = v[i - 1][j - 1] + v[i - 1][j];
    }
  }
  return v;
}
template <typename T = ll>
vector<T> factorial(ll t) {
  vector<T> v(t + 1);
  v[0] = 1;
  REP(i, 1, t + 1) v[i] = i * v[i - 1];
  return v;
}
template <typename T>
T inline nPr(ll n, ll r, vector<T> &v) {
  return v[n] / v[n-r];
}
template <typename T>
T inline nCr(ll n, ll r, vector<vector<T>> &v) {
  return v[n][r];
}

正直nPr,nCrに関しては使いません。
でもなんかほら、あった方が統一感あるよね?

今の目標とか

当面の目標は簡略化と、ACLからの脱却です!
今のところ、nPr,nCr,factorialはメモ化しなきゃなとか思ってます。
【6/5追記】
メモ化しました。

個人的なお気に入り

rp_queue:逆向きのpriority_queue
yes(bool end=1),no(bool end=1):Yes,Noの出力、引数に0を入れるとそのまま続けられる(クエリ系で使う)
yesno(bool b,bool end=1):bによってyes(end)かno(end)を呼び出す
prt(T t,string end="\n"):tをend区切りで出力,prt(i,":");みたいに使えるのが地味に強い
【追記】→prt(i,":")(x);みたいに使えるようになりました。
coutALL(T begin,T end):beginからendまでスペース区切りで出力(最後に改行)
coutALL(T &t):coutALL(t.begin(),t.end())を呼び出すだけ。強い。
exist(T &t):見栄え重視。中身は!empty(t)だから正直いらない。でも、BFSのときにwhile(exist(que)){~}のほうがなんとなく好き

いいなと思ったら応援しよう!