Sabtu, 08 Desember 2018

ICPC Regional Hanoi 2018

Beberapa minggu setelah Regional Jakarta, timku berangkat ke Hanoi buat ikut ICPC Regional Hanoi. Alhamdulillah bisa dapat hasil yang baik :')

Pre-ICPC 2018

Ini nggak sepenuhnya terkait ICPC Regional Hanoi 2018, jadi mungkin aja di-skip.

Sejujurnya, aku gak berencana masuk tim inti UI (yang dikirim ke regional luar) tahun ini. Setelah 1 tahun yang sangat bikin stres (2017), aku udah pengen rehat dari CP-CPan. Mungkin masih ngerjain soal-soal, cuma aku udah gak terlalu kepengen ikut ICPC. Awalnya, rencanaku buat tahun 2018 mungkin bantuin Pak Denny terkait coaching, ikut ICPC Jakarta jadi tim hore, terus gak ngapa-ngapain dulu yang serius terkait CP.

Pengennya sih gitu.

Namun, Pak Denny beberapa kali nyaranin buat tetep ikut ICPC. Sementara itu, seleksi buat tim inti udah mulai, dan aku nggak ikut karena aku yang nyiapin soal-soal seleksinya. Berhubung aturan seleksi Pak Denny bisa masukin beberapa wildcard (orang-orang yang dirasa sesuai masuk tim inti tapi pas seleksi mungkin lagi bego atau ada masalah), aku mungkin aja diselipin ke tim inti. Akhirnya aku bilang ke Pak Denny kalo aku bakal mutusin ikut tim inti atau nggak setelah kontes seleksi terakhir.

