C++ Competitive Programming Template

6 min read Jul 01, 2024
C++ Competitive Programming Template

Template C++ untuk Competitive Programming

Competitive programming merupakan sebuah olahraga yang mengharuskan peserta untuk menyelesaikan berbagai macam masalah algoritma dan pemrograman dengan batasan waktu dan memori. Dalam dunia kompetitif ini, efisiensi dan kejelasan kode menjadi kunci kemenangan. Untuk mencapai tujuan tersebut, banyak programmer kompetitif menggunakan template C++ yang berisi kumpulan fungsi dan kode umum yang dapat digunakan kembali untuk berbagai masalah.

Manfaat Template C++

Penggunaan template C++ dalam competitive programming memiliki beberapa manfaat:

  • Kecepatan: Template C++ telah dioptimalkan untuk performa dan kecepatan.
  • Modularitas: Template dapat dibagi menjadi beberapa bagian yang dapat digunakan kembali di berbagai program.
  • Kemudahan Penggunaan: Template menyediakan fungsi dan struktur data yang sudah siap pakai, sehingga programmer dapat fokus pada logika solusi.
  • Konsistensi: Template memastikan bahwa kode Anda konsisten dan mudah dibaca, bahkan ketika Anda bekerja dengan tim.

Elemen Template C++ Umum

Berikut beberapa elemen umum yang biasanya terdapat dalam template C++ untuk competitive programming:

1. Header Files:

  • <iostream>: Header untuk input dan output standar.
  • <algorithm>: Header untuk algoritma umum seperti sort, binary_search, lower_bound, dll.
  • <vector>: Header untuk menggunakan vektor (array dinamis).
  • <queue>: Header untuk menggunakan antrian (queue).
  • <stack>: Header untuk menggunakan tumpukan (stack).
  • <map>: Header untuk menggunakan map (key-value pair).
  • <set>: Header untuk menggunakan set (kumpulan unik elemen).
  • <cmath>: Header untuk fungsi matematika.

2. Macros:

  • #define ll long long: Mempermudah penulisan tipe data long long.
  • #define pb push_back: Mempermudah penambahan elemen ke vektor.
  • #define mp make_pair: Mempermudah pembuatan pasangan (pair).
  • #define F first: Mengakses elemen pertama dari pasangan.
  • #define S second: Mengakses elemen kedua dari pasangan.
  • #define endl '\n': Mempercepat output.

3. Fungsi Umum:

  • Fungsi gcd(a, b): Menghitung faktor persekutuan terbesar (GCD) dari dua bilangan.
  • Fungsi lcm(a, b): Menghitung kelipatan persekutuan terkecil (LCM) dari dua bilangan.
  • Fungsi is_prime(n): Memeriksa apakah sebuah bilangan adalah prima.
  • Fungsi factorize(n): Mencari faktorisasi prima dari sebuah bilangan.
  • Fungsi power(a, b): Menghitung pangkat (a^b).
  • Fungsi binary_search(arr, left, right, target): Mencari elemen target dalam array terurut menggunakan binary search.

4. Struktur Data:

  • pair: Untuk menyimpan pasangan data.
  • vector: Untuk menyimpan array dinamis.
  • queue: Untuk mengimplementasikan antrian FIFO.
  • stack: Untuk mengimplementasikan tumpukan LIFO.
  • set: Untuk menyimpan kumpulan unik elemen.
  • map: Untuk menyimpan pasangan key-value.

Contoh Template C++

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define ll long long
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define endl '\n'

using namespace std;

ll gcd(ll a, ll b) {
    return (b == 0 ? a : gcd(b, a % b));
}

ll lcm(ll a, ll b) {
    return (a * b) / gcd(a, b);
}

bool is_prime(ll n) {
    if (n <= 1) return false;
    for (ll i = 2; i * i <= n; i++) {
        if (n % i == 0) return false;
    }
    return true;
}

vector factorize(ll n) {
    vector factors;
    for (ll i = 2; i * i <= n; i++) {
        while (n % i == 0) {
            factors.pb(i);
            n /= i;
        }
    }
    if (n > 1) factors.pb(n);
    return factors;
}

ll power(ll a, ll b) {
    if (b == 0) return 1;
    if (b == 1) return a;
    ll temp = power(a, b / 2);
    if (b % 2 == 0) return temp * temp;
    else return temp * temp * a;
}

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

    // Code solution here

    return 0;
}

Tips

  • Selalu update template Anda dengan fungsi dan struktur data baru yang Anda pelajari.
  • Simpan template Anda di tempat yang mudah diakses.
  • Gunakan template Anda dengan bijak. Jangan terlalu banyak bergantung pada template dan lupakan dasar-dasar pemrograman.
  • Teruslah berlatih dan tingkatkan kemampuan Anda dengan menggunakan template C++ untuk menyelesaikan berbagai masalah competitive programming.