Anda di halaman 1dari 9

Intuisi mengerjakan soal CP

1. Kalau membaca soal, jangan membaca cepat. Karena, kalau kamu membaca cepat,
bisa saja ada kata kata penting yang kamu lewatkan. Oleh karena itu, bacalah pelan
pelan dan resapilah makna dari soalnya.
2. Kalau urutan ga penting, lakukan sort. Dan sort itu tadi bisa kamu sort berdasarkan
apapun (bukan cuman urutin kecil -> besar saja, bisa kamu urutkan berdasarkan selisih,
berdasarkan nilai array yang lain, dll).
3. Kalau ada angka yang constraintnya 1e18 jangan kamu fokus pandanganmu dengan
variabel atau angka itu. Fokus disini dalam artian ngelooping, cari faktor dari bilangan
itu, dll. Switch ke bilangan yang lainnya saja dan cari relevansi nya dengan bilangan
yang besar ini.
4. Cek kemungkinan jawabannya apa saja (bentuknya, nilai nya apa aja, dll). Bisa aja
ternyata jawabannya cuman 2, 3, atau cuman 5 kemungkinan saja. Kalau misalnya
kemungkinan jawaban terbesarnya itu agak abu abu gitu gapapa, kamu kira kira aja,
jawaban paling besar yang mungkin itu berapa.
5. Buat tabel dan carilah pola
6. Cari teori matematika untuk mempersimple
7. Coba pikirkan cara menyimpan hal agar tidak perlu menghitung ulang di test berikutnya
atau looping berikutnya.
8. Cari data structure yang mungkin bisa dipake (priority queue, stack, map, dll). Kalau
kamu butuh setiap kali update sort setiap kali update sort, kamu bisa pakai priority
queue atau set. Dengan catatan, kita hanya bisa mengakses, bil terkecil atau bilangan
terbesar yang ada di priority queue. Sedangkan untuk set, dia menghiraukan berapa
banyak kali bilangan muncul (tidak akan bekerja dengan baik kalau bilangannya kembar,
tergantung soal kalau soalnya butuh malah bagus)
9. Binary search in answer
10. Kalau ada EZ testcase, langsung taruk if dan buang itu dari hal yang perlu kamu
pikirkan, karena itu sudah teratasi. Bisa saja setelah kamu persempit persempit
kemungkinannya, soalnya jadi EZ. Tapi ingat jangan terlalu fokus dengan hal itu juga,
karena bisa jadi yang kamu buang sebenernya ga perlu dan kamu terlalu fokus dengan
hal itu sampai sampai jadi stuck.
11. Kalau kamu nemu soal yang ada arraynya, trs ada banyak sekali angka yang kembar
kembar dan jejer jejer. Biasanya kamu bisa memodifikasi arraynya jadi lebih singkat.
Biasanya kalau pake ini sering sukses. Cth : Input = 111122233333334, Array yang
dimodifikasi = 1 (muncul 4 kali), 2 (muncul 3 kali), 3 (muncul 7 kali), 4 (muncul 1 kali).
12. Sliding Window
13. Simpan banyaknya angka yang muncul berulang di sebuah memo
14. Biasanya kalau ada soal trs habis itu ada beberapa query dimana dia akan update
update trs sebuah array / vector. Kita bisa catet jawabannya diluar dan bisa diproses
setiap terjadi query agar tidak boros waktu.
15. Kalau ada soal yang berhubungan dengan n^0 + n^1 + n^2 + n^3 + … biasanya soal itu
adalah soal bitmask (tidak mesti cuman kebanyakan nyambung dengan binary number
0101011...)
16. Mungkin DP bisa membantu? Prefix Sum, Prefix Sum 2D, dll. Terus ingat juga ya kalau
DP bukan cuman 1 array saja terus nemu hasil, bisa jadi dua array terus dikaitkan satu
sama lain.
17. Kalau ada pola dan bitmask, coba cek apakah banyaknya angka 1 di bitmask nya punya
hubungan atau tidak dengan polanya (__builtin_popcountll())
18. Cek kemungkinan jawabannya itu maksimal berapa minimal berapa, bisa saja ternyata
kita brute force jawabannya ACC.
19. Brute force itu artinya mencari semua kemungkinan yang kita peduli. Jadi kalau di brute
force mu kamu looping hal hal yang kamu ga perlu pedulikan, buang aja hal tsb.
Sebagai tambahan, brute force itu bisa dalam berbagai sisi dan bentuknya, bahkan bisa
bentuknya brute force jawaban.
20. Kadang kadang kamu bisa menyelesaikan sebuah soal sorting dengan cara
membandingkan array yang disort dengan yang blm di sort.
21. Mungkin Greedy bisa membantu (jadikan beberapa variabel sebagai pembanding,
kemudian loop. Di setiap loop, update variabelnya jika dianggap lebih optimal).
22. Buang hal hal yang kamu sudah ga perlu / ga perlu pedulikan / sudah terproses. Jangan
fokus terhadap hal itu, karena bisa saja itu akan menutupi solusi.
23. Apakah nilai terkecil perlu di consider?
24. Bisa ga langsung diproses tanpa disimpan lebih dulu?
25. Apakah caramu ini menyimpan hal hal yang sebenarnya tidak dibutuhkan / tidak perlu
dipedulikan? Pikirkan ini terus menerus ketika kamu coret coret di excel ataupun ketika
kamu sedang memikirkan suatu ide.
26. Think Simple. Pikirkan solusi sesimple mungkin yang kamu bisa. Peribahasa : Jangan
membunuh gajah pake bom atom. Jangan membunuh gajah pake batu juga. Bunuhlah
gajah dengan senjata yang cocok.
27. Kalau DP trs ada hubungannya dengan kombinatorika (banyaknya cara, banyaknya
kemungkinan, dll), kamu harus cari tahu apa kesamaannya, apa yang ga perlu
dipedulikan, apa yang perlu disimpan. Setelah itu proses kedalam DP.
28. Bitmask itu bisa dibuat menyimpan sesuatu hal yang berguna. Cth : 010001 bisa
diartikan lampu 1 mati, lampu 2 nyala, lampu 3 - 5 mati, lampu 6 nyala. Dan hal ini ada
kemungkinan kita bisa kombinasikan dengan brute force binary number nya (kalau di
contoh berarti 0 sampai 63) ataupun bisa menggunakan dp bitmask.
29. Biasanya kalau ada soal YES or NO, kamu bisa cari either kapan dia jawabannya YES
atau kapan kamu jawabannya NO. Untuk NO, carilah apa yang menghalangi kamu agar
menemukan solusi YES. Sedangkan untuk YES, syarat syarat apa yang perlu tembus
agar kamu bisa dapet YES. Jangan terlalu fokus ke YES nya, coba sesekali pikir kapan
dia NO. Atau begitu juga sebaliknya, jangan terlalu fokus ke NO, sesekali pikir juga
kapan dia YES.
30. Kalau dalam suatu soal tertentu. Bilangan terakhir dari suatu array mempunyai
hubungan dengan bilangan pertama dalam array tersebut, maka coba kamu gambar
arraynya ke dalam lingkaran (diputarkan). Mungkin dengan melakukan hal ini kamu
akan mendapat ide, toh tidak ada ruginya sama sekali.
31. Kamu bisa asal lakukan sesuatu tanpa memperhatikan syarat, di lakuin asal bener
kemudian kamu cek di akhir apa hasilnya memenuhi atau tidak (Salah satu teknik
greedy yang mungkin untuk dilakukan).
32. Mungkin ketika kamu ketemu soal pola, GCD bisa membantu Anda. Cth : Bagi dengan
GCD atau cocokan dengan GCD, dll.
33. Berpikirlah dalam berbagai sisi, dari depan ke belakang, dari belakang ke depan, dari
depan ke belakang namun mengecek elemen dibelakangnya, dari depan ke belakang
namun mengecek elemen setelahnya, dll. Bisa jadi kamu coba dari depan ke belakang,
ternyata solusi paling optimalnya adalah dari belakang ke depan. Ataupun sebaliknya.
34. Prefix sum paling efektif ketika indexnya mulai dari 1. Karena kita bisa mengurangi
seperti ini arr[n]-arr[0]. Bisa juga ditambahkan elemennya di akhir juga. Kita bisa free
nambah elemen di belakang atau di depan sesuai dengan kebutuhan.
35. Cari sebanyak mungkin informasi yang bisa kamu dapet dari idemu atau soalnya,
mungkin salah satu dari informasi itu bisa berguna.
36. Kalau nemu soal OR, AND, XOR langsung buat binary nya dari bilangan yang
bersangkutan. Itu akan mempermudah kamu dalam menemukan ide.
37. Jika ada soal yang mengkombinasikan XOR dengan DP, manfaatkan x ^ x = 0 dan
aplikasikan prefix XOR. a[2] ^ a[3] = prefix[3] ^ prefix[2 - 1].
38. Jangan takut, ini komputer, komputer bisa memproses 10^6 kemungkinan dengan
kurang dari 1 detik. 1 detik bahkan tidak ada apa apanya.
39. Teknik Two Pointer itu bukan hanya ada 2 variabel, 1 ada di posisi array ke mana, 1 lagi
ada di letak array yang mana. Melainkan, bisa jadi seperti soal ini
https://codeforces.com/contest/1535/problem/C. Bisa juga ada yang 1 dari index terkecil,
satu lagi ada di index tengah.
40. Kalau kamu sudah sort trs kamu coba dari depan ke belakang dan belakang ke depan
tidak bisa, maka cobalah dari tengah, karena mungkin saja ada kemungkinan solusi
optimalnya mulai dari tengah (loopingnya).
41. Sorting bisa jadi kamu harus amati, sebuah array bisa saja dibagi menjadi 2 bagian
(genap dan ganjil), dan kamu bisa saja menganalisanya lebih lanjut dari sini. Ini untuk
soal sorting trs ada hubungannya dengan paritas.
42. Kalau kamu menjalankan sebuah ide, pastikan yang kamu jalankan itu benar. Jangan
jangan idenya bener tapi kamu mengoperasikannya yang salah aja makanya kamu
anggap idenya ga bener. Kan ngaco jadinya.
43. Jika brute force yang kamu pakai seperti ini.
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
...
}
}
Di dalam brute force yang kayak gini. j - i + 1 adalah banyaknya bilangan yang sedang
di dalam operasinya. i + 1 adalah banyaknya bilangan dari depan. n - i adalah
banyaknya bilangan dari belakang.
44. Erase itu kompleksitasnya bukan O(log(n)) ya BROOOO. Erase itu O(n) hampiran. Jadi
hati hati kalau pake erase. Karena singkat bukan berarti cepat.
45. Misalkan variabel yang ingin kamu cari dan tidak diketahui dengan nama. Setelah itu,
buatlah soalnya jadi ke dalam bentuk variabel tsb. Alias, definisikan soalnya dengan
variabel permisalan mu.

