Frequent Mistakes in Competitive Programming - Proclub/Knowledge-Repo GitHub Wiki

Pendahuluan

Di bagian ini akan dibahas tentang frequent mistakes in competitive programming. Umumnya dalam OJ kita dapat 4 macam jenis feedback yaitu Accepted, Compile Error, Wrong Answer, Runtime Error dan Time Limit Exceeded. Yang akan dibahas disini hanya 3 jenis feedback yaitu :

  • Wrong Answer : Feedback ini muncul biasanya jika output yang diharapkan tidak sesuai dengan yang diminta soal. Kadang ada beberapa kesalahan konyol yang biasanya dibuat oleh para pemula, seperti kurang "newline", kelebihan atau kekurangan spasi, memasukan output diluar yang diminta soal seperti menulis "input :" di tampilan program dan lain lain. Yang Perlu diingat bahwa OJ ini sifatnya "exactly matched" jadi input dan output yang diharapkan soal harus benar2 sama, artinya jika output kita berbeda 1 karakter saja dengan output yang diminta oleh soal kita akan mendapatkan feedback "Wrong Answer".

  • Runtime Error : Feedback ini muncul biasanya jika kita melakukan akses diluar batas atau melakukan kesalahan aritmatika seperti membagi bilangan dengan 0.

  • Time Limit Exceeded : Umumnya untuk setiap soal diberikan sebuah time limit untuk mengeksekusi program dimulai dari membaca input yang diberikan juri sampai mengeluarkan output. Dengan adanya TLE (Time Limit Exceeded) ini program kita dituntut untuk berjalan secara cepat. Sebagai contoh saat jika program kita melakukan looping sebanyak 1 milyar ini akan memakan waktu yang sangat lama dan mengakibatkan TLE. Salah satu cara untuk membuat program kita lebih cepat adalah dengan melakukan optimasi pada algoritma yang kita buat.

Tips & Trik

  • Kalo mau alokasi array yang besar lebih baik deklarasinya jadi variabel global (diluar int main()), kalo di dalem fungsi (int main() contohnya ) maximum memorinya cuman 8MB kalo buat int cuman kuat nampung kira2 8juta data. Coba bandingin ini: Kode 1 sama Kode 2

  • Alokasikan memori lebih banyak daripada yang dibutuhkan. Sebagai contoh, jika soal meminta mu untuk menyimpan bilangan bulat sebanyak 100 bilangan, alokasikan int bilangan[105]; atau int bilangan[110]; dan bukannya int bilangan[100];. Beri ruang toleransi bagi dirimu dan kodemu.

  • Untuk C/C++ gunakan main fungsi lebih baik int main() dan diakhiri dengan return 0;, hal ini dilakukan agar judging bisa membaca verdict runtime error.

  • Untuk cin/scanf itu input berhenti sama spasi atau newline (enter)

Wrong Answer

  • Biasanya setiap baris output selalu ada "newline"

Run Time Error

  • Mengakses elemen di luar indeks, contoh deklarasi arr[100] dan kita mengakses indeks ke-100. Padahal range aksesnya hanya dari 0..99.

  • Kesalahan aritmatika seperti membagi bilangan dengan angka 0.

Time Limit Exceeded (TLE)

  • Kalo input datanya cukup besar sampai > 100 ribu, jangan pernah pake cin/cout untuk input/output. Lebih baik pake scanf/printf, scanf/printf jauh lebih cepat dari cin/cout.

  • getch() atau readln(); yang berada diakhir program bisa menyebabkan program tidak berhenti (masih menunggu input dari keyboard), akibatnya program bisa mendapat Time Limit Exceed.

⚠️ **GitHub.com Fallback** ⚠️