Jumat, 09 Agustus 2013

Menuju OSN 2013

OSN 2013 jatuh pada bulan September, kurang dari sebulan sejak tulisan ini dibuat. Suasana kompetisi semakin terlihat, mulai dari aktifnya para peserta OSN komputer dalam mengerjakan PJJ, bergeraknya supervisor dalam membantu mereka, sampai para petinggi TOKI yang mempersiapkan OSN di Bandung mendatang. Terdapat banyak perbedaan dari suasana OSN zaman saya, oleh karena itu melalui tulisan ini saya ingin berbagi beberapa pandangan yang mungkin dapat membantu memahami kompetitor anda. Tentunya, ini semua hanya pemikiran saya yang didasari dengan pengalaman dan pengamatan selama menjadi orang TOKI.

Semakin banyaknya pengguna C/C++

Berhubung saya bertugas sebagai supervisor PJJ pra OSN 2013, sedikit banyak bisa melihat aktivitas pengerjaan PJJ para peserta. Terlihat bahwa banyak peserta yang menggunakan bahasa C++. Cukup mengejutkan, karena pada OSN 2009 hanya ada 1 orang (dari 110) yang menggunakan C++.

Lalu apakah ada keuntungan bagi pengguna C++? Jelas ada, tetapi harus saya tekankan bahwa itu tidak signifikan. Coba simak uraian berikut:
  • Terdapat STL (Standart Template Library), yang memudahkan dalam melakukan aktivitas umum seperti pengurutan, struktur data stack, queue, dan sebagainya. Bila dipikir lebih lanjut, sebenarnya keunggulannya hanya ada di STL algorithm dan vector. Untuk Pascal, membuat stack atau queue sama sekali tidak sulit. Begitu juga dengan membuat prosedur swap, FPB, dan sebagainya. Paling-paling anda hanya perlu mengetikkan quicksort ketika diperlukan, dan sebenarnya hanya butuh waktu 1-2 menit (dapat juga copy paste bila sebelumnya sudah pernah anda buat).
  • Memiliki string yang lebih fleksibel untuk digunakan. Mereka dapat memuat lebih dari 255 karakter tanpa masalah, dan memiliki banyak fungsi seperti find, tokenizer, dan sebagainya. Sebenarnya di Pascal anda juga memilki ANSIstring, atau membuat sendiri array of char. Kalau boleh jujur, seumur-umur fungsi string di C++ yang sering saya gunakan hanya strlen, atau .size() untuk mengetahui panjang string tersebut. Untuk aktivitas seperti find, replace, remove, biasanya saya buat sendiri dengan fungsi. Jadi tidak beda jauh dengan pengguna Pascal.
  • Rutinitas IO yang lebih hebat, dapat membaca masukan dengan berbagai format dengan scanf. Yap, memang benar, tetapi anda harus ingat bahwa ini adalah OSN, bukan ACM ICPC zaman 1990an yang format masukannya "kurang" ramah. Saya percaya, pembuat tidak akan merepotkan dirinya membuat format masukan yang rumit dan menyulitkan peserta. Olimpiade ini bertujuan untuk menguji analisis, bukan jago-jago menghafal sintaks fungsi hanya untuk membaca masukan.
  • Pengetikkan kode yang cenderung lebih singkat. Sebuah frase "begin" ditulis hanya dengan "{", dapat menggunakan macro sehingga for (int i = 1; i < n ; i++) dapat disingkat hanya menjadi REP(i,n) saja, dan berbagai macam trik menghemat pengetikkan kode. Sebenarnya ini juga tidak membuat pengguna Pascal serasa dibalap oleh cheetah. OSN bukan ICPC, bukan SRM, dan bukan Codeforces. Secepat apa pengumpulan kode anda tidak menjadi perhitungan. Lagipula, selisihnya seharusnya tidak terlalu signifikan.
Lalu apa gunanya belajar C++? Itu akan bermanfaat ketika anda sudah masuk ke Pelatnas TOKI, dimana anda mulai perlu library seperti heap (priority_queue), BBST (set, map), atau yang lainnya. Jadi penggunaan C++ untuk OSN menurut pribadi saya hanyalah bentuk preferensi, dan anda sangat dibebaskan ingin menggunakan yang mana. Jika anda memang senang belajar bahasa lain, silakan dicoba. Sementara bila anda masih menggunakan Pascal, itu sama sekali tidak menurunkan kualitas anda. Jadi, jangan merasa kecil hanya karena melihat kompetitor lain sudah menggunakan C++. Ingat, Gennady Korotkevich sang legenda IOI juga merupakan pengguna Pascal sejati ;)

Meningkatnya penggunaan "kata-kata keren" dalam diskusi PJJ

Yang saya maksud dengan kata-kata keren adalah: DP, greedy, sliding window, flying table, dan lain-lain yang terdengar keren. Bagi competitive programmer yang sudah berpengalaman, tentu saja tidak asing dengan istilah tersebut. Namun bagi pemula, biasanya akan merinding mendengarnya. Termasuk salah satunya saya, ketika zaman 2009 tidak tahu apa itu DP/greedy dan cenderung minder ketika mendengar peserta lainnya mulai membicarakannya.

Sebenarnya, anda tidak perlu khawatir dengan istilah-istilah tersebut. Jangan biarkan mereka mengintimidasi anda, membuat anda berpikir seolah-olah istilah tersebut adalah teknik yang luar biasa sulitnya dan hanya ksatria berbaju zirah yang mampu mempelajarinya. Tidak. Bila anda membaca postingan saya tentang OSN 2009, secara ajaib saya menerapkan algoritma greedy ketika mengerjakan soal sepatu bebek. Akhirnya saya menyadari, bahwa istilah keren itu hanya sebuah sebutan untuk cara berpikir. Bahkan, ternyata seseorang yang tidak pernah mempelajarinya pun dapat mengaplikasikannya.