Kemungkinan kesalahan WA, TLE, RTE


1. Long long atau int
2. Mulai dari 0 atau 1 (cek semua hal yang berkaitan dengan ini)
3. Index yang keluar batas (Lupa kasih persyaratan)
4. i itu bukan 1, l itu bukan 1 (sering sekali ini salah ketik terus ga kebaca)
5. Jangan salah variabel (padahal x kamu tulis n)
6. Variabel Lupa di Reset
7. Pikirkan tricky test case yang terlewat (ini bentuk nya bukan WA saja kadang, bisa TLE,
bisa RTE, dll)
8. Baca ulang Intuisi CP diatas
9. Caramu cuman include 1 part of the solution, tidak meng include semua kemungkinan
kemungkinan yang ada.
10. Soal Example Nya kadang kadang itu sudah in sorted ways, sedangkan seharusnya
kamu harus sort ulang kalau untuk test case yang dia belum sorted. Tapi, contohnya
sudah sorted jadi kamu WA nya di testcase lain hanya karena alasan itu :)
11. Kalau kamu pake percepatan buat cin, jangan pake scanf, ganti semuanya pake cin cout
karena biasanya menyebabkan WA itu.
12. Kalau kamu coba jalankan program, terus testcase 1 bener yang lain salah. Ada
kemungkinan bahwa ada array / vector / variabel yang belum di reset.
13. Berusaha semaksimal mungkin untuk menggagalkan program kamu. Kalau salah,
artinya dari situlah programmu WA.
14. Biasanya kamu berpikir dan menemukan solusi kalau bilangannya beda semua,
bagaimana kalau bilangannya ada yang sama dan tidak ada larangan di sini, cek bagian
mana yang kamu ga telitinya.
15. Cek mana yang dilakukan dulu, mana yang dilakukan kemudian. Jangan sampai
ketukar. Bisa bisa ada test case yang mencederai kodemu gara gara kebalik urutan.
16. >= atau > atau <= atau <. Jangan sampai salah.

