Sabtu, 12 September 2015

Penyisihan ICPC Regional Singapore 2015

Kalau ngeliat judul ini kan sudah jelas saya ikut penyisihannya. Nah, kenapa saya bisa ikut? 2 minggu yang lalu, ketika hari penutupan pendaftaran ICPC Regional Singapore, saya ditelpon Pak Denny ketika ngerjain tugas PMB. Singkat cerita, Pak Denny menanyakan apakah saya mau ikut ICPC Regional Singapore, setim dengan Agus dan Anthony. Karena saya merasa tidak masalah dan enak dengan member seperti ini (walaupun bug mereka berdua susah di-detect), saya iyakan saja.

Kemudian, selama 2 minggu awal-awal perkuliahan, kami sering latihan di lab, yang membuat setiap hari saya pulang malam dan malas mengerjakan tugas (loh). Latihan juga cuma nge-gym CF, hasilnya biasa saja, tapi setidaknya kami sudah mulai terbiasa bertanding bertim, dan saya juga mulai terbiasa environment ICPC-style. Oiya, nama tim kami SlowBro, kalo gak salah gara-gara ngerandom nama pokemon dan maksain maknanya minta orang lain woles ("Slow, Bro").  Tapi akhir-akhir ini kami mikir namanya harusnya berhubungan dengan 'optimis' atau 'semangat', karena jargon kami :P

Anyway, hari Minggu kami ke lab 1105 Fasilkom yang sudah dibook Pak Denny. Btw, pas hari-H aslinya ada pemadaman bergilir :v Kami gak pakai cheatsheet karena belum nyiapin :P

Kontes bisa dilihat di sini .

Kontes dimulai! Sesaat sebelum kontes, disepakati Anthony baca A-C, Agus D-G, dan saya H-J. Beberapa saat setelah baca, Anthony tanya apa saya mau coding A - ICPC Tutorial. Karena saya rasa soal itu soal bonus, saya minta dia saja yang code, karena saya masih baca soal. Kemudian saya baca soal I - Pivot, dan sadar kalau solusinya mudah. Anthony submit A, namun kena WA. Akhirnya, saya coding I dulu ketika Anthony nyoba debug. I Accepted! Setelah itu, Saya dan Anthony debug codingan A, setelah benerin beberapa hal akhirnya A Accepted!

Kemudian, Anthony bilang kalau B - 2048 cuma perlu disimulasikan biasa. Tapi kami berdua ragu coding, karena yang begini kami biasa ngebug. Setelah itu, Agus ngajukan diri buat ngerjain B, setelah bilang "D sampai G susah parah". Entah kenapa pas latihan sama kontes Agus kena baca soal susah duluan. Sementara Agus ngoding dan ngebug, saya dijelaskan Anthony kalau C - VisuAlgo Online Quiz hanya nyari banyak shortest path dari source ke target. Saya yakin kalau solusinya hanya Dijkstra + DP. Setelah B Accepted, saya ngerjain C, dalam beberapa menit Accepted!

Soal-soal bonusnya sudah AC, kemudian kami diskusi mau ngerjain apa. Saya jelasin soal J - Animal Classification, yang intinya nyari banyak set yang muncul di kedua tree. Pas jelasin, saya baru kepikiran kalau bisa di-hash, tapi Agus kurang yakin dengan solusi hashing. Saya mencoba yakinin Agus dan Anthony untuk ngehash, dan Agus setuju, dan dia propose double hash agar lebih meyakinkan. Sementara Agus ngoding, saya baca soal-soal yang Agus baca di awal. Pas baca D - Grid MST, saya sadar ini Manhattan Distance Minimum Spanning Tree, yang disinggung di tutorial line sweep topcoder, tapi tidak saya baca sepenuhnya :(

Setelah itu, saya dan Anthony diskusi soal H - Panda Chess. Intinya dikasih ranklist, tentukan berapa operasi insert dan remove yang diperlukan untuk bikin ranklist itu benar. Pas diskusi, saya ngejelasin ke Anthony beberapa observasi yang saya dapat, sampai saya sadar kalau soal ini berhubungan dengan longest increasing subsequence (LIS)! Oiya, solusi J Agus mendapat Accepted! (First AC yay!). Setelah itu, saya buru-buru coding H. Setelah beberapa menit, saya submit, dapat compile error gara-gara ada variabel yang saya pakai terdapat di STL-nya C++11 :( Resubmit, WA. Saya bingung awalnya, namun baru sadar kalau saya salah mengerti input -- yang diberi bukan poin pertandingan seperti turnamen, tapi cuma penunjukan bahwa A lebih jago dari B. Setelah bikin ulang dan WA beberapa kali karena lupa long long, H Accepted! Selama beberapa saat, kami di posisi pertama official team :')

Setelah itu kami diskusiin beberapa soal. Saya jelasin ke Anthony soal G - Ski, yang setelah saya jelasin dia, dia bilang kalau soal ini nyari maximum sum dari suatu range L-R, kayak suatu soal di SPOJ. Setelah itu kami minta Agus untuk ngoding soal G. Selama Agus ngoding, saya coba soal F - Triangle, tapi gak kepikiran apa-apa :'( Akhirnya saya mikirin soal D. Ujung-ujungnya, saya kepikiran solusi Range Tree, yang mungkin bakal mepet time limit, tapi karena kami gak kepikiran lagi saya propose saja solusi ini. Meanwhile, solusi Agus di G ngebug cukup lama. Setelah debug, kami kena WA. Kami coba beberapa asumsi juga tetap WA. Akhirnya, saya mulai coding D. Di tengah-tengah coding, saya merasa pusing dan akhirnya nyoba debug codingannya Agus, sementara Agus dan Anthony mikir soal E - Rectangle Land. Setelah sekitar 10 menit, saya ketemu sesuatu yang fatal. Akhirnya G Accepted :')))

Setelah itu saya pergi sholat sementara. Ketika balik,  Agus dan Anthony jelasin ke saya solusi E mereka, sekalian request saya yang code. Karena pusing dan harus nyelesein D, saya pikir lebih baik mereka yang coding nantinya. Kemudian, saya lanjut ngoding D, dan bug bertebaran di mana-mana :( Ketika bisa dicompile, sample input 2 saya salah. Untungnya bugnya cepet ketemu -- solusi saya salah jika ada titik yang berada di koordinat yang sama. Setelah tambahin beberapa hal, submit, dan D Accepted! Pada saat ini kami menargetkan AC 9, jadi Agus buru-buru ngoding E, sementara saya istirahat karena pusing sekali.

Setalah Agus ngoding E, dia dan Anthony ngelakuin testing. Sample case WA :( Kemudian mereka nemuin beberapa bug, benerin, sampai akhirnya 2 menit menjelang kontes berakhir Agus bilang kalo ada salah fatal di codenya. Ujung-ujungnya, 2 menit terakhir kami habiskan dengan ngobrol dan liat scoreboard yang sudah difreeze.

Pas kontes
Source : Agus

Scoreboard akhir

*note : Agus gak mau foto yang ada dianya diupload

Malamnya, saya ngeliat scoreboard yang sudah gak difreeze, dan ternyata kami di peringkat 5 tim official :') Semoga saja nantinya kami bisa dapat hasil yang lebih baik lagi >.<

Thanks for reading!

2 komentar: