Kontestan berpengalaman tidak menulis kode dari nol pada setiap kontes. Mereka punya template — file .cpp berisi includes, typedefs, macros, dan helper functions yang sering dipakai. Template ini disalin untuk setiap soal baru, menghemat 5–10 menit setup dan menghindari kesalahan ketik berulang. Pada Chapter ini kita akan membangun template kompetisi lengkap: include semua STL, typedefs, konstanta (MOD, INF), macros loop (REP, FOR, FORD), math helpers (power, gcd, lcm), dan debug macro. Tujuan akhirnya: kita punya satu file .cpp yang siap tempur untuk mayoritas soal CP.
Komponen Template Kompetisi Standar #
| Komponen | Tujuan |
|---|---|
#include <bits/stdc++.h> | Semua header STL sekaligus (GCC only) |
using namespace std; | Hindari prefix std:: |
typedef | Singkatan tipe: ll, vi, pii, dst. |
| Konstanta | MOD = 1e9+7, INF = 1e18 |
| Macros loop | REP(i, n), FOR(i, a, b), FORD(i, a, b) |
| Macros container | ALL(v), SZ(x), pb, mp |
| Fast I/O | setup_io() dengan sync_with_stdio(false) |
| Math helpers | power, gcd, lcm, modinv |
| Debug macro | DBG(x) aktif hanya bila LOCAL_DEBUG defined |
Mekanisme: Mengapa Setiap Komponen Penting #
bits/stdc++.h: menggabungkan semua header STL standar (<iostream>,<vector>,<algorithm>,<unordered_map>, dst.) dalam satu file. Menghemat waktu menulis 10+ include per soal.typedef ll = long long: menulislllebih cepat darilong long, dan secara visual membedakan tipe dariint. Konvensi populer di komunitas CP.- Konstanta
MOD = 1e9+7: modulo standar di mayoritas soal yang meminta jawaban modulo bilangan prima besar.1e9+7cukup besar untuk menghindari overflow intermediate tetapi cukup kecil untuklong longmenampung perkalian. - Macros loop:
REP(i, n)lebih ringkas darifor (int i = 0; i < n; ++i). Kode 30% lebih pendek — krusial untuk kontes 2 jam. - Fast I/O: dua baris
sync_with_stdio(false)+cin.tie(nullptr)mengubah TLE menjadi AC pada soal dengan input besar. - Math helpers:
power(base, exp, mod)untuk modular exponentiation — wajib di soal kombinatorika.gcd,lcmmuncul di banyak soal number theory. - Debug macro:
DBG(x)mencetakx = nilaikestderrsaatLOCAL_DEBUGdefined. Saat submit, build tanpa define → debug hilang otomatis.
Kode: Template Kompetisi Lengkap #
cpp
#include <bits/stdc++.h>
using namespace std;
// ----- Typedefs umum -----
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
typedef vector<string> vs;
typedef vector<vi> vvi;
typedef vector<vll> vvll;
// ----- Constant -----
const int MOD = 1e9 + 7;
const ll INF = 1e18;
const int INF_INT = 1e9;
// ----- Macros -----
#define FOR(i, a, b) for (int i = (a); i < (b); ++i)
#define REP(i, n) FOR(i, 0, n)
#define FORD(i, a, b) for (int i = (a); i >= (b); --i)
#define ALL(v) (v).begin(), (v).end()
#define SZ(x) ((int)(x).size())
#define pb push_back
#define mp make_pair
#define fi first
#define se second
// ----- Debug macro -----
#ifdef LOCAL_DEBUG
#define DBG(x) cerr << #x << " = " << (x) << '\n'
#else
#define DBG(x)
#endif
// ----- Fast I/O -----
void setup_io() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
}
// ----- Math helpers -----
template<typename T>
T power(T base, T exp, T mod) {
T result = 1;
base %= mod;
while (exp > 0) {
if (exp & 1) result = (result * base) % mod;
base = (base * base) % mod;
exp >>= 1;
}
return result;
}
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
ll lcm(ll a, ll b) { return a / gcd(a, b) * b; }
// ----- Contoh solve function -----
ll solve_sum(const vi& a) {
ll s = 0;
for (int x : a) s += x;
return s;
}
int main() {
setup_io();
int n;
cin >> n;
vi a(n);
REP(i, n) cin >> a[i];
ll result = solve_sum(a);
cout << result << '\n';
cout << "\n=== Template Kompetisi Siap Pakai ===\n";
cout << "1. #include <bits/stdc++.h> (semua header STL)\n";
cout << "2. typedef ll, vi, pii, ...\n";
cout << "3. MOD = 1e9+7, INF = 1e18\n";
cout << "4. Macros: FOR, REP, FORD, ALL, SZ, pb, mp\n";
cout << "5. setup_io() dengan sync_with_stdio(false)\n";
cout << "6. Math helpers: power, gcd, lcm\n";
cout << "7. Debug macro DBG(x) (hanya aktif bila LOCAL_DEBUG)\n\n";
cout << "=== Konstanta Wajib ===\n";
cout << "MOD = " << MOD << " (modulo standar)\n";
cout << "INF = " << INF << " (long long max)\n";
cout << "INF_INT = " << INF_INT << " (int max)\n\n";
cout << "=== Macro Loop ===\n";
cout << "REP(i, n) -> for (i = 0; i < n; i++)\n";
cout << "FOR(i, a, b) -> for (i = a; i < b; i++)\n";
cout << "FORD(i, a, b) -> for (i = a; i >= b; i--)\n";
return 0;
}Untuk input 5\n3 9 2 7 5:
bash
g++ -std=c++17 -O2 -o solusi template.cpp
echo "5
3 9 2 7 5" | ./solusiOutput yang Dihasilkan:
text
26
=== Template Kompetisi Siap Pakai ===
1. #include <bits/stdc++.h> (semua header STL)
2. typedef ll, vi, pii, ...
3. MOD = 1e9+7, INF = 1e18
4. Macros: FOR, REP, FORD, ALL, SZ, pb, mp
5. setup_io() dengan sync_with_stdio(false)
6. Math helpers: power, gcd, lcm
7. Debug macro DBG(x) (hanya aktif bila LOCAL_DEBUG)
=== Konstanta Wajib ===
MOD = 1000000007 (modulo standar)
INF = 1000000000000000000 (long long max)
INF_INT = 1000000000 (int max)
=== Macro Loop ===
REP(i, n) -> for (i = 0; i < n; i++)
FOR(i, a, b) -> for (i = a; i < b; i++)
FORD(i, a, b) -> for (i = a; i >= b; i--)Bedah Kode Baris-per-Baris #
#include <bits/stdc++.h>: header non-standar GCC yang menggabungkan semua STL. Tidak portabel ke MSVC — untuk produksi, pakai header spesifik.typedef long long ll;: aliaslluntuklong long. Demikian jugavi = vector<int>,pii = pair<int,int>. Konvensi ini umum di Codeforces.const int MOD = 1e9 + 7;: konstanta modulo. Ditulis1e9 + 7(literaldouble1e9 kemudian cast keint) — hati-hati:1e9 + 7dievaluasi sebagai1.0e9 + 7 = 1.0e9 + 7.0 = 1.000000007e9, kemudian castint. Hasilnya1000000007— benar untuk konstanta ini.#define REP(i, n) FOR(i, 0, n): macro loop sederhana.REP(i, n)ekspansi menjadifor (int i = 0; i < (n); ++i). Pastikanndievaluasi sekali —(n)dalam tanda kurung.#define ALL(v) (v).begin(), (v).end(): idiom untukstd::sort(ALL(v))— setara denganstd::sort(v.begin(), v.end()). Lebih ringkas.#define DBG(x) cerr << #x << " = " << (x) << '\n': macro debug.#xstringifikasi — bilaDBG(my_var), menghasilkan"my_var = " << my_var. Hanya aktif bilaLOCAL_DEBUGdefined.ios::sync_with_stdio(false); cin.tie(nullptr);: setup fast I/O. Wajib di awalmain().T power(T base, T exp, T mod): modular exponentiation dengan binary exponentiation. KompleksitasO(log exp). Untukbase = 2,exp = 30, hasil2^30 mod (1e9+7) = 73741817.ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }: algoritma Euclidean. KompleksitasO(log min(a, b)).lcmdihitung sebagaia / gcd(a, b) * b— bagi dulu untuk menghindari overflow intermediate.
Konstanta dan Helper tambahan yang Sering Dipakai #
cpp
const double EPS = 1e-9;
const double PI = acos(-1.0);
// Direction vectors untuk BFS/DFS pada grid
const int dx[] = {0, 0, 1, -1, 1, 1, -1, -1};
const int dy[] = {1, -1, 0, 0, 1, -1, 1, -1};
// Mod inverse (Fermat's little theorem, hanya untuk mod prima)
ll modinv(ll a, ll mod) { return power(a, mod - 2, mod); }Cara Pakai Template Saat Kontes #
- Salin template ke file baru untuk setiap soal (mis.
A.cpp,B.cpp, dst.). - Edit
solve_sumatau ganti dengan fungsi solve sesuai soal. - Compile dengan flag debug saat development:
g++ -std=c++17 -O2 -DLOCAL_DEBUG -g -fsanitize=address,undefined. - Test sample input dulu — bila salah, fix dengan bantuan
DBG. - Sebelum submit, build final tanpa define:
g++ -std=c++17 -O2. Sanitizer dinonaktifkan agar tidak TLE di judge.
Checklist Template Sebelum Submit #
| Item | Verifikasi |
|---|---|
1. bits/stdc++.h included | Ya (di GCC) |
2. setup_io() dipanggil di awal main() | Ya |
3. Tipe data akumulator ll | Ya untuk sum, product, kombinasi |
4. MOD konsisten dengan soal | Bukan 1e9+7 bila soal minta 998244353 |
5. '\n' di akhir output | Bukan endl |
6. LOCAL_DEBUG tidak defined saat submit | Build tanpa define |
7. DBG(x) tidak meninggalkan efek samping | Pakai stream murni |
Ringkasan #
- Template kompetisi menghemat 5–10 menit setup per soal.
- Komponen wajib:
bits/stdc++.h,using namespace std, typedefs, konstanta (MOD, INF), macros loop, fast I/O, math helpers, debug macro. bits/stdc++.hnon-standar GCC — aman untuk Codeforces/AtCoder, hindari untuk produksi portabel.typedef ll = long longadalah konvensi populer — kode 30% lebih ringkas.MOD = 1e9+7adalah konstanta modulo standar; soal bisa minta998244353— selalu baca soal.DBG(x)denganLOCAL_DEBUGmemungkinkan debug aktif saat development, otomatis hilang saat submit.- Simpan template di snippet manager editor untuk akses cepat saat kontes.