C++ online judge/programming contest template

C++ online judge/programming contest template

Timing is critical in programming contests. A well-prepared template will help you save the implementation cost once the solution ready.

This is my template

#include <bits/stdc++.h>
using namespace std;
#define PII pair<int,int>
#define VI vector<int>
#define For(i,a,b) for(auto i = (a); i < (b); i++)
#define rep(i,n) For(i,0,(n))
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define all(a) (a).begin(), (a).end()
#define trav(it,x) for(auto it = (x).begin(); it != (x).end(); it++)
#define ll long long

int main(){
	ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

	return 0;

#include <bits/stdc++.h> includes everything you need ( algorithm, iostream, cstdlib, vector, ...)

ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); speeds up cin, cout commands. These instructions disable the synchronization between stdin/stdout buffer (used in scanf, printf) and iostream's buffers. They make cin, cout achieve similar performance as scanf, printf. Note that you should never mix cin and scanf (or cout with printf) once you applied these instructions.

In addition

  • To scan a space/tab-separated string, use string str; cin >> str;.
  • To scan a whole line, use string str; getline(cin, str); (newline character \n is not included).
  • To print float/double with pre-defined precision, use
double d = 3.1415926534;
cout << hexfloat << d << ' ' //binary presentation: 0x1.921fb543da7a8p+1
    << scientific << setprecision(2) << d << ' ' //2 decimal digits: 3.14e+00
    << fixed << setprecision(3) << d << ' ' //3 decimal digits: 3.142
    << scientific << setprecision(11) << d << ' ' //3.14159265340e+00
    << fixed << setprecision(12) << d << ' ' //3.141592653400
    << defaultfloat << d << '\n'; // 3.1415926534
    // '\n' has a bit higher performance compared to endl
  • To print bit presentation of int or long long int cout << bitset<32>(int_val);. Note that double value is cast to int.
  • To redirect input/output from/to files. Use shell redirection, for example: ./main <input.txt >output.txt, or, in code, use:
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);