Feedback

-> Dalam menyelesaikan sebuah masalah belum tentu caranya hanyalah 1 itu doang, bisa saja
masalahnya itu bisa kita pecahkan dengan banyak cara. Seperti contohnya kasus ini, bukan
hanya pakai binary search, map juga bisa.

-> Biasakan operasikan apa yang kamu pikirkan di kertas atau excel karena ga akan bisa kalau
misalnya kamu awang awang aja di udara, bisa bisa ilang idemu atau bahkan kamu miss
banyak.

-> Baca constraint yang teliti, baca soalnya yang teliti, bisa aja ada petunjuk ada di kalimat
kalimat soal yang belum kamu baca padahal itu point yang penting.

-> Biasakan buat testcase testcase sendiri terus uji coba langsung dikertas, gimana programmu
kira kira bisa bekerja. Jangan kamu berharap dapet ide kalau kamu ga coret coret.

-> Kalau kamu mau memecahkan masalah dan kamu sudah nemu ide, biasakan kamu itu buat
program yang sesuai dengan ide mu itu tadi. Jadi, bisa diibaratkan kamu itu memprogram di
app apa yang kamu pikirkan di kepala (terjemahkan apa yang ada di kepalamu di coding). Balik
ke excel atau coret coretanmu kalau kamu bingung.

