Tahun 2016 ini, BNPCHS mengalami penambahan jumlah peserta yang cukup signifikan dari tahun sebelumnya menjadi lebih dari 80 siswa-siswi SMA dari seluruh Indonesia. Hal ini mungkin merupakan pertanda bahwa semakin banyak siswa-siswi Indonesia yang mulai mengenal competitive programming. Harapan kami adalah semoga tahun-tahun berikutnya peserta BNPCHS akan semakin bertambah lebih banyak lagi. Pada Babak Kualifikasi yang diadakan pada tanggal 24 Juli 2016 lalu, tim Juri menyiapkan 6 buah soal dengan tingkat kesulitan yang beragam. Babak kualifikasi tersebut berlangsung selama 3 Jam 30 Menit dari Pukul 13.00 - 16.30. Tim Juri menggunakan sistem Jollybee Online Judge untuk melaksanakan Babak Kualifikasi.

Jumlah peserta yang berhasil menyelesaikan minimal satu soal pada tahun ini berkurang menjadi 3 orang, dengan 6 orang berhasil mensapu bersih semua soal yang kami siapkan. Selamat kepada siswa dengan username hs16sergiovieri yang berhasil menduduki peringkat pertama dalam Babak Kualifikasi lalu, walau bukan siswa pertama yang berhasil menyelesaikan semua soal. Sebagian besar peserta tahun ini sudah menggunakan C++ sebagai bahasa pemrogramannya. Padahal, beberapa tahun lalu Pascal masih mendominasi BNPCHS.

Setelah Babak Kualifikasi berakhir, tim Juri menyusun daftar siswa-siswi yang lolos ke Babak Final di Jakarta tanggal 7 Agustus 2016 nanti. Sebanyak 70 Siswa-Siswi berhasil memenuhi Kualifikasi untuk masuk ke Babak Final. Kami mengundang dan mengharapkan kehadiran teman-teman SMA semua pada tanggal tersebut di Kampus Anggrek Binus University. Pada Babak Final nanti akan ada banyak makanan dan hadiah untuk dimakan dan diraih oleh kalian semua. Tunggu apalagi? Jangan sampai tidak datang!

Cukup dengan basa-basinya, berikut adalah pembahasan untuk semua soal-soal Babak Penyisihan lalu. Semoga editorial ini bermanfaat bagi siswa-siswi yang membutuhkannya.



Problem A - Tiga Sekawan dan Bola Basket

Author: Suhendry Effendy

Ini adalah salah satu soal termudah di babak kualifikasi ini. Diberikan input berupa 3 buah bilangan bulat, A, B, dan C yang merupakan banyaknya bola basket yang berhasil dimasukkan oleh Jingga, Putra, dan Wijaya, tentukan siapa yang memenangkan pertandingan basket tersebut.

Solusi untuk soal ini adalah mengecek angka siapa yang paling besar diantara ketiga orang tersebut. Apabila A yang terbesar dari 2 angka lainnya, maka "JINGGA"-lah yang menang. Selain itu, apabila B yang terbesar dari 2 angka lainnya, maka "PUTRA"-lah yang menang. Selain 2 kasus tersebut, maka "WIJAYA"-lah yang menang.

Beberapa peserta tidak memperhatikan format output yang ditentukan soal. Contohnya, apabila input yang diberikan adalah 5 2 19 (outputnya WIJAYA), berikut adalah beberapa kesalahan ditemui pada program peserta:

Tahun ini tidak ada yang mengeluarkan output tambahan yang tidak diminta soal (ct: "Masukan Input: ", "Input: ", dan lainnya). Meskipun masih ada beberapa yang kurang teliti dalam menangani output.

Solusi C++
Solusi Pascal

Problem B - Haus

Author: Anton Wibowo

Pertama, cari terlebih dahulu lokasi Jingga pada peta yang diinput. Kemudian lakukan Breadth First Search untuk mencari posisi 'E' terdekat dari lokasi Jingga berada. Untuk setiap lokasi 'E' yang terdekat (bisa lebih dari 1 lokasi), lakukan flood fill dari titik itu untuk menghitung seberapa banyak ember yang ada pada wilayah tersebut. Jawabannya adalah output maksimum dari setiap flood fill yang kita jalankan.