Singkat cerita, akhirnya aku mutusin buat ikut. Untuk tim inti, aku diskusi sama Pak Denny terkait pembagian timnya (tanpa preferensi orang-orangnya, karena udah mepet batas pendaftaran INC :'( ). Aku milih untuk setim sama Degol dan Inigo, untuk alasan yang mungkin kapan-kapan kuceritakan.

Oiya, kenapa nama timnya Supir Tayo? Awalnya aku ngasih 2 nama, IDA Pro (tools yang biasa kupake di CTF, IDA bisa jadi singkatan nama kami) sama Supir Tayo (lagi suka dengerin parodi Tayo). Akhirnya kami mutusin pake nama Supir Tayo, walaupun Inigo kayaknya gak tau kenapa aku ngasih nama itu. Yaudah, habis itu tiap minggu latian, dengan pace yang kurang lebih sama.

Day 0 - Keberangkatan

Ada 2 tim inti yang dikirim UI ke Hanoi, Supir Tayo sama YouR Lovely JatengPRiDe.

Kami berangkat cukup pagi, dari CGK jam 8.25. Artinya, paling lambat harus sampe bandara jam 6. Artinya lagi, aku harus dari Depok sekitar jam 4 kalo mau sampe dengan aman. Berhubung aku nge-kos di Kutek, dan aku gak tau gerbatama UI buka jam berapa, aku akhirnya mutusin buat nginep di Ristek dulu malam sebelumnya, terus nyeret koper ke Margonda dan naik taksi dari situ. Semalaman, aku mungkin cuma tidur sekitar 10 menitan karena masih nyiapin soal-soal buat Ristek Festival (dulu Pekan Ristek, tapi karena sudah tidak sepekan namanya diganti). Btw, Ristek Festival ini diadainnya di malam hari keberangkatan ke Hanoi, emang rada nekat ini semua persiapannya dadakan.

Setelah itu, nyeret koper ke Margonda, naik taksi, dan sampai di CGK. Udah ada Salman sama Yoga. Setelah yang lainnya datang (minus Degol, walaupun rumahnya sebelah bandara), kami masuk buat check in. Pak Denny ternyata berangkat sama anaknya, Linus. Habis check in, aku cek tempat money exchange, dan ternyata belum buka. Karena lapar, kami sarapan dulu.

Habis itu, Degol datang, lalu kami masuk ke ruang tunggu. Aku rencananya mau nuker duit di money exchange di ruang tunggu, tapi ternyata baru buka jam 8, padahal boarding juga sekitar jam segitu...

Ya, aku ke Vietnam tanpa bawa Dong (mata uang Vietnam) sepeser pun.

Kami transit di Singapura selama sekitar 4 jam. Setelah bisa dapat koneksi Wi-Fi (yang OTP-nya nunggu setahun), persiapan Ristek Festival masih kacau karena server-nya mati. Sementara aku beres-beresin terkait soal, Firman sama Norman bilang kalo lagi ada diskusi TC CPC dari masa-ke-masa. Jadinya ya.. cukup yakin kalo bakal aman, lol. Setelah beberapa jam, kami ke ruang tunggu, lalu terbang ke Vietnam.

Di Bandara
Sumber: Pak Denny

Setelah sampai dengan selamat, ngambilin koper, dan nuker duit, kami lalu berangkat ke hotelnya. Di perjalanan, Linus sama Inigo kayak ngobrol seru terkait sains, macem biologi, fisika, kimia. Cuma.. aku gak ngerti mereka ngomongin apaan :| Kayaknya dulu aku pas SMA pernah belajar beberapa yang mereka omongin, tapi tetep aja nggak ngerti :| Pas liat Pak Denny, mukanya juga kayaknya bingung. Yah seenggaknya yang gak ngerti nggak cuma aku xD

Habis sampai ke hotel, pembagian kamar. Aku sekamar sama Inigo di 502. Kami semua lalu jalan ke mall di depan buat cari makan. Ujung-ujungnya makan Pizza Hut sih :P Selesai makan, aku sama Degol liat-liat soal Educational Round CF yang lagi jalan. Aku diskusi soal E sama Degol, tapi ternyata aku salah ngerti soal Dx Terus aku baca soal G, kayaknya bisa pake Max Flow cuma aku gak terlalu mikirin. Pengennya pas balik nyoba ngoding terus submit.

Degol: "Gw ada ide soal E deh, kayaknya bener"
Ayaz: "Yaudah ntar submit aja"
Degol: "Lah ntar rating gw turun"

Habis itu kami balik ke hotel, aku ngoding G, sementara Degol ngirimin solusi E dia ke aku. Berhubung aku pasti out-of-contest, jadi ya.. aku submit aja :P Dua-duanya lolos.

Mandatory 404 joke
Sumber: Pak Denny
Oiya, malam itu juga Ristek Festival-nya beres. Hasilnya lumayan sesuai sama perkiraanku. Anyway, repository soal-soalnya bisa diakses di sini. Setelah bikin repository-nya jadi public, aku tidur karena udah lumayan capek.


Day 1 - Pembukaan + Practice Session

Untungnya besok paginya bisa bangun dan gak terlalu telat. Habis cek Cookie Clicker, dan sudah diajak sarapan, aku sama Inigo ke tempat sarapannya. Makanannya lumayan enak, suka banget dengan Croissant sama Pho (mi khas Vietnam)-nya. Selesai makan, aku balik ke kamarku.

Registrasinya dilakuin di hotelnya. Pak Denny ngurus registrasi, terus nganterin name tag sama kaos ke kamar masing-masing. Welp, dapet kaos warna putih. Habis itu, kami ke bawah buat foto tim. Setelah foto tim, Pak Denny ngajak jalan kalo misalnya mau cari oleh-oleh kopi. Berhubung aku gak punya duit dan emang nggak berniat beli kopi, aku mutusin buat istirahat di kamar aja.

Siangnya, kami berangkat ke PTIT (tempat lombanya). Oiya, di Vietnam ini helm-nya rada lucu, bentuknya kayak topi. Kata Pak Denny sih awalnya orang-orang gak pake helm, terus pas disuruh pake helm, kecelakaannya malah nambah gara-gara susah nengok. Makanya bentuknya jadi kayak gitu. Kenapa aku bicarain masalah helm dan kecelakaan? Karena baru sehari di Vietnam, udah ada pemandangan orang jatuh dari motor...

Sesampainya di PTIT, kami diantar LO kami ke KFC dulu karena pada kelaparan. Tentunya, untuk beli KFC, aku harus ngutang dulu. Habis beli KFC, kami balik ke PTIT buat pembukaannya. Pas pembukaan, ada ditayangin video yang isinya interview ke beberapa tim di pagi hari tadi. Dari Binus, ada yang menutup dengan bilang "Let's kill each other". Satu aula pada ketawa.

Videonya lanjut, terus ada foto-foto tim.
Ada tim-tim yang di namanya ada "Police", "Military", dll.
Ahh.. mungkin tim Binus nggak bisa balik dengan utuh.

Sliver
Digantikan TLX, TLC sekarang sponsorin ICPC
Setelah pembukaan (ada lagu, Hello Vietnam? Lumayan catchy), ada briefing dari SC. Lumayan standar lah, nggak ada yang terlalu signifikan, selain bakal ada soal interaktif :O Soal interaktif ini lumayan jarang ada di ICPC, dan aku sendiri gak terlalu bisa interaktif :"

Go Green
Habis itu rada nggak jelas, nunggu dipanggil masuk ke ruang kontesnya untuk practice session. Di luar ada denah, dan Supir Tayo.. di nomor 120 dari sekitar 125 tim. Welp. Sisi positifnya, duduknya paling belakang, dan leluasa buat gerak-gerak. Dan dipanggil masuknya satu-satu, jadi kami terakhiran banget baru masuk. Sambil nunggu, ngobrol-ngobrol sama tim Binus (Rapel dkk). Nah, pas dipanggil itu aku bingung, ini kok aku gak jelas ya denger yang manggil itu bilang apa? Tapi kenapa tim-tim dari Vietnam pada ngerti? Ternyata, kalo tim dari Vietnam bakal dipanggil pake bahasa Vietnam (angkanya pake bahasa Vietnam), sementara kalo tim luar baru pake bahasa Inggris. Hue.

Habis masuk, ngecek komputer. Keyboard-nya rada nggak enak, tombol enter-nya kecil :/ Selain itu nggak terlalu masalah sih. OS-nya Ubuntu, yey :D Habis nyoba-nyoba, ternyata practice session udah mau mulai. Pas mulai, liat-liat soalnya.. oh soal VNC kemarin. Kami cuma nyoba-nyoba ngoding aja, cuma nggak terlalu serius. Yang penting bertiga udah pernah ngerasain keyboard sama mouse-nya. Nah, ini practice session rada gak jelas kalo menurutku.. Dari sekitar 3 jam practice, setelah 2 jam kayak separo lebih tim udah ilang :| Pulang? Entahlah. Ko FJ datengin tempatku, nanya compile di tempatku berapa lama. Cuma sekitar 1 detik. Terus Ko FJ bilang kalo tempatnya Rapel bisa lama banget, beberapa detik. Aku terus ke tempatnya Rapel, ternyata beneran. Kalo mo cepet gak boleh #include <bits/stdc++.h>, tiap header nambah waktu compile secara lumayan signifikan. Kalo liat klarifikasi, kayaknya tiap tim punya masalah yang beda-beda.

Oiya, kayak biasa habis practice kami harus ninggalin barang-barang yang mau dibawa ke kontes besoknya. Untungnya Degol print citsit dua biji, soalnya serem kalo besok gak dikasih coretan (gak ada indikasi bakal dikasih :|). Jadinya, dua citsit itu kami tinggalin, biar kalo besok gak ada coretan pun kami bisa nyoret-nyoret di salah satu citsit.

Post practice session
Sumber: Pak Denny
Habis practice session itu, ada makan malam. Selama perjalanan ke tempat makan malam, aku merenung beberapa hal, malah bikin mood-ku buruk sendiri Sampai ke tempatnya, terus mulai makan. Ikan, telur, tahu, sama jus jeruknya enak, tapi ayamnya jahannam. Alot parah. Kenyang, malam itu balik ke hotel dengan senang. Aku nyoba review beberapa topik, habis itu tidur.

Day 2 - Kontes

Paginya, akhirnya alarmku berguna untuk bangun pagi. Kudu bangun pagi karena bakal cabut ke tempat kontesnya jam 7, jadi sarapan harus jam 6-an. Habis mandi, masih sempet nonton Youtube dulu :P Terus sarapan deh. Setelah sarapan, berangkat ke tempat kontesnya.

Pas sampai ke tempat kontes, kudu nitip tas terlebih dahulu. Sambil nunggu antrean, aku ke toilet, untuk mendapati kalo ya.. aku nggak bisa BAB di toiletnya. Welp.

Setelah nitip tas, kami lalu masuk ke ruang kontesnya. Kontesnya masih lama, dan nggak jelas ini apa aja yang boleh dilakuin. Tim depan kami ngetik template mereka. Funny, I remember I've seen that template before on CF (dan ternyata emang itu orang yang sama di CF). Sementara itu, kami nggak ada template, dan lumayan nganggur sebelum kontesnya mulai. Paling cuma setup gedit doang. Habis itu tidur-tiduran. Kayak biasa, bilang "udah nyantai aja, gak usah terlalu serius". Oiya, ternyata ada kertas coretan, pake kertas-kertas yang agak aneh.

Tik. Tok. Tik. Tok. Kontes dimulai!

Degol ngurus login, terus aku sama Inigo bagi-bagi soal. Kayak biasa, Degol A-D, Inigo E-H, aku I-L.

I: Paling nggak separo '1', artinya paling banyak 215 pattern. Bisa pake DP di Aho-Corasick, kudu cek ML sama banyak operasi
J: Hmm.. rada panjang, skip dulu
K: Cek ada apa nggak segitiga sehingga semua titik ada di border segitiganya. Geometri, ntar kasih ke Degol sama Inigo
L: Itung-itungan kompleksitas banget. Intinya sort string di dictionary, terus kerjain offline untuk tiap batas kiri. Cari tiap kata bisa muncul paling awal di mana. Reduce ke nyari elemen ke-k pake BIT.

Degol mulai ngoding A. Setelah rada lama.. "Yaz ini gak segampang yang gw kira". Lol, entah kenapa udah kebiasa. Inigo udah ngoding di kertas buat soal H, terus dia pake komputernya. Setelah beberapa menit, H - Hydra's Heads Accepted! Cek scoreboard, yang udah AC masih dikit banget, padahal udah > 10 menit :O

Aku terus pinjem komputernya buat ngitung banyak operasi soal I sama ML. Hmm, 50 * 215  * 30, 1 GB cukup lah ya. Aku terus ngoding soal I. Ada ngebug beberapa kali :/ Setelah lolos sample, submit. I - Insider's Identity Accepted! Yey first solve \ :v / Pada saat ini kami ada di rank 1 :O

Degol terus ngerjain soal C, sementara aku ngoret-ngoret buat soal L. Kayaknya BFS aja, tapi ngebug. Aku jadinya bantu debug-debug dulu. Lolos sample, tapi Degol gak yakin. Ternyata masih salah. Debug lagi, akhirnya bener setelah gak keputer-puter masalah baris sama kolom. Submit, C - Conquest Campaign Accepted! Kembali ke atas lagi :O

Degol sama Inigo terus diskusi soal D, sementara aku ngoding soal L. Ngodingnya rada ribet, ada beberapa bagian yang harus dibikin. Setelah lolos sample, aku cek codingan lagi. Ada bagian yang return string, tapi setelah kupikir lagi, kayaknya lebih aman balikin indeks aja. Setelah modifikasi dikit, submit, dapet Wrong Answer.

Oke, ini aneh. Aku cek lagi, kayaknya udah gak ada yang salah. Satu-satunya yang aku rada ragu cuma bagian nyari elemen ke-k nya, yang O(log N) dengan observasi macem sparse table. Karena gak ngeliat ada yang aneh lagi, aku ganti bagian itu, jadinya O(log2 N) pake binary search + query BIT-nya. Submit, WA lagi :| Mau misuhin panitia tapi orang Vietnam jago-jago :|

Pada tahap ini aku rada stres, terus ternyata ada pengumuman.

"Kalau string ke-k nya lebih dari 10 karakter, keluarin 10 karakter pertama saja"

asdfghjkl. Salah juga sih aku, baru nyadar kalo naif gitu outputnya bisa sampe 15 * 107 karakter. Setelah modifikasi, aku nyoba dikit buat yang karakternya lebih dari 10. Udah oke. Submit, nah akhirrnya verdict-nya lama. Setelah beberapa saat, L - Lazy Learner Accepted! Kembalikan 30 menitku :""

Degol bilang soal D mungkin ada pake sqrt-sqrt gitu, kalo ngeliat batas interaksinya yang aneh. Aku cari-cari soal lagi. Aku baca soal G, bikin graf dengan banyak vertex dan edge paling banyak sekian supaya banyak shortest path-nya A. Hmm, ini bukannya gampang? Terus baru nyadar kalo cara gampangnya butuh 2 * log A vertex, jebol batasan, gak jadi gampang deh :/ Soal F kayaknya lucu, cuma brutal banget: Cari F[F[F[...F[N]...]]] mod P (F sebanyak K). Ini pasti pake Pisano Period, cuma aku gak tau cara nyarinya :| Aku minta dijelasin soal E ke Inigo, ribet parah soalnya.

Pas cek scoreboard, ada tim yang udah solve soal J. Degol terus jelasin soal J (padahal harusnya aku yang baca xD). Intinya buat graf dengan N vertex dan M edge, sehingga kalo orang jalan random ke vertex yang belom pernah dikunjungi sebelumnya, bakal selalu bisa jadi hamiltonian cycle. Nah, terus kami mikirnya grafnya harusnya bentuknya 1 cycle atau complete graph. Karena gak terlalu yakin, aku coba bikin generatornya dulu. Generatornya brute force grafnya, terus di-DP bitmask untuk ngecek. Pas nyoba N = 4 sama N = 5, kami cukup yakin kalo grafnya bentuknya cuma 2 itu. Submit, dapet Wrong Answer. Lho, lupa print "YES" kalo jawabannya complete graph. Habis benerin itu, submit lagi, Wrong Answer lagi.

Welp okay. Kami lalu nyoba N = 6. Terus kaget, karena ternyata ada yang pake 9 edge doang :O Pas digambar, ternyata itu grafnya  K3,3. Jadi kalo complete bipartite graph dengan banyak node sama juga bakalan bisa. Nah, pada tahap ini kami nyoba nyari ini bisa digeneralisir apa nggak (misal jadi tripartite gitu). Jadi kami nyoba run generator lagi, tapi gak nemu apa-apa sih.

Inigo nemu observasi soal D, terus Degol bantu verifikasi. Karena gak tau mau ngapain, aku mutusin untuk YOLO soal J aja, jadi cuma pake 3 graf yang udah ditemuin tadi. Submit, wew verdict-nya lama gak keluar-keluar :O Selang beberapa saat, J - Jurassic Jungle Accepted! :O dafuk. Sekarang AC 5, kayaknya pas itu masih memimpin. Ngecekin Jateng Pride, kayaknya masih nge-stuck :""

Inigo terus ngerjain soal D, selalu pake log 109 query aja. Idenya kayak binser gitu, cuma aku gak tau ngapain. Aku coba baca soal lain sambil Inigo ngoding D sambil dicek Degol. Ada bug simple, habis dibenerin, kami coba-coba kasus kami sendiri. Hmm, pada bener. Akhirnya mutusin buat submit aja. Wrong Answer.

Aku jadinya bantuin debug. Input sama interaksinya kuubah dikit jadi macem functional kalo pas pelatnas :P Jadinya cukup masukin N sama tempat-tempat sprinkle-nya, ntar dia bakal jalanin query-nya sendiri. Never know when your experience will come handy. Pas dicoba, paling banyak butuh 30 query nanya. Sama output, artinya 31 kali interaksi. Dan kalo cek constraint, kalo N = 2 harus paling banyak 30 kali interaksi :| Kalo kata Degol constraint aneh itu buat nyembunyiin hal ini doang. Nah, kami ngeliat kalo kami masih nanya pas L = R di binsernya, padahal gak butuh. Akhirnya.. ubah dikit binsernya, supaya gak nanya pas L = R. Oke, sekarang udah 30 kali interaksi. Benerin interaksi sama input lagi, terus submit. Nah, verdict-nya lama nih. Akhirnya, D - Divide Doughnut Accepted! Kalo gak salah ada tim lain yang juga AC 6, tapi penalty dikitan kami.

Cek scoreboard, yang mungkin dikerjain soal A atau B. Kami cek soal B. Ini intinya.. ngitung nimber untuk setiap bipartite graph dengan a dan b node. Ada tim yang cepet banget solvenya, jadi kami pikir harusnya bisa lah ngerjain ini. Degol nyobain nyari winning state sama nimber manual, cuma pusing. Jadinya ya.. daripada komputernya kosong, Degol nyoba ngoding generator untuk cari pola. Aku sambil mikir yang lain. Inigo bilang K harusnya convex hull, terus gak ada jawaban kalo sisinya lebih dari 6. Oke, masuk akal. Cuma kayaknya kudu bagi banyak kasus untuk sisi <= 6.

Degol pusing ngoding generatornya, jadi kugantiin. Pair programming sih ujung-ujungnya. Agak lama, tapi akhirnya bener. Setelah kejadian aneh pake STL map, kami jadinya nggak nyimpen nimber-nya di map, jadi plain rekursi aja. Terus aku baru mikir, ini kalo pengen pemain kedua yang menang bukannya jadi Misere Nim? Kasus winning state-nya aneh dong? Mana gak nyimpen di citsit. Terus Degol kayaknya bingung. Habis itu aku baru nyadar kalo aku yang bingung. Butuhnya bukan yang gak bisa jalan yang menang (Misere Nim), tapi pemain kedua yang menang (Nim biasa, tapi nimbernya 0). Oke, semua udah lurus kembali. Nah, pas nyoba-nyoba, dapat pola

  • Kalo (a + b) ganjil, ada 2a*b-1 graf yang nimbernya 1 dan 3
  • Kalo (a + b) genap, ada 2a*b-1 graf yang nimbernya 0 dan 2
Dafuk. Aku mikir ini kayaknya bisa dibuktiin, cuma karena udah terlihat bener, yaudah deh. Nah pas mau ngoding, aku lupa matiin generatornya. Terus walaupun gak pake map, aku lupa comment barisnya, jadi sebenarnya masih bikin entri di map, walaupun gak dipake. Dan ya.. komputernya tambah lama tambah pelan. Mau nge-hang. Aku terus panik CTRL+C, terus mutusin buat angkat tangan buat manggil panitia. Pas panitia teknisnya dateng, generatornya udah berhasil di-stop. Jadinya ya kami keliatan kayak orang bego gitu, ngejelasin masalah yang udah beres, sementara panitianya keliatan bingung. Mungkin mikir "ini anak kok bisa ikut sampe sini ya".

Nah, dengan pola tadi, aku ngoding DP-nya. Lumayan simple, tapi ngebug-ngebug. Submit, wogh gak langsung keluar WA. B - Bipartite Battle Accepted!

Aku terus ke toilet. Kayaknya udah kedua atau ketiga kalinya buat hari ini. Kaget, pas masuk ada 2 mbak-mbak. Tapi karena ada toilet berdirinya.. ya gak mungkin salah toilet artinya.

Pas balik, Inigo sama Degol diskusi soal A. Aku terus nanya soalnya. Intinya dikasih grid N * M, sama 4 petak B, C, G, U. Cari shortest path B -> C -> G yang gak lewatin U, dan semua petak di B -> C -> G unik. Solusi Inigo kayak ada beberapa kasus gitu. Aku mikir-mikir dikit, terus ke toilet lagi. Pas di toilet, mikir itu soal A bukannya kayak soal di TROC 3? Pas balik, aku bilang ke Inigo. Terus baru inget kalo jalannya gak mesti kanan-bawah doang, bisa kudu muter dulu Dx

Oiya, scoreboardnya udah frozen. Kami target nambah 1-2 soal lagi, untuk amanin posisi.

Mikir-mikir lagi, baru dapet ide buat Max Flow: Modelin jadi vertex capacity, source ke petak B sama G, C ke sink. Kalo bisa ngirim 2 flow, artinya ada cara. Terlihat benar, cuma gak yakin masalah shortest pathnya. Yah, YOLO aja deh. Terus baru nyadar, harus print jawabannya, dan kami gak ada yang tau cara nyari augmenting path-nya. Tapi yaudah, sambil ngoding pasti nemu caranya. Jadinya aku ngoding A, Degol sama Inigo diskusi soal K.

Nah, pas ngoding, baru kepikiran supaya jadi shortest path kudu Min Cost Max Flow. Okelah, cuma ganti BFS jadi SPFA. Ngoding-ngoding-ngoding, jadi Min Cost Max Flow. Aku pertama-tama cek dulu bener apa nggak hasilnya, bisa ngirim 2 flow apa nggak, dan kalo bisa cost-nya berapa. Pas masukin sample.. Lho gak berhenti-berhenti. Ternyata karena lupa reset graf setiap kali ganti test case Dx

Setelah reset graf, oke hasilnya terlihat benar. Sekarang sisa cara nyari augmenting path-nya.. Aku mikir buat pake back flow-nya aja. Jadi telusurin path yang punya back flow. Wew, idenya terlihat benar. Ngoding-ngoding jorok, akhirnya beres. Cobain sample, wah sama persis. Submit, Runtime Error! WA gak papa, tapi kalo RTE kemungkinan gak nemu augmenting path-nya Dx Aku terus nyoba bikin tc simple ukuran 5 * 5, cuma keluarnya malah aneh: Ada gerakan UD, ngapain bolak-balik?

Inigo sama Degol terus ngoding soal K, sementara aku nge-print soal A. Cek lagi, terlihat benar. Lalu aku baru nyadar kenapa RTE: Ada yang harusnya ukurannya 2 * N * N (2 * 100 * 100), aku tulis 2 * N (2 * 100) doang. Ya RTE lah, kurang gede Dx Walaupun itu pasti gak benerin percobaan sebelumnya (yang UD), aku coba submit aja. Nah, akhirnya WA.

Degol sama Inigo kayaknya pusing ngerjain soal K. di 10 menit terakhir, aku minta mereka nulis di kertas dulu, sementara aku debug soal A di komputer. Aku coba cetak edge-edge yang kubuat. Anehnya, ada bikin ke (0, -1)! :O Gimana cara bisa pindah ke indeks negatif? Usut lagi, ada kesalahan konyol dari awal:

for (int i = 0 ; i < n ; i++)
    for (int j = 0 ; j < m ; j++) {
        // code lain
        for (int k = 0 ; k < 4 ; k++) {
            int ii = i + dr[k];
            int jj = j + dc[k];
            if (ii >= 0 && ii < n && j >= 0 && j < m) {
                addEdge(getOut(i, j), getIn(ii, jj), 1)
            }
        }
    }
Gak persis pas kontes, cuma kurang lebih kodenya begitu. Dan inilah kenapa, ngasih nama variabel yang rada panjang itu gak masalah daripada ngebug bego begini...

Habis itu dibenerin, nyoba sample dan tc sederhana tadi, lolos semua! Oke, submit lagi. Akhirnya, running lumayan lama :O Dan A - Amazing Adventures Accepted! :') Sejam ngoding ginian, bug bego semua.. Yah, yang penting AC sebelum kontes selesai :"D

Oh, aku hampir teriak pas AC terus mukul Degol. Very relieved, I say. Panitia di belakang kami juga kayak langsung excited gitu pas kami AC A. Antara mereka penasaran scoreboardnya jadi kayak gimana, atau excited karena ada print-print-an baru.

Inigo sama Degol terus buru-buru lanjutin K, cuma kayaknya nggak sempet. Degol bilang dia ngira 1 tc per berkas, jadinya semua taruh di main, dan pas udah ketahuan YES atau NO malah bingung cara keluar dari loopnya gimana :P Makanya tetep taruh di fungsi lain, karma nge-joke "read, prepare, work". Jadinya kami liat-liat scoreboard aja. Dan kontes berakhir!

Submisi Supir Tayo
Sumber: Pak Denny

Selesai kontes, Pak Denny dateng. Ada diskusi sekilas mengenai soal A sama K. Habis itu kami diskusi hasil, katanya Waseda nambah 2 (jadi 8), Korea nggak nambah. Artinya kami mampus kalo gak nambah A. Aku cek scoreboard lagi, kalo itunganku gak salah dan Kattis gak boong, artinya kami kemungkinan besar peringkat 1 di Hanoi :O

Aku, Degol, Ucup, Salman, Yoga terus sholat dulu. Selesai kontes ada excursion, cuma kami kayaknya ketinggalan bus. Terus Supir Tayo diajakin foto.

Sumber: Pak Denny
How I Met Your Mother
Sumber: Pak Denny
 Setelah busnya datang, kami semua cabut ke tempat excursion. Excursion-nya ke tempat kerajinan keramik. Degol, Inigo, Pak Denny nyobain bikin keramik, aku nontonin aja. Jateng Pride pergi ke market, nyari yang bisa dibeli mungkin. Oiya, yang excursion cuma tim luar negeri aja, katanya yang tim Vietnam mungkin penutupan VNC-nya. Setelah dari tempat keramik, dibawa ke semacam kafe gitu. Pesanannya lumayan lama jadi, punyaku juga terancam gak dibikin. Untungnya setelah pembicaraan "politis", punyaku dibikin juga xD Aku gak terlalu ngerti excursion ini ngapain, kayaknya gak terlalu jelas. Setelah mau maghrib, semuanya cabut lagi ke PTIT buat penutupan.

Pas penutupan, untungnya semua tamunya ngomongnya gak panjang lebar, mungkin paham kalo semua orang udah capek xD Oiya, ada penampilan nyanyi lagu Vietnam, bareng sama video bola Vietnam lawan negara lain. Pas gol semua tepuk tangan xD Terus disetel juga video pas lomba. Btw, di acara ini ada 2 MC, satu bahasa Vietnam, satunya lagi bahasa Inggris. Yang Vietnam ngomong duluan. Terus kalo diminta tepuk tangan ya.. kita yang gak ngerti bahasa Vietnam bingung kenapa orang-orang pada tepuk tangan, setelah MC bahasa Inggris baru ngeh kenapa pada tepuk tangan.

Sudah dibenerin, lol
Akhirnya, pengumuman juara! Awalnya udah gak minat karena pake google slides, tapi ternyata ujung-ujungnya pake resolver. Panitianya gak kuat nge-rap kayak Irvin :") Tapi hasil resolver ini juga lumayan bosenin, secara cuma ada 2 soal bonus (C sama H), sisanya rada brutal semua. Sampe akhirnya sisa top 12. Udah tahu kalo kemungkinan besar peringkat 1, dan ya.. di resolver sisa 1 pending run, A Supir Tayo. Dan Accepted, membawa kami ke peringkat 1 :")

