• Tidak ada hasil yang ditemukan

PEMBAHASAN SOAL FINAL BNPCHS 2014

N/A
N/A
Protected

Academic year: 2021

Membagikan "PEMBAHASAN SOAL FINAL BNPCHS 2014"

Copied!
6
0
0

Teks penuh

(1)

PEMBAHASAN SOAL FINAL BNPCHS 2014 A. DUEL MAUT

* Solusinya adalah dengan Brute Force, yaitu mencoba semua kemungkinan pasangan dari anggota kelompok pertama dan kedua, lalu mencari yang selisihnya paling minimal. Kita memaintain sebuah variabel jawab yang menyimpan jawaban sementara. Setiap mencoba-coba memasangkan, kita update variabel jawab jika pasangan kita yang sekarang selisihnya lebih kecil dari jawaban sementara. Pada akhir tiap kasus uji, keluarkan isi variabel jawab ini sebagai jawabannya.

* Jumlah anggota masing-masing kelompok maksimal adalah 100, sehingga kompleksitas program adalah O(T * N * M), yaitu O(100 * 100 * 100) alias O(10^6) dan masih masuk dalam batasan waktu yang ditentukan.

* Tingkat kesulitan soal ini adalah easy.

B. BELANJA BAJU BAMBU BARU * Beberapa observasi penting soal ini:

1. Jika sebuah node W termasuk dalam set jawaban, maka seluruh node dari W ke root pasti termasuk dalam set jawaban.

2. Selama sebuah node Y masih menguntungkan (memperbesar jarak node minimum dalam set jawaban dengan rata-rata set jawaban) ketika dimasukkan ke dalam set jawaban, maka masukkan node Y diambil.

* Berdasarkan kedua observasi itu, jawaban kita adalah sebuah subtree yang mengandung root di dalamnya. Cara naifnya adalah dengan mencoba semua node menjadi node minimum, sebut saja node ini adalah node W. Kemudian, semua node dari node W ke root dimasukkan dalam jawaban. Hitung rata-rata sementaranya. Ambil node yang terhubung dengan salah satu node dalam set jawaban sementara, tentu saja untuk lebih optimumnya node ini memiliki value terbesar dibanding kandidat node terhubung lainnya. Jika dengan memasukkan node ini ke dalam set jawaban masih meningkatkan ratanya, masukkan node baru ini ke dalam set jawaban. Hitung ulang rata-ratanya dan lakukan terus prosedur ini hingga tidak ada lagi node baru yang bisa dimasukkan ke dalam set jawaban.

(2)

* Pada ilustrasi di atas tidak mungkin ada node tambahan lagi yang diambil karena node manapun yang diambil akan menyebabkan rata-rata sementara (7.6) turun. Jika proses dilakukan dengan priority queue, maka kompleksitas program menjadi O(N * N log N). Untuk menghilangkan faktor N, ada observasi tambahan yang diperlukan: Semua node, kecuali node yang termasuk dalam path node W ke root, adalah node-node yang saling berdampingan pada array terurut. Array terurut adalah sebuah array yang berisi semua node yang terurut nonascending berdasarkan value masing-masing.

* Mengapa demikian? Prinsipnya adalah jika sebuah node Y (yang tidak berada di jalur node W ke root) dengan value V masuk ke dalam set jawaban, pasti node dengan value lebih besar dari V akan masuk pula ke dalam set jawaban. Ingat bahwa pengambilan node Y selalu dari node terhubung yang nilainya paling besar.

* Oleh karena itu, kita bisa menggunakan array terurut ini, sebut saja array U, untuk proses kita. Setiap kita mencoba sebuah node W sebagai node minimum, iterasi array U dari depan. Jika node tersebut tidak termasuk dalam path node W ke root dan node tersebut menguntungkan, ambilah node itu ke dalam set jawaban. Dapat dipastikan node yang akan kita ambil ini terhubung dengan set jawaban kita (coba lakukan pembuktiannya). Sehingga kompleksitas kita menjadi O(N) per node dan kompleksitas akhir adalah O(N ^ 2).