Solusi C++

Problem C - Andi dan Krisis Akhir Bulan

Author: Ricky Sentoso, Andi Halim

Kita dapat melakukan Breadth First Search untuk soal ini. Keadaan awal yang kita masukkan ke algoritma Breadth First Search adalah jumlah uang sekarang di dompet dan bank (JumlahUangDiBank, JumlahUangDiDompet). Lalu, Output yang diinginkan adalah berapa langkah agar algoritma Breadth First Search mencapai keadaan (0,JumlahUangDiBank + JumlahUangDiDompet). Apabila keadaan (0,JumlahUangDiBank + JumlahUangDiDompet) tidak dapat dicapai, kita harus mengeluarkan output "-1"

Solusi C++

Problem D - Quiz Tebak Kode

Author: Hutomo Widjaja

Pada soal ini yang kita lakukan adalah mencoba semua kemungkinan angka dari 0000 ... 9999 (10000 kemungkinan). Untuk setiap kemungkinan angka tersebut, asumsikan bahwa angka itu adalah angka yang dipikirkan oleh Rangga. Kemudian, cek apakah semua tebakan Felix dan semua jawaban Rangga konsisten dengan angka asumsi tersebut.

Solusi C++

Problem E - Lilin Kue Ulang Tahun

Author: Suhendry Effendy

Hitung banyaknya tiap karakter 'a' sampai 'z' dalam input string pertama yang diberikan. Kemudian untuk string kedua yang diberikan, cek apakah terdapat jumlah karakter yang cukup pada string pertama untuk membentuk string tersebut.

Solusi C++

Problem F - Warnet Jingga

Author: Rafael Herman Yosef

Soal ini meminta kita untuk menghitung berapa banyak orang yang diperlukan agar tidak ada komputer yang dapat dipakai lagi.

Setiap orang dapat mencakup paling banyak sebanyak 2*K+1 komputer, dan paling sedikit sebanyak K+1 komputer.

Berikut adalah contoh K=2 (X = area cakupan, O = orangnya)
Paling maksimum untuk kasus ini, cara mencakupnya adalah seperti berikut

XXOXX XXOXX

Paling minimum untuk kasus ini, untuk mencakupnya adalah seperti berikut

OXX OXX

Sehingga, agar banyaknya orang yang dibutuhkan minimum, maka cakupan komputer yang harus dicakup setiap orang harus maksimum(XXOXX XXOXX). Sehingga banyaknya orang minimum dapat dihitung dengan rumus N/(2*K+1). Namun apabila N tidak habis dibagi oleh 2*K+1, maka diperlukan 1 orang tambahan untuk mencakup sisa komputer yang tidak dapat dicakup.

Agar banyaknya orang yang dibutuhkan maksimum, maka cakupan komputer yang harus dicakup setiap orang harus minimum(OXX OXX). Sehingga banyaknya orang maksimum dapat dihitung dengan rumus N/(K+1). Namun apabila N tidak habis dibagi oleh K+1, maka diperlukan 1 orang tambahan untuk mencakup sisa komputer yang tidak dapat dicakup.

Hal yang harus diperhatikan adalah batasan N dan K yang dapat mencapai 1015. Untuk soal ini memerlukan tipe data 64 bit. Kesalahan yang dilakukan oleh beberapa peserta adalah tidak memperhatikan batasan tersebut dan memakai tipe data 32 bit untuk input dan output.

Solusi C++
Solusi Pascal

Selamat untuk 70 Siswa yang berhasil lolos ke babak final. Untuk list siswa yang lolos dapat dilihat pada tautan berikut: di halaman "Peserta Final"

Masih ada waktu sekitar 2 minggu sebelum Final. Pakailah waktu tersebut sebaik-baiknya untuk melatih diri kalian sehingga lebih siap nantinya.

Akhir kata, Sampai jumpa di babak final. Good luck and have fun!

PS: Jangan lupa makan banyak-banyak makanan yang disediakan untuk kalian


-- Felix Jingga