-> Kalau kamu sudah bisa membuat suatu program yang menyelesaikan suatu masalah, buat
dulu aja walaupun TLE. Nanti setelah kamu buat, barulah kita usahakan untuk
menyederhanakan kode yang sudah ada itu.

-> Kalau kamu bingung ngerjain suatu soal, terus habis itu kamu liat solution trs kamu bisa,
biasakan kamu selalu refleksi dan tanya, kenapa kok kamu ga bisa kerjain soal itu sebelumnya,
apa yang membuat kamu ga bisa kerjain soal itu tadi.

-> Kalau kamu pertama kali nemu sebuah soal, terus kamu kira bahwa urutan soalnya itu ga
penting. Langsung aja kamu sort, soalnya ga ada ruginya sama sekali. Malahan biasanya ide
itu muncul muncul sendiri setelah kita sort.
-> Kalau kamu pikir ada suatu ide trs idenya itu memakan memori terlalu besar, coba balik, bisa
jadi kalau kamu tuker antara indexnya dengan nilai nilai yang ada di array itu, bisa jadi sangat
membantu.

-> Kalau kamu pikir ada suatu ide, tapi ide itu TLE. Coba coding dulu. Setelah itu kamu analisa,
apa yang bisa kita simpen nilainya sehingga di dalem looping ga perlu ada looping lagi. Bisa aja
ternyata, kita bisa simpen nilainya di luar dan kita tinggal akses nya menggunakan array doang.
Contoh : prefix sum, prefix minimum, dll.

-> Kalau kamu punya penyelesaian dari suatu masalah, jangan sampe kamu udah nyelesaiin
masalah yang angkanya besar besar tapi justru yang kecil itu salah karena testcasenya unique.

-> Coba putar puter perspektifmu terhadap soal itu, ibaratkan kamu terlalu fokus terhadap
jumlah students yang ada di soal. Coba kamu fokuskan lebih ke hari hari yang mereka bisa,
mungkin itu menjadi sebuah solusi yang lebih optimal. Ini berkaitan dengan soal
https://codeforces.com/contest/1598/problem/B

-> Kalau kamu punya soal, cobalah kamu pecah soal itu menjadi bagian yang lebih kecil. Sama
kayak ko Jimmy ngajarin kamu ketika belajar tentang sub query di my SQL. Kan kamu buat dulu
tuh step by step per query, nah itu kamu bisa coba kalau mengerjakan sebuah soal asing.

-> Ketika kamu sudah menemukan sebuah penyelesaian, pikirkan apakah ternyata
penyelesaianmu itu tadi ternyata kamu bisa menggunakan teori lain untuk
menyederhanakannya. Contoh : Idemu itu pakai 2 buah queue, dan kamu akan ngepush kalau
misalnya sesuai dengan kriteria & pindah ke queue lain untuk ngepush dan berulang ulang
seperti itu. Padahal ternyata kamu bisa pake prinsip two pointer, ga perlu ribet ribet pake queue.

