Senin, 09 November 2015

Indonesia National Contest 2015

Halo semua! *terus bingung mau nulis apa

Anyway, saya mau nulis tentang INC 2015 yang saya ikuti bersama tim Terharu :') beberapa waktu yang lalu. Oiya, buat yang belum tau, Terharu :') membernya Saya, Agus, dan Anthony. Tim ini lumayan ribut kalo kontes, tapi jadinya enak karena kami jadi gak terlalu tegang pas kontes :v

Pada saat trial session, saya tidak bisa ikut karena sedang mengikuti SIWAK NG di puncak. Tanya Anthony Agus sih, intinya gak ada C++11 :'( dan kami gak bisa klarifikasi :'( Malam itu saya cabut dari SIWAK NG secara dini, dan tepar pas sampe kost.

Besoknya, saya bareng Anthony ke Fasilkomnya. Di tengah jalan, kami ngobrol beberapa hal yang kurang penting, sampai nge-joke kalo Agus bakal telat. Sialnya, Agus malah sampe lebih dulu dari kami.

Terus kami ke lab, pilih tempat agak belakang yang ternyata deket sama NyongeCP, habis itu nyiapin workspace. Nyiapin workspacenya simple sih, keluarin pulpen, coretan, sama cheatsheet copasan :') sampe 2 biji dan persis pula :')

Kontes dimulai! Sebelumnya, kesepakatan yang baca A-C Anthony, D-G saya, dan H-K Agus. Karena Anthony ngetiknya cepet, kami posisikan dia di tempat coding dulu. Saya nyeleneh, dan baca soal A dulu. Soal bonus, langsung saya diktein solusinya ke Anthony. Submit, terus nunggu lama gak kejudge-kejudge, dan A - Remedial Test Accepted!

Setelah itu, Agus bilang dia mau ngerjain K. Sementara itu, saya baca bagian saya dulu

D panjang, males ah bacanya
E ... oh toposort terus LIS
F ... ah n 14, paling nanti ujung-ujungnya dp bitmask atau profile
G panjang, males ah bacanya

Terus baru nyadar, saya gak mungkin langsung ngoding.

Kemudian saya sama Anthony baca soal B. Intinya disuruh ngeparse doang. Kami sepakat "kerjaannya Agus". Beberapa menit kemudian, K - Going Home Accepted! Kemudian, saya bilangin soal B ke Agus, lalu dia mulai ngoding. Saya dan Anthony lalu diskusi soal I, dan ternyata ad hoc simple. Karena Agus bilang dia mungkin bakal lama, jadinya saya kerjain soal I dulu. Sempet ngebug dulu, submit, lalu I - Hackbook Password Accepted!

Sementara saya kerjain soal I, Agus baca soal J dan ternyata mudah. Dia lalu coding, tapi ngebug, tc sample salah. Saya baca sambil nyoba debug, dan ada line ajaib :

for(int j = i + 1 ; i <= n ; i++)

Spontan saya langsung nunjuk-nunjuk layar! Habis itu, begonya yang dibenerin cuma incrementnya, pengecekan kondisinya nggak. Beberapa menit kami lalui bengong kenapa ini gak berhenti-berhenti. Akhirnya dibenerin, terus submit. Habis itu, Agus kerjain soal B. Anthony ngeliat scoreboard, terus lapor kalo J gak AC. J kami WA. Bingung, akhirnya saya baca soal, terus baca

"...which form a perfect square"

Baru nyadar kalo kami ngitungin rectangle bukannya square :'( Tambahin sedikit pengecekan, submit, dan J - Counting Square Stars AC! Setelah itu saya dan Agus lanjut ngerjain B, dan entah kenapa nemu error gak jelas :' Yang ditelusuri, ternyata gara-gara ada fungsi yang returnnya string tapi niatnya dibikin void. Setelah diubah, submit, dan B - Ticket Itinerary AC!

Setelah itu, Anthony buru-buru ngoding soal D. Meanwhile, saya coba bikin sketsa kasar solusi soal E dan coba bikin soal C. Gak lama kemudian, D - Rapid Transit AC! (Saya tidak tahu solusi D, kalo gak salah BFS). Habis itu saya ngoding soal E. Pas coding, entah kenapa toposort saya ngebug terus --". Sambil saya kerjain, Agus dan Anthony diskusi soal G. Setelah selesai, saya submit soal E, dan :

Wrong Answer.

Nemu yang kayaknya bikin salah, submit lagi

Wrong Answer.