Pas pembagian medali emas, aku udah siap-siap maju, tapi ternyata 2-4 dulu. Baru Champion disuruh maju. Pas maju, bapak-bapaknya bawa piala terus nanya, "who is the leader here?". Semua nunjuk aku :' Terus aku nerima piala, bapak-bapak tadi lalu nyuruh angkat pialanya. Well, this feels weird. Nggak biasa, aneh banget. Malah takut gak sengaja jatuhin pialanya.

Sumber: Pak Denny
Setelah itu lanjut penutupan, ada diminta interview dulu. Aku udah ngasal sih ngomongnya. Terus lanjut ke Gala Dinner. Kayak di Indonesia lah.. liar kalo ada makanan banyak dan gratis. Aku udah rada males, terus Rapel ngajak ke KFC. Jadinya Aku sama Degol (kami berdua ngutang ke Inigo supaya bisa beli KFC) dan teman-teman Binus jalan ke KFC buat makan. Setelah makan, balik lagi ke PTIT, untuk pulang ke hotel.

Day 3 - Kepulangan

Besoknya kami pulang tanpa Pak Denny sama Linus, karena memang Pak Denny sama Linus stay beberapa hari lagi. Untungnya sih gak ada masalah selama perjalanan pulang xD Sampai di Indo tengah malam, sampe kosan sekitar jam 2 pagi. Teringat harus nyuci di pagi hari, akhirnya tidur.