* Namun, sampai di sini program kita masih TLE. Untuk mempercepat program kita, ada observasi terakhir yang perlu ditambah. Cobalah gambar sebuah tree (yang mengikuti aturan soal, disebut juga Max-Heap Tree), buatlah array U, lalu ambil sebuah node W. Sekarang, mulai dari indeks terdepan pada array U, ambillah node itu dan hitung rata-ratanya. Lakukan dari indeks pertama hingga indeks terakhir. Gambarkan nilai rata-rata sebagai grafik dengan sumbu X-nya adalah indeks dan sumbu Y-nya adalah rata-rata. Perhatikan grafikY-nya. Anda akan mendapati grafik yang menyerupai ini:

Anda akan menemui grafik U terbalik, entah sebagian atau penuh. Dari grafik inilah, Anda bisa melakukan binary search / ternary search untuk mendapatkan titik puncak grafik Anda. Ada beberapa kasus khusus yang harus ditangani pada binary search sehingga kompleksitasnya mendekati log^2 N.

Kompleksitas akhir adalah O(N log N) untuk ternary search dan O(N log^N) untuk binary search. Tingkat kesulitan soal ini adalah Hard.

(3)

C. BENSIN CINTA

* Pertama-tama cek terlebih dahulu apakah isi tangki Anda mula-mula lebih kecil atau lebih besar sama dengan permintaan sang kekasih. Jika sudah lebih dari sama dengan, maka permasalahan selesai. Selanjutnya, periksa apakah Anda mampu mencapai pom bensin. Jika mungkin, artinya Anda hanya perlu membagi permintaan kekasih dengan (isi tangki maksimal - konsumsi bensin dua kali jalan). Dua kali karena Anda perlu memastikan Anda bisa bolak-balik ke pom bensin. Jangan lupa cek pula untuk pulang pergi yang terakhir, apakah Anda bisa memenuhi permintaan kekasih dengan langsung mengosongkan tangki, atau perlu PP sekali lagi. Dengan demikian, soal ini dapat diselesaikan dalam O(1). Tentunya iterasi akan terkena TLE sehingga Anda memerlukan rumusan ini. * Tingkat kesulitan soal adalah Easy.

D. PASANGAN ANAGRAM

* Untuk mengetahui apakah string A adalah anagram dari string B, kita dapat mengurutkan huruf-huruf dalam masing-masing string A dan B, kemudian membandingkan apakah hasil pengurutannya sama. Jika sama, maka kedua string adalah anagram; jika tidak, maka mereka bukan anagram. Contoh: BACA dan ABCA. Setelah diurutkan, keduanya menjadi AABC, sehingga BACA adalah anagram dari ABCA.

* Dengan teknik tersebut, artinya langkah pertama yang harus dilakukan adalah mengurutkan huruf-huruf dalam setiap N string input, lalu mengurutkan string-string yang telah diubah tersebut agar mereka terkelompok dengan string-string anagramnya.

Contoh: string input terdiri dari {BACA, ACAB, KOL, LOK, PAM, OLK}. Diurutkan per string menjadi {AABC, AABC, KLO, KLO, AMP, KLO}. Lalu, kumpulan string modifikasi ini diurutkan lagi menjadi {AABC, AABC, AMP, KLO, KLO KLO} <= anagram-anagram sudah berkumpul menjadi satu.

* Setelah pengurutan selesai, maka permasalahan kita sudah menjadi lebih mudah. Bayangkan Anda hanya perlu mencari tahu jawaban dari masalah berikut “Diberikan X buah anggota, ada berapakah pasangan berbeda yang dapat dibentuk? Definisi pasangan adalah subset yang terdiri dari 2 anggota.” Misalnya, X adalah 5 dengan anggotanya ABCDE. Untuk A, akan ada 4 pasangan yang mungkin dibentuk, yaitu {AB, AC, AD, AE}. Selanjutnya, untuk B, akan ada 3 pasangan yang mungkin dibentuk, yaitu {BC, BD, BE}. Perhatikan bahwa BA bukan pasangan yang dapat dihitung lagi karena sudah dicatat sebagai AB sebelumnya. Lanjutkan perhitungan maka Anda menemukan jawabannya adalah 4 + 3 + 2 + 1 + 0 = 10. Asumsikan banyaknya pasangan untuk sebuah nilai X didefinisikan sebagai f(X). Sehingga f(5) = 10.