-> Pikirkanlah, mungkin saja ada teori matematika yang bisa dipakai untuk menyederhanakan
kode mu, bisa saja ternyata kamu ga perlu repot repot looping karena kamu bisa menggunakan
suatu konsep matematis yang membantu.

-> Kalau otakmu sudah terlalu ruet, coba pikirkan yang simple jangan terlalu terjebak di
pikiranmu. Keluar dari pikiranmu dan pikirkan kemungkinan kemungkinan yang lainnya.

-> Ingat kalau misalnya kamu mau pakai minimum dan maksimum, pikirkanlah worst casenya
secara matang matang, jangan sampai kamu coding ternyata worst casesnya ga bener.

-> Kalau kamu sudah submit trs wrong answer, JANGAN KENA MENTAL & NYERAH, pikirkan
lah testcase apa yang belum bisa tersolve oleh kode mu. Cek apa yang kamu lewatkan,
testcase apa yang kira kira kodemu terlewatkan.

-> Kalau kamu ketemu soal, terus kamu stuck, coba bertanyalah kepada dirimu sendiri, apa
yang membuat idemu ini stuck? Gimana caranya kamu mengakali hambatanmu ini tadi?

-> Kalau kamu stuck, dan udah panas otaknya, udah keluar dari kamar, freshkan pikiran dulu,
baru pikirin lagi. (Sambungkan ke nomer sebelum ini juga)

-> Kalau kamu berhasil mikirkan satu ide, coba jalankan idenya itu (data data apa yang kamu
peroleh setelah kamu menjalankan ide pertamamu itu tadi), setelah itu kamu ketemu apa.
Soalnya kadang 1 soal itu ga cuman butuh 1 ide doang terus selesai. Bisa saja pas kamu
jalanin ide pertamamu, perlu ide kedua untuk meneruskan jalan pikirnya, atau bahkan ide
ketiga.

-> Kalau kamu kepikiran satu ide terus satu ide tadi membutuhkan upaya yang sangat ribet dan
susah untuk mengolah datanya, maka mending kamu cari ide lain. Contohnya yang Make Them
Equal (1594 C), kamu kan ide pertamanya mencari KPK dari index index yang mungkin, nah itu
luar biasa loh, bisa2 long long aja ga cukup untuk menampung KPK. Seharusnya, kamu stop
dan pikir cara yang lain. Cara yang simple, tidak butuh sesuatu yang besar banget, tapi
mencakup semuanya.

-> Biasanya kan sering tuh ada problem tentang minimum dalam melakukan sesuatu, nah itu
coba kamu cek worst casesnya. Kadang kadang dengan menganalisa worst casenya itu bakal
memunculkan ide ide brillian. Contohnya adalah soal yang Make Them Equal, begitu kamu tahu
maksimalnya 2 kan langsung muncul tuh ide idenya. Tapi, setelah muncul ide idenya yang rapi
ya pola pikirnya, kalau misalnya 0 dia kapan, 1 dia kapan, 2 dia kapan. Jangan kacau balau.

-> Kamu harus tahu batas nyari ide itu gimana, jangan sampai kamu udah nyari muluk muluk
ternyata itu ribet sekali ngecodenya, dan ternyata ada yang simple banget yang bahkan kamu
ga kepikir. Beri batasan, kalau kamu udah terlalu rumit mikirnya, reset pola pikir mu, cari ide
yang baru.

-> Biasanya kalau kamu ngeliat soal, idemu itu muncul, tapi idenya tidak terorganisir dengan
baik. Untuk menyelesaikan masalah ini, coba kamu jalankan idemu itu diexcel untuk
mendetailkan pola pikirmu itu tadi. Jangan cuman di awang awang tok & perlu diingat excel
bukan satu satunya cara, kalau kamu nemu cara yang lebih efektif silahkan boleh dicoba.

-> Jangan coding dulu sebelum kamu menjalankan apa yang sedang kamu pikirkan (idenya
proses mendetailnya gimana). Karena dalam kita mengcoding sesuatu, diperlukan detail detail
agar bisa AC.

-> Kalau kamu sudah berhasil mengcoding dan hasilnya itu adalah TLE, coba pikirkan,
bagaimana caranya kamu memproses jawabannya ketika menginputkan data atau mengolah
data. Jadi tidak perlu menghitung ulang ketika menjalankan testcasenya. Teknik ini sering
digunakan, ada soal yang pake teknik ini, inilah contoh contoh soalnya
https://codeforces.com/contest/1549/problem/C, https://codeforces.com/contest/1519/problem/C