Mengetahui teknik-teknik seperti itu memang dapat membantu anda dalam menghadapi OSN, dan saya mengakui akan sangat berguna. Yang ingin saya tekankan, itu hanyalah cara berpikir/teknik. Seringkali saya menyaksikan pemula yang pemikirannya terkotak-kotak, kurang kreatif, dan cenderung menghafal hanya dengan mendengarnya mengatakan "aduh ini di DP apanya ya? Atau di greedy?" sesaat setelah membaca soal. Menurut saya, pemikiran soal itu perlu diselesaikan secara DP atau greedy harusnya berasal dari analisa, bukan dari "ah kayaknya ini di DP, apa jangan-jangan di greedy?". Anda sendiri dapat belajar cara berpikir/teknik tersebut, tanpa perlu merasa minder. Ingat bahwa setiap orang perlu proses belajar untuk mengetahui suatu hal yang belum dia ketahui sebelumnya.

PJJ yang lebih panjang

Yang lebih panjang adalah banyaknya bab, bukan durasinya. Sejauh yang saya lihat, ada 8 bab yang perlu dikerjakan. Beberapa peserta ada yang sudah mengerjakan lebih dulu sebelum OSN dilaksanakan, dan ada juga yang baru mulai mengerjakan. Mungkin bagi mereka yang masih baru akan bingung ketika seseorang bertanya tentang soal yang belum anda kerjakan, dan diduga berasal dari bab yang jauh (misalnya bab 7).

"aduh itu orang jago amat ya? Udah jauh, soalnya susah lagi. Gawat nih masih di bab awal-awal..."

Tidak apa-apa, pikiran seperti itu mungkin wajar bila muncul di benak anda. Lalu apa yang harus anda lakukan? Jadikan motivasi dan lanjutkan perjalanan anda! PJJ bertujuan untuk membantu membiasakan diri dan membuat anda berkembang. Jadi yang perlu anda lakukan adalah terus berkembang. Ingat bahwa nasib anda di OSN sebagian besar ditentukan oleh anda sendiri.

Tingkat kesulitan yang meningkat drastis

Setelah melihat soal-soal OSN 2012, saya kaget. Tingkat kesulitannya meningkat drastis dan rumornya, setara dengan soal-soal IOI.

Memang yang akan anda hadapi sulit, tetapi semua peserta juga akan menghadapi persoalan yang sama. Oleh karena itu ketika kalian semua dihadapkan pada soal-soal yang sulit, selebihnya tinggal bagaimana reaksi dan apa yang anda lakukan. Mereka yang mampu mengatasi stress, kepanikan, dan tetap tenang yang akhirnya dapat menduduki peringkat atas.

******

Sepertinya itu saja yang ingin saya sampaikan pada kesempatan ini. Tetap semangat dan berjuang untuk OSN 2013!

8 komentar :

  1. Thankyou ko postnya, bgs banget, jadi pny gambaran tentang OSN itu bagaimana sih.
    oh ya, menurut ko william, Competitive Programming/ Programming dalam Olimpiade ini perlu 'talent' ngga? Apa aja sih menurut koko yg penting buat bisa ke OSN? Apakah bakat? Apakah IQ? Atau kah kerja keras? Terimakasih :)

    BalasHapus
    Balasan
    1. Iya terima kasih udah berkunjung.

      Kalau menurut saya, semua faktor itu jelas mempengaruhi. Entah itu bakat, IQ, kerja keras, atau bahkan "keberuntungan". Semua itu tergantung bagaimana kitanya merancang diri dan bekerja keras supaya kita mampu bersaing di ranah OSN.

      Contohnya nih, walaupun seseorang memiliki bakat yang luar biasa, tanpa kerja keras untuk berlatih, saya rasa kemampuannya tidak lebih daripada seseorang yang biasa-biasa saja tetapi sangat rajin berlatih. Memang adanya bakat, IQ, atau keberuntungan bisa jadi nilai tambah, tetapi menurut saya tetap harus ada kerja kerasnya.

      Hapus
    2. boleh tau ngga kerja keras koko dalam persiapan menjelang OSK, OSP, dan OSN? Terimakasihko :)

      Hapus
    3. Bisa coba baca tulisan yang ini ya: http://kupaskode.blogspot.com/2013/07/kisah-perjalanan-di-toki-saya-osk-dan.html

      Hapus
  2. Ko tanya nih, flying table itu apa ya, aku google-google kok ga nemu ya? apakah flying table itu sparse table?

    BalasHapus
    Balasan
    1. Bukan, flying table itu optimisasi memori. Bisa diterapkan ke beberapa algoritma DP. Nama lainnya "rolling array".

      Bisa baca penjelasannya di https://toki.id/buku-pemrograman-kompetitif-dasar/ bagian bab "Dynamic Programming", subbab "Contoh-contoh DP Sederhana", subsubbab "Knapsack", bagian "Optimisasi Memori pada Bottom-Up"

      Hapus
  3. kak mau tanyak, biasanya sekarang kalau OSN gitu pakainya pascal atau C++ kak ?

    terima kasih ^.^

    BalasHapus
    Balasan
    1. Sekarang masih boleh pake dua-duanya. Tapi suatu saat nanti Pascal bakal dihapus karena di IOI sudah tidak didukung

      Hapus