* Gunakanlah penyelesaian subproblem itu ke soal semula kita dengan X adalah banyaknya anagram untuk sebuah string. Pada contoh di poin ke-2, X kita berturut-turut menjadi {2, 1, 3}. Sehingga jawaban untuk kasus ini menjadi f(2) + f(1) + f(3). Tentunya pencarian nilai f(X) tidak dapat diiterasi, karena kompleksitas program menjadi O(N^2). Carilah sebuah rumusan Matematika untuk f(X) sehingga kompleksitas penghitungan program adalah O(N * 1), yaitu O(N).

* Kompleksitas akhir yang diekspektasi juri adalah O(N log N) untuk sorting dan O(N) untuk penghitungan jawaban. Tingkat kesulitan soal ini adalah easy-medium.

(4)

E. MENULIS ESAI

* Salah satu penjelasan soal yang paling penting adalah “Setiap nilai Aij adalah sebuah bilangan 2k dan unik.” Karena ketentuan ini, kita bisa selalu mengambil Aij dengan nilai terbesar sementara. Tentu saja soal i dan j harus bisa diambil (tidak melebihi jumlah soal maks yang dikerjakan dan waktu pengerjaan masih masuk dalam batas). Mengapa demikian? Alasannya karena meskipun semua 2m dengan m < k dijumlahkan semuanya, totalnya masih lebih kecil dari 2k itu sendiri. Sehingga akan selalu menguntungkan untuk mengambil yang terbesar.

* Yang dilakukan adalah mengurutkan semua Aij dan mengambil satu per satu dari paling besar. Perbaharui data pada tiap query update dan lakukan penghitungan pada tiap query pertanyaan. Kompleksitas program adalah O(Q * N log N) dan tingkat kesulitan soal adalah medium-hard.

F. SATU NOL

* Data setiap mahasiswa dapat direpresentasikan sebagai titik pada koordinat kartesian. Sehingga total dari absolut selisih tinggi dan berat badan adalah Manhattan Distance antara 2 titik. Setiap titik akan punya 2 jenis hubungan dengan titik lainnya, yaitu:

Pada gambar 1, Manhattan Distancenya adalah |XB - XA| + |YB - YA| dengan XB >= XA dan YB >= YA. Sehingga Manhattan Distance untuk gambar 1 dapat disederhanakan menjadi (XB + YB) - (XA + YA). Setiap titik manapun pasti akan mencari titik terkiri bawah yang terjauh agar selisihnya sebesar-besarnya. Akibatnya, semua titik akan memilih sebuah titik terkiri bawah yang sama, yaitu sebuah titik dengan (X + Y) terkecil. Begitu pula setiap titik manapun pasti akan mencari titik terkanan atas yang terjauh agar selisihnya sebesar-besarnya. Akibatnya, semua titik akan memilih sebuah titik terkanan atas yang sama, yaitu sebuah titik dengan (X + Y) terbesar. Kesimpulannya, untuk gambar 1 hanya akan ada sebuah pasangan optimal, yaitu titik dengan (X + Y) terbesar dan (X + Y) terkecil. Pada gambar 2, Manhattan Distancenya adalah |XB - XA| + |YB - YA| dengan XB >= XA dan YB >= YA. Sehingga Manhattan Distance untuk gambar 2 dapat disederhanakan menjadi (XA - YA) + (XB - YB). Semakin negatif (X - Y)-nya, titik akan berada di kiri atas, sedangkan semakin positif titik dengan (X + Y)-nya, titik akan berada di kanan bawah. Prinsipnya sama dengan proses gambar 1, yaitu mencari titik terkanan bawah dan terkiri atas yang kemudian akan menjadi pasangan optimal, yaitu titik dengan (X - Y) terkecil dan (X - Y) terbesar.