Pada tahap ini saya sudah melototin monitor. Karena Agus dan Anthony bilang sudah dapet soal G, yasudah, ada hal yang harus direlakan. Akhirnya saya mencoba membuat soal C. Langsung saja G - Communication Problems AC!

Untuk soal H, kebetulan beberapa hari yang lalu Agus habis ngerjain SPOJ - K - Query Online, yang cukup mirip dengan soal ini. Waktu Agus setengah jalan ngerjain soal H, saya dapet lemma (atau apa itu namanya) untuk soal C : f(x) sama dengan banyak faktor ganjil dari x. Di tengah-tengah Agus coding, saya mencoba meyakinkan untuk tukaran coding, karena ingin verify lemma itu. Ternyata benar! Karena itu, untuk mengerjakan soalnya jadi mudah. Setelah coding beberapa menit, soal C - Simple Arithmetic Progression AC!

Agus lanjut coding H, sementara saya dan Anthony diskusi soal F. Pada saat diskusi, ujung-ujungnya kami dapat DP bitmask yang statenya bakal meledak-ledak. At least ada kabar baik, soal H - Rank Query mendapat AC! Kalau gak salah habis itu kami leading di scoreboard.

Karena gatel soal E, saya kembali ngedebug soal E. Agus dan Anthony diskusi soal F. Saya akhirnya mulai hilang akal dan semi ngebom server, yaitu nambahin assert-assert, edit-edit codingan dan lain-lain. Tapi semuanya kena WA. Pada tahap ini saya mulai hilang akal dan misuhin problemsetter.

Sambil ngedebug, saya juga diskusi dengan Agus dan Anthony tentang soal F. Intinya mereka dapat satu observasi yang cukup trivial : tiap sel akan memiliki tepat satu indegree dan satu outdegree. Awalnya saya bilang "Itu mah gw juga tau". Terus beberapa saat kemudian tiba-tiba saya kepikiran sesuatu : Matching! Saya lalu describe apa yang saya pikirkan ke mereka, dan akhirnya mereka setuju kalau bisa diselesaikan pakai Min-cost Max-flow. 

Saya lalu coding Min-cost Max-flow yang biasa saya bikin. Entah ini kebetulan juga atau tidak, beberapa minggu yang lalu saya tidak sengaja mengerjakan beberapa soal Max-flow sampai seakan-akan jari saya hapal codingannya :') Walaupun begitu saya ngodingnya masih cukup lama. Habis itu saya submit, dan dapat WA, saya shock karena :

1.Solusinya Wrong Answer
2.Judgingnya lebih cepet F daripada E

Akhirnya saya buru-buru baca codingan lagi, namun tidak menemukan apa-apa. Saya lalu baca soal dan menyadari :

"Output -1 for Y, if it's not possible to do so."


Kontan saya teriak "Loh bisa -1?". Untungnya code saya cuma perlu diedit sedikit untuk menghasilkan output begitu :') Akhirnya F - Pointers AC!


Akhirnya kami kembali ke soal E. Pengen klarifikasi tapi gak bisa buka tab klarifikasi. Kami sudah coding ulang, ubah cara dan lain-lain, WA semua. Sampai - sampai semuanya sudah misuh

"Ini pasti jurinya salah"
"Gw yakin ini jurinya bodoh"
"Jurinya lagi jadi panda"

note : mohon maaf kami sampai seperti ini :'(

Menjelang kontes berakhir, tau-tau Rakina bilang "Eh soal E mau direjudge". Terus tim kami bingung, darimana dia tau. Ternyata timnya bisa klarifikasi. Kami bengong. Nanya tim lain, semua pada bisa buka klarifikasi.


Setelah beberapa saat,  kami suspect kalau kami tidak bisa buka klarifikasi karena ' pada nama tim kami. Sial ;_;

Akhirnya kami harap-harap cemas sambil nunggu E kami direjudge. Setelah cukup lama, E kami direjudge, dan ternyata E - Matryoshka Dolls AC pada submission pertama kami!

Final Scoreboard


Dengan begini, secara hoki kami menang di INC 2015 :') Ada beberapa hal baru yang saya dapatkan :

1. Tukar-tukar kursi buat ngoding dan mikir ngerepotin
2. Jangan sampe cukup stres sampai misuhin juri
3. Kadang observasi trivial perlu dikatakan untuk dapet solusi

Jadi sekian dulu cerita saya, semoga bisa sempat untuk nulis ICPC Regional Jakarta 2015 :')

3 komentar:

  1. yeee, yang lama ditunggu-tunggu akhirnya keluar juga :D
    semangat untuk icpc singaporenya ya kakak :)

    BalasHapus