Codeforces C++0x版テンプレ

ソースコード

#include<iostream>
#include<sstream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<complex>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;

#define rep(i,n) for(int i=0;i<(int)n;i++)
#define all(c) (c).begin(),(c).end()
#define pb emplace_back

typedef long long ll;
typedef vector<int> vi;
typedef tuple<int,int> pi;

const int inf=(int)1e9;
const double EPS=1e-9,INF=1e12;

/* for debug */
#define dbg(x) cerr<<#x<<" = "<<(x)<<endl;
template<int N,class Tuple> void out(ostream &os,const Tuple &t){}
template<int N,class Tuple,class H,class ...Ts>
void out(ostream &os,const Tuple &t){
	if(N)os<<", ";
	os<<get<N>(t);
	out<N+1,Tuple,Ts...>(os,t);
}
template<class ...Ts>
ostream& operator<<(ostream &os, const tuple<Ts...> &t){
	os<<"( "; out<0,tuple<Ts...>,Ts...>(os,t); os<<" )";
	return os;
}
template<class T>
ostream& operator<<(ostream &os, const vector<T> &v){
	os<<"[ "; rep(i,v.size())os<<v[i]<<(i==v.size()-1?" ]":", ");
	return os;
}
/* end debug */

template<int N,class Tuple> void in__(istream &is,Tuple &t){}
template<int N,class Tuple,class H,class ...Ts>
void in__(istream &is, Tuple &t){
	is>>get<N>(t);
	in__<N+1,Tuple,Ts...>(is,t);
}
template<class ...Ts>
istream& operator>>(istream &is, tuple<Ts...> &t){
	in__<0,tuple<Ts...>,Ts...>(is,t);
	return is;
}
template<class T>
istream& operator>>(istream &is, vector<T> &v){
	T tmp; is>>tmp; v.pb(tmp);
	return is;
}

int main(){
	
	return 0;
}

備考

  • push_backはemplace_backに変更
  • make_pairおよびmake_tupleは、tie関数があるためほぼ不要に。なのでマクロからも削除した。
  • 範囲for文とautoがあるので、foreachマクロも削除。
  • タプル型およびベクタの入出力を定義。入力がかなり楽に。