Aftermath

Bener-bener gak ngira kalo hasilnya kayak begini. Kinda glad that I decided to compete in ICPC again this year. Kalo kata Pak Denny, ini pertama kalinya UI menang di Regional. Nama kami artinya bakal ada di sejarah :P Oiya, ini juga berarti UI bakal lolos ke WF 2019 di Porto, Portugal. Welp, artinya kudu latian lagi.

Terima kasih untuk panitia yang sudah menyelenggarakan lomba yang bagus. Mungkin kebanyakan konstruktif sih tapi :''' Secara pribadi tertarik ngerjain F sama G, mungkin nanti kapan-kapan nyobain G. I just spent the entire day trying to solve F ;_; Thankfully now I got AC :'D Update: Solved G as well, now I feel stupid for not thinking this problem thoroughly during the contest :|

Buat WF 2019, semoga seenggaknya UI hasilnya bisa lebih bagus dari sebelumnya (sejauh ini joint-34, pas 2017). Semoga tahun depan juga dari UI bisa lolos ke WF lagi, biar Pak Denny 5 kali bawa tim UI ke WF, hehe.

2 komentar:

  1. Congrats ya Ayaz!

    Btw, itu yang #include itu untuk tiap kali compile? apa cuma compile pertama kali doank?

    Compile time ini cuma ngaruh ke local compile doank kan ya? pas disubmit, compile time nya itu gak dihitung sama juri kan?

    BalasHapus
    Balasan
    1. Thanks! :D

      Seingatku tiap kali compile, nyoba beberapa kali soalnya.

      Yup, local compile aja. Di Kattis harusnya gak ngitung compile time.

      Hapus