Tim Olimpiade Komputer Indonesia
alam suasana kemeriahan peringatan Hari Kemerdekaan RI yang ke 71, Tim Olimpia- de Komputer Indonesia 2016 berhasil mempersembahkan em- pat medali perunggu dalam ajang International Olympiad in Informat- ics (IOI) ke-28 yang diselenggarakan di Kazan, Rusia pada tanggal 12 – 19 Agustus 2016. Mereka adalah :
- Kwee Lung Sin, SMA Karangturi Semarang
- Muhammad Yusuf Sholeh, SMA Al Irsyad Pur- wokerto
- Sergio Vieri, SMA Intan Permata Hati Sura- baya
- Stacia Edina Johanna, SMA Petra 3 Surabaya Dalam dua hari pertandingan yang dilakukan, Kwee Lung Sin berhasil mengumpulkan total nilai 306 (dari maksimal 600) dan menempati peringkat ke-93 dari 308 peserta, disusul oleh Stacia dengan nilai 289 yang menempati pering- kat ke-114. Yusuf Sholeh berada di bawah Stacia, yaitu pada peringkat 139 dengan nilai 256. Se- dangkan Sergio Vieri berada di posisi 141 dengan nilai total perolehan 251. Prestasi ini mengulang perolehan pada IOI ke 26 di Taiwan tahun 2014 lalu.
IOI ke-28 ini diikuti oleh 308 peserta dari 88 ne- gara. Nilai tertinggi dalam kompetisi ini diraih oleh Ce Jin dari China yang meraih nilai 597 hasil dari dua hari pertandingan. Berbeda den- gan tahun sebelumnya dimana absolute winner berhasil meraih nilai sempurna 600, hal ini men- unjukkan bahwa soal yang diberikan dalam IOI 2016 kali ini memang lebih sulit. China berhasil keluar sebagai juara umum dengan memper- oleh 4 medali Emas, sedangkan Rusia sebagai tuan rumah berhasil meraih 3 medali Emas dan 1 medali Perak.
Dibanding dengan negara-negara Asia Tenggara seperti Malaysia dan Philipina (1 Perunggu), Indo- nesia masih memimpin dalam IOI 2016 kali ini, namun posisi tim Indonesia berada di belakang Singapura (1 Emas, 2 Perak dan 1 perunggu) dan Thailand (1 Perak dan 3 Perunggu). Oleh karena itu, usaha keras masih harus terus dilakukan agar perolehan medali emas di dalam IOI dapat ter- wujud pada tahun-tahun berikutnya.
Secara umum, penyelenggaraan IOI 2016 di Ka- zan, Rusia ini berjalan dengan baik dan lancar. Disamping acara utama IOI 2016, pada IOI kali ini diselenggarakan The 10th IOI Conference ber- samaan dengan pelaksanaan IOI, dimana Tim Indonesia mempresentasikan dua paper den- gan judul: (1) Reshaping Indonesian Students’ Training for IOI (Inggriani Liem), dan (2) Under- standing an Unsolvable Problem (Jonathan Irvin Gunawan). Presentasi tersebut mendapat apre- siasi cukup positif dari negara-negara peserta lainnya, dengan harapan dari panitia agar Indo- nesia terus menulis pa- per untuk dipresentasi- kan pada IOI selanjutnya.
EMPAT PERUNGGU DARI KAZAN, RUSSIA Juli 2017
D
01
2 Peserta tiba di Pekanbaru, Check in Hotel Grand Elite
KONTRIBUTOR TOKINEWS 2017
DAFTAR ISI
Logo baru OSN ini adalah logo karya Adhitya Dharmawan S yang berhasil memenangkan sayembara desain logo baru OSN yang di- selenggarakan oleh Kemdibud pada April 2017 lalu. (Shella Rafiqah Ully, Xpresi)
Logo OSN baru adalah gambar berbentuk rubik tiga sisi yang ma- sing-masing sisinya bertuliskan huruf O, S dan N. Masing-masing sisi memiliki warna berbeda sesuai jenjang yakni merah untuk sekolah dasar, biru untuk sekolah menengah pertama dan abu-abu untuk sekolah menengah atas. Logo ini menggantikan logo lama yang ber- bentuk tubuh seseorang sedang mengangkat tangan dengan ben- dera Indonesia di bagian kepala.
2016 di Palembang oleh menteri Pendidikan dan Kebudayaan saat itu Anies Baswedan.
ogo baru OSN yang digunakan mulai OSN 2017 ini telah diresmi- kan pada penutupan OSN
Dewi Yuliani Veni Johanna
8 Peserta kembali ke daerah masing-masing
7 Upacara Penutupan dan Pembagian Medali
6 Wisata Pekanbaru dan sekitarnya Pendidikan Karakter
5 Lomba Hari 2 Gathering TOKI Kampus Politeknik Caltex Riau
4 Lomba Hari 1, Kampus Politeknik Caltex Riau
3 Upacara Pembukaan, Penjelasan Peserta + Sesi Latihan, Kampus Politeknik Caltex Riau
Fauzan Joko Inggriani Liem Yugo Isal Jonathan Irvin Anthony Ng Maximilianus Yonas Adiel Arianto Wibowo Ammar Fathin
03
Pembahasan OSP 2017 (Pemrograman) Hall of Fame TOKI 2017
Pembahasan OSP 2017 (Algoritma) Pembahasan OSN 2017 (Belanja Suvenir)
Agenda OSN 2017 Daftar Isi Menuju IOI 2017 Tehran, Iran Bebras Indonesia Style Lomba Pemrograman
Computational Thinking Dari OSN Ke Google
20 Agenda Kegiatan OSN 2017 Empat Perunggu dari Russia Selamat Datang di Pekanbaru
16
12
08
04
02
19
14
10
06
Tim Olimpiade Komputer Indonesia www.toki.or.id * [email protected]
Selamat datang di OSN 2017 Selamat datang di Pekanbaru, Riau
iau salah satu propinsi di Kota Pekanbaru adalah ibu kota dan kota terbesar di Indonesia yang terletak provinsi Riau, Indonesia. Kota ini merupakan salah satu di bagian tengah pulau sentra ekonomi terbesar di bagian timur Pulau Su-
R
Sumatera. Provinsi ini terletak matera, dan termasuk sebagai kota dengan di bagian tengah pantai timur tingkat pertumbuhan, migrasi dan urban- Pulau Sumatera, yaitu di sepan- isasi yang tinggi. Kota ini berawal dari se- jang pesisir Selat Melaka. Riau buah pasar (pekan) yang didirikan oleh saat ini merupakan salah satu para pedagang Minangkabau di tepi provinsi terkaya di Indonesia, Sungai Siak. Kota Pekanbaru tumbuh dan sumber dayanya didominasi pesat dengan berkembangnya indus- oleh sumber alam, terutama mi- tri terutama yang berkaitan dengan nyak bumi, gas alam, karet dan kelapa minyak bumi, serta pelaksanaan oto- sawit. nomi daerah.
M e s k i p u n jenis dapat dinikmati di sini, Untuk tahun 2017 ini kegiatan terkenal se- mulai dari wisata alam, wisata lomba OSN bidang Komputer/ bagai kota religi, wisata budaya dan juga Informatika akan dilaksanakan bisnis, akan tidak lupa wisata kuliner. di Kampus Politeknik Caltex tetapi Pe- Riau (PCR) yang berada di ka-
Di bidang pendidikan, Riau k a n b a r u wasan Rumbai, Pekan- juga tergolong cukup maju, juga memi- baru. banyak siswa-siswa asal Riau liki tempat yang memiliki prestasi baik di wisata yang dalam olimpiade sains, baik terkenal dan tingkat na- populer di kalan- s i o n a l gan para wisata- m a u p u n wan. Di Pekan- I n t e r n a - baru sendiri juga sional. OSN sangat kental 2017 ini dengan Bu- m e r u p a - daya Melayunya, kan OSN ke
S e l a m a t maka jangan dua yang
Bertanding, heran jika Anda dilaksana-
Jadilah yang m e n g u n j u n g i kan di Pe-
Terbaik … ! kota yang satu k a n b a r u , ini Anda akan dapat melihat sebelumnya Pekanbaru pernah para wanitanya menggunakan menjadi tuan rumah pelaksan- baju kurung. Berbagai wisata aan OSN ke 3 tahun 2004 lalu.
TOKI 2017 BERSIAP MENUJU TEHRAN, IRAN oleh Fauzan Joko, Pembina TOKI
im Olimpiade Komputer Indonesia 2017 Perjalan ke empat anggota tim tidaklah mudah, yang terdiri dari : (1) Sergio Vieri, (2) Kwee mulai dari tingkat sekolah, kabupaten/kota, ting- Lung Sin, (3) Steven Wijaya dan (4) Yehezkiel kat propinsi dan juga tingkat Nasional dalam
T
Reymond saat ini sedang mengikuti persiapan ajang Olimpiade Sains Nasional 206 lalu. Olim- akhir untuk bertanding di ajang International piade Sains Nasional 2016 dilaksanakan di kota Olympiad in Informatics ke 29 tahun 2019 di Teh- Palembang, Sumatra Selatan. Untuk bidang ran, Iran. 28 Juli s.d. 4 Agustus 2017. Informatika/Komputer lomba dilaksanakan di
Kampus MDP Palembang dan diikuti oleh 87 pe- Tim Olimpiade Komputer Indonesia 2017 meru- serta dari 34 propinsi di Indonesia. Tiga puluh pe- pakan sebuah tim yang dihasilkan melalui proses serta yang mendapatkan medali dalam ajang ini panjang dan bertahap. Banyak waktu, tenaga
(5 medali emas, 10 medali perak dan 15 medali dan pikiran yang telah dicurahkan, tidak hanya perunggu) berhak mengikuti rangkaian pelati- dari peserta, namun juga para pembina, asisten, han dan seleksi lebih lanjut. alumni TOKI dan juga dari pihak Kementerian Pendidikan dan Kebudayaan. stress management peserta apabila dihadapkan dengan kompetisi yang cukup besar seperti IOI.
Selain kegiatan yang bersifat memperkaya ma- teri, kegiatan Pelatnas juga mengajak peserta untuk bersenang-senang serta berekreasi di Floating Market, Lembang dan Paris Van Java, Bandung. Selain itu, juga terdapat sesi sharing bersama Ikatan Alumni Tim Olimpiade Komput- er Indonesia (IA-TOKI) di Wisma TOKI.
Pembinaan Tahap 1.
Pelatnas 1 TOKI 2017 yang dilaksanakan di In- situt Teknologi Bandung pada tanggal 26 Sep- tember sampai dengan 19 Oktober 2017 ini telah berlangsung dengan lancar tanpa ada kendala. Selama kegiatan Pelatnas, kepada peserta diberikan materi-materi (ilmu baru) dan diwajibkan mengerjakan soal-soal latihan yang sudah disiapkan oleh Scientific Commit- tee setiap harinya. Selain sesi latihan, terdapat pula Repeating yang dilaksanakan tiap akhir minggu, kontes Speed Practices yang menga-
Pembinaan Tahap 2
sah kemampuan berpikir cepat untuk menyele- saikan problem, dan juga Kuis dan Simulasi yang Kegiatan Pelatnas tahap 2 Tim Olimpiade Kom- dilakukan untuk mengukur kemampuan yang puter Indonesia (TOKI) 2017 dilaksanakan pada dimiliki peserta dan serta melatih kemampuan Kamis, 15 Februari 2017 hingga Sabtu, 11 Maret
2017 di Teknik Informatika Institut,Teknologi Sepuluh Nopember Surabaya. Kegia- tan ini berlangsung selama tiga minggu dengan berba- gai agenda kegiatan.
Kegiatan latihan dilakukan setiap hari dengan jadwal pagi pengerjaan soal oleh peserta secara mandiri dan pada siang hari dilakukan pembahasan soal-soal ber- sama asisten. Sepanjang rangkaian keg- iatan, para peserta juga mengikuti kuis minggu- an dan berbagai macam kontes, seperti : TOKI Open Contest 2017 dan Croatian
Materi yang diberikan antara lain Teknik Penyele- Open Competition in Informatics sebagai kegia- saian soal tingkat lanjut, ketrampilan implemen- tan latihan.Diakhir masa pembinaan dilakukan tasi program, simulasi penyelesaian soal dan soft kuias akhir dan simulasi yang merupakan ta- skill dan motivation training. Di akhir pelaksan- hap akhir pembinaan. Hasil evaluasi akan men- aan pelatnas dilakukan simulasi dan seleksi un- jadi point penting untuk menentukan siapa saja tuk menentukan 4 siswa terbaik untuk mewakili yang berhak untuk lolos ke Pelatnas Tahap 3.
Indonesia di IOI 2017.
Pembinaan Tahap 4
Empat peserta yang lolos dari pembinaan tahap 4 ini selan- jutnya akan mewakili tim Indo- nesia dalam ajang International Olympiad in Informatics ke 29 tahun 2017 yang akan dilaksana- kan di Tehran, Iran. Namun sebe- lumnya para siswa akan mengi- kuti pembinaan tahap akhir di Fakultas Ilmu Komputer, Univer- sitas Indonesia selama kurang lebih 2 minggu dengan lebih menekankan kepada latihan soal, diskusi dan simulasi soal- soal IOI.
Kita doakan bersama semoga se- mua jerih payah dan usaha yang telah di¬lakukan ini terbayar
Pembinaan Tahap 3
dengan prestasi terbaik untuk mengharumkan Pelatnas 3 dilaksanakan selama 25 hari mulai nama bangsa Indo¬nesia di dunia Internasional. dari tanggal 19 April s.d. 13 Mei 2017 di Kampus Departemen Ilmu Komputer, FMIPA, Institut Pertanian Bogor. Kegiatan utama selama pelat- nas adalah Pengajaran di Keals, Latihan Praktek, Latihan mandiri, kuis, simulasi, pembahasan soal dan kegiatan non teknis untuk tujuan kebersa- maan dan semangat para peserta.
Computational Thinking oleh Inggriani Liem, Pembina TOKI
emampuan berpikir kreatif, kritis dan komuni- kasi serta kolaborasi adalah kemampuan yang paling penting dalam (21st century learning)
K
pembelajaran di abad kedua-puluh-satu, di antara kemampuan-kemampuan lainnya seperti membaca, matematik, sains. Siswa zaman sekarang perlu un- tuk mengembangkan keterampilan berpikir, content knowledge, dan mempunyai kompetensi sosial dan emosional untuk mengarungi kehidupan dan lingkun- gan kerja yang semakin kompleks. Di bidang “Computing” (diterjemahkan ke dalam bahasa Indonesia menjadi “Informatika”), kemampuan berpikir yang perlu dikuasai sejak pendidikan dasar adalah “Computational Thinking“ (CT). CT adalah proses berpikir untuk memformulasi- kan persoalan dan solusinya, sehingga solusi tersebut dapat secara efektif dilaksanakan oleh sebuah agen pemroses in- formasi ("komputer", robot, atau manusia). CT adalah sebuah proses pemecahan persoalan dengan tahapan:
- Memformulasikan persoalan sedemikian rupa se- hingga dapat menggunakan komputer sebagai alat bantu.
- Mengorganisasi dan menganalisis data secara lo- gis.
- Merepresentasi data melalui abstraksi seperti model dan simulasi
- Mengotomasi solusi melalui berpikir algoritmik (langkah-langkah yang terurut)
- Mengidentifikasi, menganalisis, dan mengim- plementasi solusi yang mungkin dengan tujuan langkah dan sumberdaya yang efisien dan efektif
- Melakukan generalisasi dan mentransfer proses pemecahan persoalan ke berbagai jenis persoalan
CT adalah sebuah cara untuk memecahkan persoalan, merancang sistem, memahami perilaku ma- nusia yang melandasi konsep informatika. Dalam dunia saat ini, CT harus menjadi dasar bagaimana seseorang berpikir dan memahami dunia. CT berarti menciptakan dan menggunakan beberapa level abstraksi, mulai memahami persoalan sehingga mengusulkan pemecahan solusi yang efektif, efisien, “fair” dan aman. CT berarti memahami konsekuensi dari skala persoalan dan kompleksitasnya, tak hanya demi efisiensi, tetapi juga untuk alasan ekonomis dan sosial.
Di negara maju, “Computer Science” (yang di Indonesia diterjemahkan sebagai “Informatika”) sudah mulai dia- jarkan di tingkat SD, mengacu ke kurikulum yang disu- sun oleh persatuan guru-guru, asosiasi profesi informa- tika. Perancang model kurikulum juga menyediakan sejumlah sumber daya belajar untuk dimanfaatkan para guru. Salah satu model kurikulum “Computer Science” dikembangkan oleh ACM dan asosiasi guru [https://csta.acm.org/Curriculum/sub/CurrResources. html] terdiri atas 4 tingkatan sebagai berikut: Dasar
Ilmu Komputer (mulai K-8/SMP), Ilmu Komputer di dunia modern (untuk K9 dan K-10), Analisis dan Desain menggunakan Ilmu Komputer, Topik Ilmu Komputer (K-11, K-12). Di Inggris, sejak tahun 2014 Computer Science pun mulai diga- gas sebagai salah satu cabang ilmu melengkapi STEM (Science, Tehcnology, Engineering, Mathematics) menjadi STEM-Com- puting (STEM-C) yang menjadi mata pelajaran wajib sampai saat ini. Sejalan dengan itu, ICT (Information and Communication Tech- nology, dalam bahasa Indonesia disebut Teknologi Informasi dan Komunikasi/TIK) mulai dibedakan dengan Informatika.
ICT mengarah ke penggunaan teknologi dan perangkat/ gadget, sedangkan Informatika mengarah ke keilmuan dan design produk-produk informatika baik yang nyata (piranti pintar), maupun yang abstrak seperti program aplikasi, dan algoritma.
Apa perbedaan ICT/TIK (Teknologi Informasi dan Ko- munikasi) dengan Informatika ?
Sejalan dengan itu, ICT ( Information and Communi- cation Technology, dalam bahasa Indonesia disebut Teknologi Informasi dan Komunikasi/TIK) mulai dibeda- kan dengan Informatika. Kemampuan TIK mengarah ke penggunaan teknologi dan perangkat/gadget, sedangkan Informatika mengarah ke keilmuan komputasinya. Peng- gunaan TIK yang dimaksud bukan hanya ketrampilan menggunakan gadget dan aplikasinya, tetapi juga kemampuan untuk menggunakan dan meman- faatkan konten dengan bijak.
Bebras Computational Thinking Challenge oleh Inggriani Liem, Pembina TOKI Apa itu Bebras Computational Thinking Challenge ?
“Bebras” dalam bahasa Lituania berarti berang-berang, binatang pengerat yang cerdas serta banyak akal sehingga dapat melakukan banyak hal, misalnya membendung sungai untuk menangkap ikan dengan kayu yang dipatahkannya dengan giginya yang kuat.
Bebras challenge (semula adalah algoritmic challenge kemudian menjadi computational thinking
challenge), disinisasi oleh Prof. Valentina Dagiene dari Lithuania sejak tahun 2004, adalah kompetisi yang diadakan tahunan bagi siswa berumur 5 s.d. 18 tahun dan sudah diikuti oleh sekitar 1.3 juta siswa yang berasal dari 50 negara. Komunitas Bebras sebagian besar adalah para pembina IOI seperti halnya Indonesia, adalah sekumpulan akademisi yang peduli ke pendidikan dasar dan menengah.
Bebras mengikuti perkembangan CT ini, lewat “challenge” atau tantangan yang diberikan untuk problem solving terkait informatika untuk kehidupan sehari-hari, yang disajikan secara menarik, menyenangkan, dan lucu. Lewat Tantangan Bebras, siswa diajak “membangun” ketrampilan berpikir untuk menyelesaikan persoalan, yaitu melalui pendekatan constructionism yang diperkenal- kan oleh Seimort Papert dari MIT. Siswa diajak belajar dengan mencoba menjawab tantan-
Tujuan Tantangan Bebras :
Memotivasi siswa agar mulai tertarik ke edar untuk menang tetapi yang lebih penting topik-topik informatika dan memecahkan adalah untuk belajar berpikir dan menyelesai- persoalan dengan menggunakan ilmu in- kan persoalan. Kepada peserta yang meraih formatika peringkat tinggi, akan diberikan sertifikat.
- gan. Jadi, tantangan Bebras bukan lomba sek-
- Men-stimulasi minat siswa ke informatika
- Mendorong siswa untuk menggunakan
Tantangan bebras diselenggarakan pada saat “TIK” dengan lebih intensif dan kreatif hampir bersamaan di seluruh dunia, pada min- dalam aktivitas belajarnya
Menyemangati siswa untuk berpikir lebih tama bulan November. dalam drpd sekedar ke komputer/alatnya dan TIK
- ggu Bebras, yang ditetapkan pada minggu per-
TOKI secara resmi dipercaya untuk menyelenggara- Salah seorang siswa mengikuti Bebras Challenge kan Bebras di Indonesia
Bagaimana dengan Indonesia ?
(http://bebras.or.id) Bebras dikelola oleh pembina Pusat/Nasional TOKI. Indonesia mulai bergabung ke komunitas interna- sional bebras pada bulan Mei 2016, kemudian me- ngadakan Tantangan Bebras dalam bahasa Indone- sia pada bulan November 2016. Tantangan Bebras Indonesia telah diselenggarakan secara online di- gelar di 12 kota dengan 1553 peserta yang terdiri dari 193 peserta kategori Siaga (SD), 198 peserta kategori Penggalang (SMP), dan 968 peserta kategori Pen- egak (SMA/SMK/MAN) yang berasal dari 125 Sekolah (23 SD, 27 SMP, 75 SMA). Penyelenggaraan Tantan- gan Bebras dikoordinasi oleh Perguruan Tinggi yang menjadi Mitra bebras Indonesia, dan diselenggara- kan di Perguruan Tinggi Koordinator atau di sekolah. Peserta ada yang menggunakan komputer, tablet, bahkan handphone. Setelah mendapat kesempatan menjadi observer pada workshop Internasional Bebras di Bodrum Tur- ki pada tahun 2016, pada bulan April 2017 Indonesia mengajukan diri untuk menjadi National Bebras Or-
ganizer (NBO). Permohonan tersebut diproses ber- Referensi 21st century learning : http://www.p21.org/ Computational Thinking : https://www.cs.cmu.edu/~CompThink/resources/TheLinkWing.pdf : https://en.wikipedia.org/wiki/Computational_thinking Untuk STEMC : https://www.nsf.gov/funding/pgm_summ.jsp?pims_id=503582) Constructionism : https://en.wikipedia.org/wiki/Constructionism_%28learning_theory%29 Kurikulum CS : https://csta.acm.org/Curriculum/sub/CurrResources.html
Untuk Latihan di arena Bebras Indonesia Siapapun dapat berlatih secara mandiri di situs https://olym- pia.id dengan langkah :
1. Akses “Create New Account”, atau dari : https://olympia.id/
login/signup.php 2. Setelah mengisi data diri secara lengkap dan password benar (minimal 8 karakter terdiri dari angka, huruf kecil, huruf besar, dan karakter khusus), anda menekan “Create New Account”, kemudian anda harus membuka email un- tuk konfirmasi. Email andda harus email yang valid dan
aktif.
3. Buka email anda.
4. Klik link yang diberikan oleh Olympia ke email anda.
5. Anda melakukan “Enroll “ ke Bebras Challenge. sama 15 negara pemohon lainnya. Pada workshop bebras internasional 2017 yang diselenggarakan di Brescia-Italia tanggal
29 Mei s.d. 2 Juni 2017. Bebras Board telah memutuskan 11 negara baru termasuk In- donesia yang dapat diterima sebagai NBO mulai thn 2017. Dengan demikian anggota resmi komunitas Bebras saat ini sudah menjadi 52 negara (http://bebras.org) Dengan meningkatnya status Indonesia dari observer menjadi NBO, Bebras Indo- nesia mempunyai kewajiban mengusulkan soal, mengirimkan delegasi untuk hadir di workshop bebras Internasional tahun 2018, dan menyelenggarakan tantangan bebras 2017 sesuai jadwal yang ditetapkan. Jad- wal tantangan Bebras 2017 adalah pada perioda 16-19 November 2017. Sedangkan workshop bebras internasional tahun 2018 akan diadakan di Cyprus pada bulan Mei 2018 yang akan datang.
Bagaimana Untuk Berpartisipasi pada Tantangan Bebras 2017 ? Pembina Bebras Indonesia bekerja sama dengan Perguruan Tinggi mitra, serta dukungan supporter. Perguruan Tinggi (diutamakan Program Studi Infor- matika dan Matematika) yang berminat untuk men- jadi mitra Bebras akan dihubungkan dengan Pergu- ruan Tinggi Pembina Utama TOKI, dan sekolah yang berminat untuk mengikut-sertakan siswa dapat menghubungi Perguruan Tinggi Mitra Bebras ter- dekat. Sebagai bersiapan, Pembina Bebras tingkat Nasional juga bersedia menjadi narasumber untuk workshop/pelatihan dosen/guru yang akan akan bergabung. Silahkan kontak via email ke info@be- bras.or.id Contoh-contoh soal dan latihan online dalam ba- hasa Indonesia dapat diakses di https://olympia.id
DARI OSN KE oleh Veni Johanna, Alumni TOKI
i liburan musim panas tahun 2016, Kata ‘magang’ terkadang diasosiasikan den- Sharon Lynn dan Teresa Pranyoto gan pekerjaan-pekerjaan ringan yang tidak mencapai impian banyak pembela- edukasional, seperti membuat fotokopi,
D jar Ilmu Komputer di seluruh dunia: bek- menulis catatan, atau membuatkan kopi
erja di Google. Sharon, mahasiswi National Sharon, Teresa, dan banyak pegawai magang University of Singapore (NUS), magang di Google lainnya diberi kepercayaan besar tim Voice Search di kantor pusat Google dalam mengerjakan projek-projek yang juga di Mountain View, sementara Teresa ter- penting untuk perusahaan. Ditambah de- bang ke Google Sydney. Saat itu, Teresa ngan adanya para mentor yang membim- baru menyelesaikan tahun ketiga studinya bing mereka, pegawai magang di Google di Fakultas Ilmu Komputer di Universitas dan banyak perusahaan teknologi lainnya indonesia. bisa cepat mengembangkan kemampuan dan skills mereka.
Bekerja dan belajar bersama orang- orang terbaik dunia di salah satu perusahaan teknologi paling tenar di dunia adalah sesuatu yang telah lama diinginkan kedua mahasiswi Indonesia ini. “Saya sangat senang dan bersemangat, tapi juga tidak percaya kalau saya benar-benar diterima di Google,” kata Sharon, mengingat saat di mana ia menda- pat surat penerimaan dari Google. “Tidak percaya, karena saat mendaf- tar saya merasa pesimistis. Senior- senior yang bekerja ke Silicon Valley terasa sebagai orang-orang yang jago banget, sementara saya me- rasa biasa saja. Tapi kerja keras saya betul-betul ada hasilnya.”
Bagi Sharon dan Teresa, pengalaman asyik bekerja di Google semakin menetapkan kecintaan mereka akan bidang ilmu komputer. Untuk Teresa, kecintaannya bermu- la dari mobile development dan game development, yang ia temukan di tingkat pertama kuliah di Universitas Indonesia. “Dari program, kita bisa membuat sesuatu yang menyenangkan... Apalagi aku suka main game. Aku senang bisa mengguna- kan apa yang aku buat.” Sementara itu, di kuliah, Sharon menyadari bahwa aplikasi ilmu komputer tidak hanya sekadar membuat web atau app saja, tapi juga di ba- nyak bidang-bidang lain, seperti biologi atau finansial. Potensial ilmu ini sangat be- sar - untuk orang yang mau belajar, kemungkinan yang ada tak terbatas.
“Perasaan itu sebenarnya baik juga; kalau saya nggak pernah merasa bodoh, artinya saya terlalu santai dan cepat puas,” kata Sharon, mengingat perasaan mindernya saat di OSN. Di sisi lain, dengan menge- nal banyak orang melalui OSN, mereka juga termotivasi dan terinspirasi melihat prestasi partisipan lain atau alumni Tim Olimpiade Komputer Indonesia (TOKI). Misalnya, alumni-alumni TOKI telah me- mulai atau memimpin perusahaan-pe- rusahaan teknologi startup di Indonesia, seperti Traveloka, Agate Studio, Sirclo, dan UrbanIndo. Di luar negeri, alumni TOKI tersebar di perusahaan-perusahaan seperti Facebook, Google dan Quora. Tahun ini, keduanya akan lulus kuliah dan akan kembali ke Google, kali ini sebagai pegawai tetap: Sharon di Google Singapu- ra, dan Teresa di Google Sydney, Australia.
Namun masa depan ini sama sekali tidak terlintas di pikiran mereka lima tahun lalu, ketika mereka gagal meraih me- dali di Olimpiade Sains Nasional bidang komputer.
Kegagalan ini meluluhkan hati mereka. Setelah OSN, mereka berdua bahkan sempat berpikir untuk kuliah di jurusan lain: Sha- ron di Ilmu Kedokteran, Teresa di Teknik Metalurgi. Mereka sem- pat merasa takut bahwa mereka tidak cocok untuk mendalami Ilmu Komputer, setelah merasa bodoh dan tertinggal dibanding- kan orang-orang lain yang mere- ka temui di OSN.
Bagi Teresa, mantan wakil provinsi Riau, OSN adalah ‘pembuka jalur’ yang memoti- vasi dirinya untuk menjelajahi aplikasi-aplikasi ilmu kom- puter yang lain. Teknik-teknik yang ia pelajari juga berguna di kuliah, magang, atau pros- es wawancara kerja, seperti penggunaan dynamic pro- gramming dalam investigasi biologis tentang DNA. Buat Sharon, OSN berperan besar dalam mendorong dirinya keluar dari zona nyaman. Pengalaman dalam belajar hal-hal baru yang sulit secara intensif juga membangun kebiasaan belajar dan berlatih yang kuat, yang terus dibawanya ke universitas dan ke tempat kerja.
Sharon dan Teresa menunjukkan bahwa kegagalan di OSN bukanlah akhir, namun pembelajaran dan awal karir seru di bidang ilmu komputer. Yuk, kamu juga bisa!
Gaya (Style) Kontes Pemrograman
elain Olimpiade Sains Nasional (OSN), ter- dapat banyak kontes pemrograman lain- nya: International Olympiad in Informatics
(IOI), Compfest oleh Unviersitas Indonesia, ACM International Collegiate Programming Contest (ICPC), TOKI Open Contest, dan lain-lain. Namun, berdasarkan stylenya sebenarnya kontes-kontes ini hanya terbagi menjadi dua kategori besar. Kategori pertama adalah kontes bertipe IOI- style. Seperti namanya, IOI tentunya adalah salah satu kontes yang masuk ke kategori ini. Sebagai bagian dari persiapan IOI, OSN dan Pemusatan Latihan Nasional (Pelatnas) pun juga mengikuti style ini.
Kategori kedua adalah kontes bertipe ICPC-style. Style ini lebih sering digunakan untuk lomba- lomba online dan lomba-lomba pada jenjang mahasiswa, seperti ACM ICPC, Gemastik, TOKI Open Contest, dan lain lain.
Apa perbedaan dari kedua style kontes ini? Mere- ka sangat berbeda. Umumnya, kontes bertipe
ICPC-style memiliki lebih banyak soal daripada kontes bertipe IOI-style. Dalam waktu yang sama (lima jam), peserta IOI diberikan 3 soal namun peserta ICPC diberikan 10 sampai 13 soal. Peserta TOKI Open Contest pun diberikan 4 sampai 5 soal untuk diselesaikan hanya dalam 2 jam.
Proses penilaian dari kedua kontes ini pun juga berbeda. Umumnya, kontes bertipe IOI-style me- miliki beberapa subsoal (subtask) dengan nilai yang berbeda-beda pada setiap soalnya, yang mana nilai dari setiap subsoal akan diperoleh jika peserta berhasil menyelesaikan seluruh kasus uji pada subsoal tersebut. Peringkat peserta di- tentukan oleh jumlah nilai yang diperoleh pada setiap soal. Namun, kontes bertipe ICPC-style tidak memiliki subsoal pada setiap soalnya. Se- hingga, peserta tidak akan mendapatkan nilai parsial untuk sebuah soal. Peserta akan menye- lesaikan soal tersebut secara penuh atau tidak sama sekali.
oleh Jonathan Irvin Gunawan, Alumni TOKI http://www.techrise.me/blog
S
http://akshatb.me
data kompleks seperti Link-Cut Tree. Karenanya, peserta yang belum mempelajari hal-hal terse- but tidak akan dirugikan. Namun, kontes bertipe ICPC-style biasa- nya tidak memiliki silabus. Materi apapun dapat diujikan oleh pani- tia. Karenanya, alangkah baiknya bagi peserta untuk memepelajari sebanyak mungkin materi sebe- lum menghadapi kontes bertipe
ICPC-style. Kontes-kontes onsite pada jen- jang mahasiswa yang bertipe
ICPC-style, termasuk ICPC itu sendiri biasanya merupakan Karena tidak adanya subsoal, sering sekali ter- kontes tim. Untuk itu, juga meru- dapat beberapa peserta dengan nilai yang sama. pakan hal yang penting untuk melatih strategi
Karenanya, jika terdapat dua peserta dengan kerja tim (teamwork) ketika menghadapi kontes nilai yang sama, peringkat peserta ditentukan
ICPC atau kontes serupa. oleh total waktu yang dihabiskan untuk menye-
Namun, hal terpenting untuk memenangkan lesaikan soal-soal tersebut. Karenanya, banyak kedua tipe kontes ini sebenarnya sama, yaitu hal yang harus dipersiapkan untuk berpindah banyaknya latihan soal, pembelajaran ma- dari mengikuti kontes bertipe IOI-style menuju teri, dan kemampuan penyelesaian masalah kontes bertipe ICPC-style. Bagi Anda yang su- (problem solving). Jika Anda sudah sering me- dah terbiasa mengikuti kontes bertipe IOI-style menangkan kontes bertipe IOI-style, dengan dan akan melanjutkan ke jenjang mahasiswa, beberapa latihan khusus untuk menghadapi ada baiknya untuk mempersiapkan diri un- kontes bertipe ICPC-style, Anda juga akan dapat tuk mengikuti kontes bertipe ICPC-style. Apa memenangkan kontes bertipe ICPC-style, ter- saja yang harus dipersiapkan?Salah satu hal masuk ICPC itu sendiri. penting adalah dengan melatih kecepatan co-
Ingatlah bahwa OSN bukan satu-satunya ajang ding Anda. Karena banyaknya soal yang relatif kontes pemrograman. Masih banyak juga kontes sedikit, biasanya Anda tidak memerlukan kece- lainnya yang dapat Anda menangkan diluar patan coding yang tinggi untuk memenangkan sana, termasuk pada jenjang mahasiswa. Sela- kontes bertipe IOI-style. Soal-soal pada kontes mat berjuang! ini biasanya difokuskan pada observasi-observasi algoritma yang dalam. Namun pada kontes ber- tipe ICPC-style, Anda mungkin saja memerlukan kecepatan coding yang tinggi karena banyaknya soal yang di- berikan. Selain itu, karena total waktu mempengaruhi peringkat, peserta yang memiliki kecepatan coding yang tinggi akan memiliki keun- tungan yang cukup signifikan.
Hal penting lainnya adalah untuk mempersiapkan kemungkinan ma- teri yang mungkin diujikan. Kontes
IOI memiliki silabus yang berisi ma- teri-materi yang mungkin diujikan. Biasanya kontes ini memfokuskan pada observasi peserta dan tidak akan mengujikan hal-hal yang mem- butuhkan teknik mendalam, seperti Fast Fourier Transform atau struktur
http://petr-mitrichev.blogspot.com
Pembahasan OSP Informatika 2017 Soal Algoritma oleh Anthony Ng, Alumni TOKI
Diberikan fungsi seperti di bawah ini. Berapakah nilai yang dikembalikan dari pemanggilan fungsi cariNilai(2017,1017)?
41
function cariNilai(n, x : integer): longint; var i : integer; n_now, x_now : integer; ans : longint; begin ans := 0; n_now := n; x_now := x; while (n_now > 0) do begin ans := ans + x_now; x_now := x_now - 1; n_now := n_now - 1; end; cariNilai := ans; end;
Untuk mempermudah pengerjaan soal ini dapat n S(n) = (2a + (n - 1) b) digunakan rumus deret aritmetika.
2 Berikut rumus hasil dari deret aritmetika dengan Pada soal ini, a = 1017, b = -1, n = 2017, dengan nilai awal a, selisih b, dan banyaknya elemen n: mensubstitusikan nilai-nilai tersebut ke dalam rumus S(n) di atas, diperoleh jawaban akhir 18153.
Diberikan fungsi seperti di bawah ini. Berapakah nilai dari f(8, 9, 4, 5, 6, 10000)?
function f ( a , b , pa , pb , pab , n: longint ): longint ;
42 var
total : longint ; i : longint ;
begin
i := ; total := ;
while ( total < n ) do begin
i := i
- 1 ; if ( i mod a = ) and ( i mod b = ) then
total := + total pab
else if i mod a = then
- total := total pa
else if i mod b = then
- total := total pb ;
end ;
f := i ;
end ; total = (i / 72) (6 - 4 - 5) Fungsi f(a, b, pa, pb, pab, n) akan mencari nilai i terkecil sehingga total >= n. Untuk suatu nilai i,
- (i / 8) * 4 + (i / 9) * 5 = 73 / 72 * i kita dapat menghitung nilai total sebagai beri-
Karena kita ingin agar total >= n, maka substitusi- kut. Perhatikan bahwa ekspresi if (i mod a = 0) kan total dengan 10000 (dari nilai n pada para-
and (i mod b = 0) akan terjadi setiap KPK(a, b)
meter), diperoleh: sekali. Maka: 10000 = 73 / 72 * i total = (i/KPK(a, b)) * pab i = 9863.0137
- (i/a - i/KPK(a, b)) * pa
Karena nilai i yang diperoleh lebih dari 9863, se-
- (i/b - i/KPK(a, b)) * pb dangkan yang diinginkan adalah bilangan bulat,
Jika disederhanakan akan menjadi: maka bilangan bulat terkecil terkecil i yang me- nyebabkan total >= n adalah 9864. total = (i / KPK(a, b)) (pab - pa - pb)
- (i / a) * pa + (i / b) * pb Substitusikan nilai pada parameter:
Diberikan program di bawah ini. Apa output dari program tersebut apabila diberikan input (secara berurutan) yaitu 1000 dan 2?
44 function apaini ( x : integer ): integer ;
{Program Utama}
var var
ans , i : integer ; i : integer ;
begin
N : integer ; ans := ; x : integer ; i :=
1 ;
ans : integer ;
while ( i <= x ) do begin begin if ( x mod i = ) then
readln ( N , x ); ans := + ans
1 ;
ans := ; i := i +
1 ; for i := 1 to N do begin end ; if ( apaini ( i ) mod x = ) then
apaini := ans ;
- ans := ans 1 ;
end ; end ;
writeln ( ans ); end . Fungsi apaini(x) mengembalikan banyaknya 1000 yang jika diaplikasikan fungsi apaini() dan faktor positif berbeda dari x. Dalam teori bila- dimodulo dengan 2 akan menghasilkan nilai 0 ngan, terdapat rumus menghitung banyaknya (dengan kata lain apaini(i) genap). Berdasarkan faktor positif berbeda dari N: rumus F(N) di atas dapat diperhatikan bahwa a
F(N) akan bernilai genap jika terdapat setidak- Jika N = p a2 ak , dengan semua p meru- 1 1 p ... p 2 k i nya satu buah nilai a yang ganjil. pakan faktor-faktor prima dari N dan a adalah i i
Untuk mempermudah, kita dapat menghitung banyaknya kemunculan faktor prima p dalam i komplemennya, yaitu banyaknya bilangan asli N, maka banyaknya faktor positif berbeda dari tidak lebih dari 1000 yang jika diaplikasikan N adalah dengan fungsi F hasilnya ganjil, atau dengan
F(N)=(a +1)(a +1) ... (a +1) 1 2 k 3 2 kata lain hanya ada (semua) a yang genap. Bi- i Sebagai contoh jika N = 72 = 2 , maka ban-
3 langan-bilangan yang memenuhi sifat tersebut yaknya faktor positif berbeda dari 72 adalah hanyalah bilangan kuadrat (1, 4, 9, 16, ...). Bila- F(72)=(3+1)(2+1)=12. ngan kuadrat terbesar tidak lebih dari 1000 2 Program pada soal nomor 44 menerima dua adalah 31 =961, maka jawaban untuk soal ini buah nilai N=1000 dan x=2, kemudian mencari adalah komplemennya yakni 1000 - 31 = 969. banyaknya bilangan asli yang tidak lebih dari
Pembahasan OSP Informatika 2017 Soal Pemrograman oleh Ammar Fathin Sabili, Alumni TOKI Grid Berpola
yang lebih dalam diberi nomor 2, la- Diberikan grid berukuran N baris dan M kolom. Dari baris teratas pisan berikutnya diberi nomor 3, dan seterusnya. Tabel di samping adalah hingga terbawah dinomori den- contoh grid berukuran 7 baris dan 8 gan baris 1 hingga baris N, dan kolom yang telah diberi nomor. dari kolom terkiri hingga ter- kanan dinomori dengan kolom 1
Diberikan nilai N, M, X, dan Y. Anda hingga kolom M. diminta untuk membuat sebuah program yang menentukan nomor
Setiap petak pada grid diberi no- berapa yang ada di baris ke-X dan ko- mor dengan aturan pola berikut. Dimulai dari lapisan terluar grid lom ke-Y dari grid berukuran N baris dan M kolom. diberi nomor 1, lapisan berikutnya
Format Masukan: Batasan: 9 Sebuah baris yang berisi 4 bilangan bulat 1 ≤ N, M ≤ 10 berturut-turut yakni N, M, X, dan Y.
1 ≤ X ≤ N
Format Keluaran:
1 ≤ Y ≤ M Sebuah baris yang berisi sebuah bilangan bulat yang menandakan nomor berapa yang ada di baris ke-X dan kolom ke-Y dari grid berukuran N baris dan M kolom.
- Salah satu solusi naif yang dapat dilakukan ada- Setiap angka 1 berada pada baris paling atas lah dengan membuat sebuah array 2 dimensi pertama, baris paling bawah pertama, kolom kosong berukuran N x M, kemudian mengisi a- paling kiri pertama, dan kolom paling kanan rray tersebut dengan pola yang diberikan pada pertama;
Setiap angka 2 berada pada baris paling atas indeks [X,Y]. Namun, solusi naif ini tidak akan ke-2, baris paling bawah ke-2, kolom paling bekerja dengan batasan yang diberikan karena kiri ke-2, dan kolom paling kanan ke-2;
- soal, dan terakhir mencetak isi dari array pada
Setiap angka 3 berada pada baris paling atas sar. (Perhatikan bahwa dengan memori yang ke-3, baris paling bawah ke-3, kolom paling rasional, ukuran array maksimal biasanya hanya kiri ke-3, dan kolom paling kanan ke-3; dapat mencapai puluhan juta indeks saja.) Bah-
- akan membutuhkan memori yang sangat be-
- kan, algoritma untuk mengisi array-nya pun tidak dst. begitu sederhana.
Kesimpulan yang dapat diambil adalah dengan Pendekatan lain yang dapat dilakukan adalah mencari tahu indeks [X, Y] berada pada baris dengan berpikir terbalik. Alih-alih mencari tahu ke berapakah dari atas, baris ke berapakah dari angka berapa yang berada pada indeks [X, Y], co- bawah, kolom ke berapakah dari kiri, dan kolom balah berpikir suatu angka Z berada pada indeks ke berapakah dari kanan. Setelah mendapatkan yang mana saja? keempat angka tersebut, bagaimana cara meng- etahui angka pada indeks [X, Y]? Perhatikan bah- Dengan berpikir terbalik seperti ini, kita dapat wa angka pada indeks ini adalah nilai minimal menemukan fakta bahwa: dari keempat angka tersebut. Berikut ini merupakan contoh kode solusi dalam bahasa Pascal dan C++. Perhatikan bahwa suatu indeks [X, Y] di sebuah array 2 dimensi berukuran N x M berada pada baris ke-(X) dari atas, baris ke-(N- X+1) dari bawah, kolom ke-(Y) dari kiri, dan kolom ke-(M-Y+1) dari kanan. var #include <bits/stdc++.h> N, M, X, Y, ans : longint; using namespace std; begin int N, M, X, Y, ans; readln(N, M, X, Y); ans := min(X, Y); int main() { ans := min(ans, N-X+1); scanf(“%d%d%d%d”, &N, &M, &X, &Y); ans := min(ans, M-Y+1); ans = min(X, Y); writeln(ans); ans = min(ans, N-X+1); end. ans = min(ans, M-Y+1); printf(“%d\n”, ans); }
Hubungan Kakek - Cucu
Pada soal ini, Anda diminta untuk memroses sil- teksi hubungan kakek-cucu karena jika Z adalah silah dinasti kerajaan KITOKI. Setiap lelaki dinasti ayah dari Y, dan Y adalah ayah dari X, maka Z ada- ini diberi nomor 1, 2, …, N. Pendiri dinasti kerajaan lah kakek dari X. diberi nomor 1.
Dari sebuah daftar hubungan ayah-anak, Anda Anda diberi daftar hubungan ayah-anak, dengan diminta untuk membuat sebuah program yang A[Y] = X menyatakan bahwa X adalah ayah dari menghitung banyaknya hubungan kakek-cucu.
Y. Dari hubungan ayah-anak, Anda dapat mende-
Format Keluaran: Batasan:
Format Masukan: 5 Sebuah baris yang berisi se-Masukan terdiri dari 2 baris. Ba- 1 ≤ N ≤ 10 buah bilangan bulat yang ris pertama berisi bilangan bulat
1 ≤ A[i] ≤ N menandakan banyaknya N. Baris kedua berisi N-1 bilan-
Dijamin daftar hubungan ayah- hubungan kakek-cucu dari gan bulat A[2], A[3], hingga A[N] anak membentuk silsilah yang valid data masukan yang diberi- sesuai penjelasan pada deskripsi kan. soal.
Penjelasan:
Terdapat 6 hubungan kakek- cucu pada tree tersebut yakni (1- 4), (1-5), (1-6), (3-7), (3-8), dan (3-9).
Terdapat dua buah solusi yang akan diusulkan pada soal ini. Solusi pertama dari soal ini merupakan solusi dasar, sedangkan solusi kedua merupakan pengembangan lebih lanjut dari solusi pertama. Perhatikan bahwa materi tree dasar dan representasi graph (adjacency list) dibutuhkan dalam solusi pertama. Kedua materi tersebut merupakan beberapa materi baru yang masuk ke dalam silabus OSN mulai tahun 2017.
Untuk solusi pertama, pendekatan yang da- pada soal, banyaknya cucu dari 3 sama dengan pat dilakukan untuk menghitung banyaknya banyaknya anak yang dimiliki 4 (yakni 1) ditambah hubungan kakek-cucu adalah menghitung dengan banyaknya anak yang dimiliki 5 (yakni 0) banyaknya cucu yang dimiliki oleh setiap orang ditambah lagi dengan banyaknya anak yang dimi- (kemudian menjumlahkannya). Untuk menghi- liki 6 (yakni 2). tung banyaknya cucu dari seseorang, kita dapat
Sehingga, kita dapat memanfaatkan informasi menjumlahkan banyaknya anak yang dimiliki anak-anak yang dimiliki oleh seseorang. Kita akan oleh anak-anak orang tersebut. menggunakan adjacency list untuk menyimpan Sebagai contoh dengan kasus uji masukan informasi tersebut.
var #include <bits/stdc++.h> N, ans, temp, i, j : longint; using namespace std; A : array[1..100000] of longint; anak : array[1..100000] of array of integer; int N, ans, temp; anak_sz, anak_ptr : array[1..100000] of longint; vector<int> anak[100001]; begin int main() { readln(N); scanf(“%d”, &N); for i := 2 to N do begin for (int i = 2; i <= N; i++) { read(A[i]); scanf(“%d”, &temp); inc(anak_sz[A[i]]); anak[temp].push_back(i); end; } for i := 1 to N do for (int i = 1; i <= N; i++) {
setLength(anak[i], anak_sz[i]); for (int j = 0; j < anak[i].size()
for i := 2 to N do begin j++) { anak[A[i], anak_ptr[A[i]]] := i; temp = anak[i][j]; inc(anak_ptr[A[i]]); ans += anak[temp].size(); end; } } for i := 1 to N do begin printf(“%d\n”, ans); for j := Low(anak[i]) to High(anak[i]) do begin } temp := anak[i,j]; inc(ans, anak_sz[temp]); end; end; writeln(ans); end.Untuk solusi kedua, kita dapat berpikir terba- Sebagai contoh dengan kasus uji masukan pada lik dari solusi pertama. Alih-alih mencari tahu soal, kakek dari 4 adalah 1 dan kakek dari 9 ada- ba-nyaknya cucu dari setiap orang, kita dapat lah 3. Perhatikan bahwa seseorang akan me- menghitung berapa banyak kakek dari setiap miliki kakek jika dan hanya jika ayah dari orang orang. Perhatikan bahwa terdapat properti khu- tersebut bukanlah 1 karena 1 tidak memiliki ayah. sus dari tree yang dapat diterapkan yakni setiap
Sehingga, kita hanya perlu mencari tahu ba- orang memiliki paling banyak 1 ayah yang unik. nyaknya A[i] yang tidak sama dengan 1
Artinya, setiap orang memiliki paling banyak 1 kakek yang unik.
#include <bits/stdc++.h> var using namespace std;
N, A, ans, i : longint; int N, A, ans; begin readln(N); int main() { for i := 2 to N do begin scanf(“%d”, &N); read(A); for (int i = 2; i <= N; i++) { if (A <> 1) then inc(ans); scanf(“%d”, &A); end; if (A != 1) ans++; writeln(ans); } end. printf(“%d\n”, ans); }
Pembahasan OSN Informatika 2017 oleh Maximilianus Maria Kolbe, Alumni TOKI Belanja Suvenir (Day 2, Problem B) Tag: Precompute, Sliding Window Subsoal 1 - 3 (2 ≤ N ≤ 10)
Subsoal 5 - 6 (2 ≤ N ≤ 4.000)
Kita dapat menyelesaikan subsoal ini de- ngan melakukan brute force. Perhatikan bahwa terdapat 4 nilai yang perlu kita cari, yaitu a, b, c, dan d yang merepresentasikan rentang toko-toko yang dikunjungi oleh Kwik dan Kwak. Dengan kata lain, apabila kita mencoba semua kemungkinan nilai a, b, c, dan d yang mungkin, kita dapat mem- peroleh jawaban yang kita inginkan. Kemu- dian, kita butuh 1 kali lagi iterasi untuk me- mastikan apakah suvenir dalam rentang a hingga b dan c hingga d sudah memenuhi persyaratan yang diinginkan. Kompleksitas: O(N^5)
Karena kita hanya diminta untuk mencari satu saja konfigurasi yang maksimal, maka pada dasarnya kita
Perhatikan bahwa kita tidak perlu me- meriksa semua kemungkinan dari a, b, c, dan d. Hal ini dikarenakan panjang rentang dari a hingga b harus sama dengan dari c hingga d. Dengan kata lain, alih-alih kita melakukan iterasi terhadap a, b, c, dan d, kita dapat melakukan iterasi terhadap M (panjang rentang), a, dan c. Kemudian kita dapat memperoleh nilai b=a+M-1 sekaligus dengan nilai d=c+M-1. Kompleksitas: O(N^4)
Ide nya sama persis dengan subsoal sebelumnya, tetapi kita harus mengoptimasi iterasi O(N^2) yang ada pada solusi untuk subsoal sebelumnya. Terdapat beberapa hal yang dapat kita observasi :
1. Pada saat kita ingin mencari nilai M maksimum pada suatu awal rentang, apabila anggota dari rentang tersebut sudah tidak unik (suatu anggota muncul lebih dari 1 kali) maka tidak ada gunanya untuk kita melanjutkan pencarian tersebut karena selebihnya dari itu merupakan solusi yang tidak valid. Sehingga kita bisa langsung melanjutkan pencarian untuk nilai awal rentang selanjutnya.
2. Pada saat kita mulai mencari nilai M maksimum pada awal rentang yang baru, kita tidak perlu mengulangi iterasi kita dari awal, tetapi cukup melanjutkan iterasi yang ada dari awal rentang sebelumnya. Hal ini dikarenakan data dari rentang yang ada sudah pasti unik, jadi kita tidak perlu mengulangi pemeriksaan kembali.
Melihat 2 observasi di atas, dapat kita lihat bahwa kita dapat melakukan iterasi nilai awal dan akh- ir rentang tersebut secara bersamaan, yang menghasilkan suatu solusi dengan kompleksitas O(N). Algoritma ini juga sering disebut dengan Sliding Window. Dengan cara yang sama, kita dapat me- nggunakan Sliding Window pada pencarian rentang pertama, kemudian memeriksa apakah rentang tersebut valid menggunakan array S yang sebelumnya sudah diprekomputasi. Kompleksitas: O(N).