Bandingkanlah kandidat jawaban dari masing-masing gambar, keluarkan yang terbesar.

Kompleksitas program adalah O(N). Tingkat kesulitan soal ini medium-hard (easy pada implementasi, cukup sulit pada observasi).

(5)

G. GEDUNG BARU

* Asumsikan Anda ingin meletakkan gedung sedemikian sehingga titik terkiri gedung ada pada titik L dan titik terkanan gedung ada pada titik R (baik ada penyangganya di titik L/R maupun tidak). Kondisi yang harus dipenuhi adalah: tanah paling tinggi dari rentang L hingga bagian tengah gedung DAN tanah paling tinggi dari rentang tengah gedung + 1 hingga R bernilai SAMA.

* Dengan brute force titik terkiri, kompleksitas Anda adalah O(N * M) dan mendapat TLE. Yang harus Anda lakukan adalah mengoptimasi bagian pencarian tanah tertinggi dari rentang A..B dengan struktur data tertentu. Anda bisa menggunakan segment tree untuk mendapatkan jawaban yang Anda inginkan dalam O(log N).

* Kompleksitas akhir yang diekspektasi juri adalah O(N log M) dengan tingkat kesulitan soal adalah medium.

H. BENTENG TAKESHI

* Soal ini adalah soal Dynamic Programming. Misalnya Anda sudah meloncat berkali-kali dengan berbagai cara, lalu suatu ketika Anda menemukan bahwa Anda berada pada sebuah tongkat dengan energi tertentu. Terlepas dari bagaimana Anda mencapai tongkat itu dengan energi sekian, permasalahan Anda mulai dari saat ini akan selalu memiliki solusi yang sama. Tentu saja, di sebuah tongkat yang sama dengan energi yang serupa, tentu solusinya juga sama. Sehingga, state DP kita adalah [row][column][energy_left].

* Dari setiap tongkat, Anda punya beberapa opsi dan Anda harus mengambil yang optimal: 1. Meloncat ke kiri/atas

2. Meloncat ke kanan/bawah

* Peloncatan terus dilakukan selama energi Anda masih lebih dari nol. Tentunya energi tepat nol hanya diperbolehkan ketika Anda sudah ada di pinggir kolam.

* Kompleksitas program adalah O(N * M * E) dengan tingkat kesulitan soal adalah medium.

I. MELIPAT KERTAS

* Beberapa observasi yang dilakukan:

1. Kertas secara konsisten memendek ke sebelah kiri.

2. Perbatasan yang sudah pernah terlipat sekali, tidak boleh dihitung terlipat lagi meskipun pada pelipatan-pelipatan selanjutnya berada di titik lipatan.

3. Setiap melipat, yang sesungguhnya dilakukan adalah memindahkan ketebalan di sebelah kanan titik pelipatan ke sebelah kiri titik pelipatan.

* Dengan demikian, kita bisa memaintain sebuah array yang menyimpan informasi ketebalan kertas pada setiap titik. Setiap pelipatan dilakukan di titik X, tambahkan jawaban sebanyak isi array indeks X, lalu mulai dari titik X+1 hingga tepat sebelum ujung kertas, pindahkan ketebalan kertas titik ke-m ke titik ke-n, dengan n adalah sebuah titik di sebelah kiri titik X yang absolut jaraknya ke titik X

(6)

sama dengan absolut jarak titik m (suatu titik di kanan titik pelipatan) ke titik X. Perbaharui data di program bahwa panjang kertas sekarang adalah X.

* Perhatikan ilustrasi berikut