-> Cara mempercepat kode itu ada 2 cara, melakukan perhitungan matematis atau menyimpan
hal yang sudah diproses agar tidak perlu untuk memproses bolak balik. Jadi, selalu ingat akan 2
hal ini.

-> Jangan takut untuk coret coret atau ga hemat kertas, karena tanpa menggunakan kertas
kamu ga akan bisa ngawang ngawang begitu saja. Karena ini competitive proggramming.

-> Biasakan setelah coret coret, organisir informasi informasi yang kamu peroleh, bisa dalam
bentuk tabel ataupun apapun. Karena bisa saja ternyata ada pola yang berhubungan dengan
hal tersebut.

-> Kalau kamu mau coret coret lagi untuk memastikan apa kira kira polamu udah bener apa
blm, predict first kira kira jawabanmu apa. Jangan kamu udh coret coret padahal kita blm
memastikan hasilnya itu apa pertama tama di awal.
-> Biasakan kalau kamu nemu sebuah ide baru, teori baru atau apapun yang baru. Coba kamu
buat soal tersusah yang bisa kamu buat yang berhubungan dengan hal baru yang kamu
peroleh tadi. Ini bisa dibuat latihan kalau kamu mau.

-> Kalau kamu ngecek eh ternyata idemu itu salah, ya sudah gapapa. Move on tapi, jangan
kamu trs muter muter di idemu itu tadi padahal kamu sudah tahu kalo idemu itu salah.

-> Perintah itu bisa kamu simbolkan dengan sebuah int. Jadi itu bisa jadi akan sangat
membantu kalau misalnya seperti itu. Contoh soal : https://spoj.com/problems/PRINTSPIRAL

-> Kalau misalnya kamu mengerjakan soal kayak DCEPC901 itu kan dia memproses sesuatu.
www.spoj.com/problems/DCEPC901. Prosesnya itu coba kamu proses di excel, biasanya bakal
terjadi sesuatu itu.

-> Kalau kamu mengerjakan suatu soal dan kamu stuck, coba aja apapun yang bisa kamu
lakukan dengan soal itu. Dengan catatan, pasti tidak TLE. Cth : Binary Search in Answer. Apa
aja yang bisa kamu lakukan ini harus dilatih (intuisi) yaitu dengan cara latihan latihan trs soal
soal.

-> Kalau kamu nemu soal, biasakan gunakan intuisimu. Jadi contohnya pas baca soal kalimat
pertama, oh ini urutannya ga penting. Ya udah aku sort aja ini bisa. Gitu gitu.

-> Intuisinya itu tadi, bisa kamu dapatkan melalui latihan latihan. Kalau kamu ngerjain soal
kemudian stuck ga bisa kerja, kamu liat editorial, pikirkan bagaimana caranya lain kali kamu
bisa kepikiran itu.

-> Kalau kamu nemu soal, terus constraintnya itu kayak 1e18, jangan pernah pikir pikir kamu
mau memfaktorkan ini atau apa. Karena authornya sengaja buat agar hal itu tidak dilakukan.
Carilah hal yang bisa kamu lakukan lainnya dengan melihat constraint yang lainnya.

-> Kalau kamu ada soal, dan ada kemungkinan misalnya x > y, jawabannya 0. Langsung kasih
if aja, walaupun nanti bakal ga guna. Karena hal itu bisa membantu kita dalam memunculkan
ide ide.

-> Ingat bahwa soal itu diciptakan untuk diselesaikan. Tidak ada soal yang impossible untuk
disolve.

-> Kalau kamu nemu soal, kemudian kamu sudah kepikiran ide besarnya, biasakan setelah itu
kamu coba selesaikan masalah itu dengan data structure data structure yang mungkin bisa
dipakai. Karena bisa saja ternyata kalau pake data structure tertentu akan lebih cepat sekali
programmu.

-> Kalau kamu nemu soal yang diberi array trs jawabannya 1 angka. Itu caranya ada 7

1. Dari kiri ke kanan, 2. Dari kanan ke kiri, 3. Dari nilai paling kecil ke besar, 4. Dari nilai paling
besar ke kecil, 5. Dari ujung kanan dan kiri ke tengah, 6. Random point, 7. Dari tengah
menyebar.

