pembahasan bnpchs final 2014

Upload: nabil-muhammad-firdaus

Post on 13-Feb-2018

228 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/23/2019 Pembahasan Bnpchs Final 2014

    1/6

    By Jessica Handojo (lechjeda) 2014.

    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 rata-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.

  • 7/23/2019 Pembahasan Bnpchs Final 2014

    2/6

    By Jessica Handojo (lechjeda) 2014.

    * 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 nodetersebut 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 grafiknya. 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.

  • 7/23/2019 Pembahasan Bnpchs Final 2014

    3/6

    By Jessica Handojo (lechjeda) 2014.

    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}

  • 7/23/2019 Pembahasan Bnpchs Final 2014

    4/6

    By Jessica Handojo (lechjeda) 2014.

    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. Sehinggatotal 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 >= XAdan 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>= XAdan 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).

  • 7/23/2019 Pembahasan Bnpchs Final 2014

    5/6

    By Jessica Handojo (lechjeda) 2014.

    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

    ke-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

  • 7/23/2019 Pembahasan Bnpchs Final 2014

    6/6

    By Jessica Handojo (lechjeda) 2014.

    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, - , -, -}. Jawabannyaadalah 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. Dengancoba-coba yang naf, 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).

    * Kompleksitas program adalah O(X) dengan tingkat kesulitan adalah medium-hard.