Panjang kertas adalah 5 dan lipatan dilakukan 2 kali, yaitu di titik ke-3 dan 2. Isi array mula-mula adalah {1, 1, 1, 1, 1, 1}. Setelah lipatan pertama, array diperbaharui {1, 1, 2, 1, -, -}. Isi array yang perlu diperbaharui hanya dari cm ke-(1+1) hingga cm ke-(3-1). Mengapa? Lihat kembali poin observasi yang ke-2.

Lipat kembali di titik ke-2 dan perbaharui array menjadi {1, 1, 2, - , -, -}. Jawabannya adalah 1 + 2 = 3 lipatan.

* Prosedur ini memakan operasi sebanyak O(N) karena setiap titik maksimal hanya akan dipindahkan sebanyak 1 kali ke kiri. Setelah dipindahkan, titik dieliminasi dari proses (panjang kertas sudah diperpendek). Tingkat kesulitan soal ini adalah hard (mudah untuk implementasi, sulit pada observasi).

J. WAKKA DAN PERPUSTAKAAN RAKSASA

* Kunci pertama dari soal ini adalah menemukan fakta bahwa Wakka akan mengambil buku satu per satu dari yang lantainya paling rendah ke paling tinggi secara berurutan. Ia tidak mungkin bolak-balik naik turun karena hanya akan menyebabkan kerugian energi. Permasalahan yang tersisa adalah dari titik di sumbu X yang manakah ia harus mulai naik mengambil bukunya.

* Solusinya adalah dengan mencoba semua titik X dan mencari nilai yang paling optimal. Dengan coba-coba yang naïf, kompleksitas program adalah O(X * N) dan mendapat verdict TLE. Mari kita coba simplifikasi permasalahannya. Ketika Wakka berdiri di titik X, lalu mencoba mengambil semua buku dan ternyata butuh energi sebesar E, maka berapakah energi yang dibutuhkan Wakka jika mulai di titik X+1? Kita tidak perlu menghitung ulang semuanya, cukup memaintain dua buah data, yaitu berapa jumlah buku yang berada di sebelah kiri titik X, sebut sebagai EKI, dan berapa buku yang berada di sebelah kanan titik Y, sebut sebagai EKA. Dengan bergeser satu titik ke X+1, tentu kita butuh tambahan energi sebanyak EKI dan menghemat energi sebanyak EKA. Penjelasannya karena kita menjauh sebanyak 1 unit dari EKI buah buku dan mendekat sebanyak 1 unit ke EKA buah buku. Dengan demikian, kita dapat menghitung energi yang dibutuhkan di titik X+1 dalam O(1).

Referensi

Dokumen terkait

- Praktikan mendapat guru pamong yakni Andang Budiyono, S.Pd yang sudah ber pengalaman dalam mengajar membantu dan menuntun praktikan dalam menyusun rencana

Deflasi terjadi karena adanya penurunan harga yang ditunjukkan oleh penurunan indeks pada kelompok barang dan jasa antara lain: kelompok bahan makanan 1,18 persen; kelompok perumahan,

The AP's SSID does not exist in the WLSE database of know BSSIDs.. The AP's BSSID does not exist in the WLSE database of

Selanjutnya kutipan dari Ibnul Qayyim lebih lanjut menjelaskan,”Perhiasan (dari emas atau perak) yang diperbolehkan, karena pembuatan (menjadi perhiasan) yang

Pada penelitian ini, hasil uji statistik menggunakan uji Mann Whitney untuk melihat perbedaan pengetahuan siswa tentang buah dan sayur pada kelompok media video

3. Program peningkatan disiplin aparatur, yang berkaitan dengan pengadaan pakaian dinas aparatur diupayakan melalui pengadaan secara mandiri. Program Fasilitasi Pindah/Purna

Secara alamiah, followers Anda akan semangat sekali follow akun Anda saat pertama kali mereka mengenal produk Anda, namun jika sudah lewat dari 1 atau 2 bulan,

Hasil penelitian terhadap tujuh pasang tuna wicara di kota Banjarmasin, tentang upaya yang dilakukan dalam membentuk keluarga sakinah adalah semua responden berusaha