-> Kalau kamu nemu sebuah soal dan soalnya itu tidak mementingkan urutan langsung sort aja.
Nah, sort ini sendiri itu ada banyak kemungkinan ya.
1. Sort dari kecil ke besar, 2. Sort dari besar dan kecil, 3. Sort berdasarkan warna ataupun hal
hal tambahan lainnya itu juga bisa ya.

-> Kalau kamu mengerjakan soal yang ada subtasknya, biasakan kamu itu mengelist satu satu
setipa subtask caranya gimana, kalau subtask 1 gampang, kamu bisa ngapain aja, idemu
gimana. Trs subtask 2 itu kadang kadang adalah subtask 1 yang disederhanakan. Bagaimana
kamu mempersimple idemu, … dan begitu juga seterusnya.

Np : Kadang ada soal dimana subtask terakhir itu beda banget sama yang subtask sebelumnya
(caranya), tapi gapapa dengan adanya runtutan kayak gitu, minimum kamu sudah dpt nilai
lumayan banyak dari subtask subtasknya. Dan bisa aja setelah kamu kerja akan ada ide yang
bermunculan.

-> Kalau kamu lagi ada di lomba yang 5 jam 3 soal. Biasakan di 1 jam pertama, kamu itu full
mikir dan coret coret. Jangan buru buru coding. Karena 1 jam pertama adalah jam dimana
kamu lagi kuat kuatnya. Kecuali, ada soal guampang banget dan kamu yakin pasti ACC nah itu
kamu submit aja gapapa.

-> Kalo lomba yang ada subtask subtask, ingat kamu bukan ngincer ACC kamu ngincer poin
nya ya. Jadi ga peduli kamu ACC sebanyak apa, yang penting skormu paling tinggi.

-> Kalau kamu punya ide dan tampaknya bagus, coba kamu operasikan di excel. Soalnya
kadang kamu mikirin ide, di pikiran mu idenya ga jalan. Padahal sebenernya idenya itu bagus
bgt. Apa yang ada di awang awangmu apa yang sebenernya terjadi.

-> Eliminasilah hal hal yang tidak akan terjadi dengan informasi yang diberikan di soal ataupun
dengan ide yang sudah kamu buat.

-> Jika di dalam 1 soal cara untuk mencapai solusi itu banyak, maka kamu bisa persempit
kemungkinan dalam mencapai solusi. Contoh : hanya boleh ke kiri saja kalau hal ini terjadi.
Namun, perlu diingat, kita harus mempersempit kemungkinannya, tapi tetap harus optimal
jawabannya. Soal https://cses.fi/problemset/task/2180

-> Setelah kamu buang kemungkinan kemungkinan yang simple (easy testcase) dari sebuah
soal. Jangan terlalu terpaku untuk mencari sisanya itu dalam bentuk tertentu saja. Karena bisa
jadi bentuknya itu sangat beda dari yang kamu perkirakan dan malah ternyata easy testcase
yang kita pakai tidak berguna. Jadi jangan sampai terlalu fokus dalam mencari easy testcase
yang blm ketemu, cari sudut pandang yang lainnya.

-> Carilah kesamaan kesamaan yang ada pada soal. Apa yang sama dari beberapa testcase,
atau bahkan dari berbagai subtestcase. Bisa jadi kesamaan itu akan menuntun kita ke ide yang
optimal.

-> Buatlah kode sependek mungkin yang kamu bisa. Karena semakin panjang kodemu,
semakin besar juga kemungkinan kodemu akan wrong answer.

-> Cek apakah kamu sebenarnya perlu menggunakan for loop itu atau tidak. Karena kadang
kadang pikiran kita terlalu melebih lebihkan sesuatu, padahal tidak perlu loop tapi kita loop.

-> Jika kode kamu TLE dan di kodemu itu banyak sekali break breaknya. Maka pertimbangkan
ulang, eliminasilah hal hal yang tidak akan terjadi dengan informasi yang diberikan di soal
ataupun dengan for / while loop yang sudah kamu buat. Apa ada hal yang sebenarnya tidak
perlu di loop karena sudah pasti jawabannya atau tidak?

-> Coba kamu tulis idemu dalam bentuk kata kata. Biasanya idenya kita cuman dalam bentuk
imajinasi saja jadi kadang kadang bisa saja ada poin poin yang miss.

Anda mungkin juga menyukai