TROLLS 2024: OSN-P SMA Edition Bidang Informatika Pembahasan Soal TROLLS 2024 Informatika Olympus Kesatuan Bangsa A. Memakan Kue Abridged Problem Statement Diberikan array A dan B berisi N bilangan, buatlah suatu array D (1 ≤ Di ≤ N ) yang berisi K bilangan yang memenuhi untuk 1 ≤ i < K berlaku ADi < ADi+1 dan jumlah BDi semaksimal mungkin. Bagian Pemahaman Kasus uji untuk menjawab soal A1, A2, dan A3. N =7 A = [5, 4, 7, 4, 1, 1, 3] B = [4, 3, 2, 7, 10, 2, 5] Soal A1 Manakah diantara berikut yang merupakan urutan makan kue valid yang optimal? a. 5, 6, 7, 4, 2, 1, 3 → tidak memenuhi syarat b. 5, 7, 4, 1, 3 → jawaban benar c. 5, 6, 7, 2, 1, 3 → tidak memenuhi syarat d. 5, 7, 4, 2, 1, 3 → tidak memenuhi syarat e. 5, 6, 7, 4, 3 → tidak memenuhi syarat Soal A2 Berapa total kelezatan kue yang dimakan Pak Dengklek jika urutan makan kue nya optimal? Solusi Urutan makan kue = 5, 7, 4, 1, 3 Total kelezatan = B5 + B7 + B4 + B1 + B3 = 10 + 5 + 7 + 4 + 2 = 28 1 TROLLS 2024 Informatika Olympus Kesatuan Bangsa Soal A3 Jika ukuran kue ke-2 berubah menjadi 2 dan ukuran kue ke-3 berubah menjadi 2, berapa total kelezatan kue dengan urutan makan yang optimal? Solusi Kasus uji baru: N =7 A = [5, 2, 2, 4, 1, 1, 3] B = [4, 3, 2, 7, 10, 2, 5] Urutan makan kue = 5, 2, 7, 4, 1 Total kelezatan = B5 + B2 + B7 + B4 + B1 = 10 + 3 + 5 + 7 + 4 = 29 Bagian Pemrograman Subsoal 1 (Mudah) Tidak ada dua kue dengan ukuran yang sama. Solusi Karena semua nilai Ai berbeda, kita dapat memakai semua kue yang ada. Untuk mengeluarkan urutannya bisa dengan menggunakan array untuk menyimpan indeks kue yang memiliki ukuran i lalu mengiterasi ukurannya dari 1 sampai N . Kompleksitas = O(N ) Subsoal 2 (Sulit) Tidak ada batasan tambahan. Solusi Jelas jika terdapat dua atau lebih kue yang memiliki ukuran sama, kita hanya bisa memilih satu saja dan akan optimal bila kita memilih kue yang memiliki nilai Bi maksimal. Sama seperti solusi subsoal 1, kita gunakan array untuk menyimpan indeks kue yang memiliki ukuran i namun kali ini kita hanya ubah isi array tersebut jika nilai Bi dari indeks kue yang baru lebih besar. Kompleksitas = O(N ) 2 TROLLS 2024 Informatika Olympus Kesatuan Bangsa B. Membangun Pilar Abridged Problem Statement Diberikan array A berisi N bilangan. Definisikan f (j, i) (1 ≤ j < i ≤ N ) sebagai selisih dari Aj dengan Ai + Ai+1 + . . . + AN . Cari nilai minimum dari f (j, i) untuk semua pasangan (j, i) yang ada Bagian Pemahaman Kasus uji untuk menjawab soal B1, B2, dan B3. N =8 A = [21, 10, 23, 14, 5, 12, 7, 9] Soal B1 Jika Pak Dengklek memilih i = 7 pada langkah pertama, maka berapa indeks kayu yang harus dipilih Pak Dengklek pada langkah kedua agar selisih tinggi pilar sekecil mungkin? Solusi Agar selisih sekecil mungkin maka nilai Aj harus mendekati A7 + A8 = 7 + 9 = 16. Nilai Aj yang paling mendekati adalah 14, sehingga jawaban dari soal tersebut adalah 4. Soal B2 Berapakah nilai selisih pilar paling kecil yang mungkin? Solusi Dengan pasangan (2, 8) kita bisa mendapatkan |A2 − A8 | = |10 − 9| = 1 Soal B3 Benar atau Salah: Terdapat persis dua nilai i pada langkah pertama yang bisa membuat selisih tinggi pilar 2. Solusi Terdapat 2 pasangan yang bisa membentuk selisih 2, yaitu (7, 8) dan (4, 7). Terdapat 2 nilai i berbeda, sehingga jawaban untuk soal ini adalah BENAR. 3 TROLLS 2024 Informatika Olympus Kesatuan Bangsa Bagian Pemrograman Subsoal 1 (Mudah) • 1 ≤ N ≤ 1 000 Solusi Kita bisa melakukan brute force untuk semua pasangan yang ada. Brute force naif dengan kompleksitas O(N 3 ) tidak akan tembus time limit, sehingga bisa di optimisasi menggunakan suffix sum. Komplesitas = O(N 2 ) Subsoal 2 (Sulit) Tidak ada batasan tambahan. Solusi Disini kita definisikan suff (i) sebagai Ai + Ai+1 + . . . + AN . Perhatikan bahwa semakin besar nilai i, maka nilai dari suff (i) akan semakin kecil. Sifat monotonik ini mengartikan bahwa kita bisa melakukan binary search pada suffix sum array. Untuk suatu nilai j hanya terdapat maksimal dua i yang bisa membentuk selisih minimum, yaitu: 1. i terkecil dengan suff (i) ≤ Aj 2. i terbesar dengan suff (i) ≥ Aj Perhatikan bahwa jika nilai j memiliki dua kandidat i yang optimal, sudah pasti nilai i tersebut bersebelahan. Sehingga untuk setiap j , kita bisa melakukan binary search untuk mencari salah satu nilai i dan menggesernya untuk mendapatkan nilai i yang lain. Kompleksitas = O(N log N ) 4 TROLLS 2024 Informatika Olympus Kesatuan Bangsa C. Jatuhnya Majapahit Abridged Problem Statement Diberikan array A dan B yang berisi N bilangan. Buatlah K segmen [L, R] yang memenuhi syarat berikut: • L1 = 1, RK = N • Li < Ri • Ri + 1 = Li+1 (1 ≤ i < K) Skor suatu segmen adalah max(AL , AR , BL + BR ). Keluarkan jumlah skor seluruh segmen yang maksimal dari seluruh konfigurasi yang ada. Bagian Pemahaman Soal C1 Benar atau Salah: Jika Pak Dengklek bisa memilih pasangan bilangan (p, q) dan mengurangi nilai pertahanan kerajaan Majapahit sebesar K , maka Pak Dengklek juga bisa memilih pasangan bilangan (q, p) dan akan selalu mengurangi nilai pertahanan sebesar K juga. Solusi Karena soal tersebut mengikuti statement naskah soal, maka pasangan (p, q) berbeda dengan pasangan (q, p) karena pada pasangan (p, q) menggunakan nilai Ap sementara pasangan (q, p) menggunakan nilai Aq , sehingga jawaban soal ini adalah SALAH. Kasus uji untuk menjawab soal C2 dan C3. N =5 A = [6, 8, 5, 7, 4] B = [2, 4, 3, 3, 5] Soal C2 Berapa pengurangan nilai pertahanan jika Pak Dengklek memilih pasangan bilangan (1, 5) Solusi max(A1 , A5 , B1 + B5 ) = max(6, 4, 2 + 5) = 7 5 TROLLS 2024 Informatika Olympus Kesatuan Bangsa Soal C3 Pak Dengklek hanya bisa melakukan satu operasi saja kali ini. Pasangan bilangan manakah yang akan menurunkan nilai pertahanan terbesar? a. (1, 3) → 6 b. (4, 1) → 7 c. (2, 4) → 8 d. (5, 3) → 8 e. (2, 5) → 9 Bagian Pemrograman Subsoal 1 (Mudah) • 1 ≤ N ≤ 1 000 Solusi Kita dapat menyelesaikan subsoal ini dengan melakukan Dynamic Programming secara naif. Anggap dp(i) sebagai skor maksimum jika kita hanya mengganggap indeks 1 sampai i. Maka jawaban berada pada dp(N ). dp(i) = { dp(j) + max(Ai , Aj+1 , Bi + Bj+1 )} 1≤j<i−1 Base case dp(0) = 0 dan dp(i) = −∞ untuk i ̸= 0. Kompleksitas = O(N 2 ) 6 TROLLS 2024 Informatika Olympus Kesatuan Bangsa Subsoal 2 (Sulit) Tidak ada batasan tambahan. Solusi Terdapat satu observasi penting, yaitu: Misalkan [L, R] adalah salah satu segmen yang ada. Jika terdapat suatu bilangan j sehingga [L, j] dan [j + 1, R] membentuk segmen yang valid, maka pasti akan lebih optimal jika kita memecah segmen tersebut. Bukti: Jika skor segmen tersebut = AL , maka setelah dipecah, segmen [L, j] memiliki skor setidaknya AL dan segmen [j + 1, R] memiliki skor setidaknya 1. Yang berarti total skor setelah dipecah bertambah setidaknya 1. Hal ini juga berlaku jika skor segmen awal adalah AR . Untuk kasus skor segmen = BL + BR , setelah dipecah, segmen [L, j] memiliki skor tidak kurang dari BL + 1 dan segmen [j + 1, R] memiliki skor tidak kurang dari BR + 1. Yang dimana total skornya lebih besar dari segmen semula. Karena pada solusi optimal segmen sudah tidak bisa dipecah lagi, maka setiap segmen pasti memiliki panjang 2 atau 3. Maka solusi dp sebelumnya bisa dioptimisasi lagi menjadi dp(i) = max{dp(i − j) + max(Ai , Ai−j+1 , Bi + Bi−j+1 )} j∈{2, 3} Kompleksitas = O(N ) Bonus: Coba selesaikan soal ini dengan batasan → −1 000 000 000 ≤ Ai , Bi ≤ 1 000 000 000 7 TROLLS 2024 Informatika Olympus Kesatuan Bangsa D. Perbaikan Jalan Abridged Problem Statement Diberikan tree dengan N vertex dengan setiap jalannya memiliki nilai sendiri yang awalnya tersembunyi. Tiap vertex juga memiliki nilai sebesar jumlah nilai jalan yang masih nilainya tersembunyi dan terhubung ke vertex tersebut. Nilai vertex pada awalnya juga belum diketahui. Jawablah Q query dengan format berikut: 1. (1, X) nilai jalan bernomor X diketahui. 2. (2, X) nilai vertex X diketahui 3. (3, X, Y ) keluarkan "YA" jika nilai seluruh jalan yang dilalui dari X ke Y diketahui dan "TIDAK" jika belum. Bagian Pemahaman Soal D1 Benar atau Salah: Jika rumah S hanya terhubung ke dua jalan maka jika terdapat informasi (2, S), harga perbaikan dari masing-masing jalan yang terhubung dengan rumah S diketahui. Solusi Harga perbaikan dari masing-masing jalan bisa diketahui setelah informasi (2, S) jika vertex tersebut hanya terhubung ke satu jalan saja, jadi pernyataan tersebut SALAH. Soal D2 Benar atau Salah: Jika terdapat cara untuk berpindah dari rumah S ke rumah T menggunakan jalan yang sudah diperbaiki maka seluruh rumah yang berada dalam perjalanan S ke T (tidak termasuk S dan T ) terhubung ke setidaknya dua jalan yang sudah diperbaiki. Solusi Jika nilai seluruh jalan dari vertex S ke vertex T diketahui, maka seluruh vertex yang berada di jalan mereka (kecuali S dan T ) setidaknya terhubung ke 2 jalan yang nilainya diketahui, yaitu jalan yang menghubungan vertex tersebut dengan vertex sebelumnya dan jalan yang menghubungan vertex tersebut dengan vertex setalahnya. Pernyataan tersebut BENAR. Soal D3 Benar atau Salah: Jika jalan bernomor S terhubung ke rumah T dan jalan bernomor S adalah satusatunya jalan belum diperbaiki yang terhubung dengan rumah T , maka informasi (1, S) dan (2, T ) memberikan informasi yang sama. 8 TROLLS 2024 Informatika Olympus Kesatuan Bangsa Solusi Tentunya jelas jika jalanan terhubung yang nilainya belum diketahui tersisa 1, pasti nilai rumah sama dengan nilai jalan tersebut. Sehingga pernyataan tersebut BENAR. Bagian Pemrograman Subsoal 1 (Mudah) • Ui = i; Vi = i + 1 (1 ≤ i < N ) Solusi Terdapat beberapa solusi untuk subsoal ini, namun agar bisa mendekati solusi utama, kita akan menggunakan DSU (Disjoint Set Union). Jika terdapat suatu pasang vertex yang terhubung langsung dengan jalan yang diperbaiki, maka kita buat kedua vertex tersebut menjadi satu connected component. Query bertipe 1 dan 3 bisa kita selesaikan hanya dengan DSU. Untuk query 2, kita perlu mengecek apakah vertex tersebut masih terhubung dengan 2 jalan yang nilainya belum diketahui atau hanya tinggal tersisa 1. Jika tersisa 1 maka nilai dari jalan yang tersisa bisa diketahui. Jangan lupa bahwa tiap kali terdapat query tipe 1 dan tipe 2, kita bisa saja membuka nilai dari jalan baru, sehingga kita masih bisa meneruskan operasi pencarian nilai jalan baru. Hal ini bisa dengan mudah dilakukan menggunakan BFS. Kompleksitas = O(Qlog(N ) Subsoal 2 (Sulit) Tidak ada batasan tambahan. Solusi Jika suatu vertex terhubung dengan hanya 1 jalan saja yang belum diketahui nilainya dan telah ada suatu query tipe 2 dengan vertex tersebut, maka jalan yang tersisa dapat diketahui nilainya. Untuk mencari tahu jumlah jalan yang belum diketahui nilainya untuk tiap vertex kita bisa menyimpannya dalam array. Kita bisa menggabungkan solusi sebelumnya dengan observasi ini untuk mendapatkan AC . Kompleksitas = O(Qlog(N )) 9 TROLLS 2024 Informatika Olympus Kesatuan Bangsa E. Kuliner Yogyakarta Abridged Problem Statement Diberikan DAG dengan N vertex dan M edge dan tiap vertex memiliki nilai Ai dan warna Ti . Diberikan juga bilangan K . Buatlah suatu array P yang memenuhi syarat berikut: • Terdapat cara untuk bergerak dari Pi ke Pi+1 • TPi ̸= TPi+1 • Ukuran array P tidak lebih dari K Definisikan skor dari array P sebagai jumlahan APi Bagian Pemahaman Kasus uji untuk menjawab soal E1, E2, dan E3. A = [7, 4, 4, 3, 5] T = [3, 3, 2, 2, 4] K=2 Soal E1 Berapa jumlah kelezatan maksimal yang bisa didapatkan Pak Dengklek? Solusi P = [1, 3] Skor = A1 + A3 = 7 + 4 = 11 10 TROLLS 2024 Informatika Olympus Kesatuan Bangsa Soal E2 Benar atau Salah: Pak Dengklek dapat makan di warung makan 1 setelah makan di warung makan 2 Solusi Karena T1 sama dengan T2 , pernyataan tersebut SALAH Soal E3 Jika K = 3, maka berapakah jumlah kelezatan maksimal yang baru? Solusi P = [2, 5, 3] Skor = A2 + A5 + A3 = 4 + 5 + 4 = 13 Bagian Pemrograman Subsoal 1 (Mudah) • 1 ≤ Ti ≤ 2 Solusi Solusi subsoal ini sama dengan solusi penuh hanya saja nilai T nya lebih kecil. Kompleksitas = O(M KT ) Subsoal 2 (Sulit) Tidak ada batasan tambahan. Solusi Kita bisa menggunakan DP 3 state untuk menyelesaikan soal ini. Anggap dp(i)(c)(l) sebagai skor maksimum yang bisa di dapatkan jika telah sampai di vertex i dengan warna indeks yang diambil terakhir c dan path sepanjang l. Solusi DP ini valid karena di dalam graph tidak ada cycle. Untuk menentukan urutan dalam proses DP, bisa dengan menggunakan topological sort pada DAG. Anggap vertex-vertex yang memiliki outdegree menuju i disimpan dalam list in(i). c = Ti → dp(i)(c)(l) = max{dp(j)(c)(l), dp(j)(x)(l − 1) + Ai } j ∈ in(i) x ̸= c c ̸= Ti → dp(i)(c)(l) = max{dp(j)(c)(l)} j ∈ in(i) Jawaban terdapat pada max{dp(j)(c)(l)} l≤K Kompleksitas = O(M KT ) 11 TROLLS 2024 Informatika Olympus Kesatuan Bangsa F. Mencari Suara Abridged Problem Statement Diberikan N segmen yang ditandai dengan Li , Ri , dan Vi . Diberikan M pantangan juga yang ditandai dengan Xi dan Wi . Pada awalnya kita memiliki skor sebesar 0. Diberikan T dan K , pilihlah suatu indeks S dimana S+K−1 ≤ T . Untuk setiap segmen, jika S ≤ Li dan Ri ≤ S + K − 1, maka skor bertambah sebesar Vi . Untuk setiap pantangan, jika S ≤ Xi ≤ S + K − 1, maka skor berkurang sebesar Wi . Keluarkan skor maksimal yang mungkin. Bagian Pemahaman Kasus uji untuk menjawab soal F1 dan F2. N =3 M =2 T = 10 K=4 L = [1, 3, 6] R = [4, 3, 8] V = [20, 5, 15] X = [5, 2] W = [8, 12] Soal F1 Berapa suara maksimum yang bisa Pak Dengklek dapatkan? Solusi Dengan memilih S = 6, kita bisa mendapat skor sebesar V3 = 15 Soal F2 Jika W2 = 6, berapa suara maksimum yang bisa Pak Dengklek dapatkan? Solusi Dengan memilih S = 1, kita bisa mendapat skor sebesar V1 + V2 − W2 = 20 + 5 − 6 = 19 Soal F3 Benar atau Salah: Terdapat suatu kasus uji dimana bagaimanapun Pak Dengklek membangun tanah, Pak Dengklek tidak mendapat suara, namun kehilangan suara Solusi 12 TROLLS 2024 Informatika Olympus Kesatuan Bangsa Misalkan terdapat hanya 1 segmen dengan Li = 1, Ri = T , dan nilai Vi yang kecil. Serta K = T , dan juga terdapat beberapa pantangan dengan nilai Wi besar. Dengan kasus seperti itu, skor akan negatif sehingga Pak Dengklek kehilangan suara. Pernyataan tersebut BENAR. Bagian Pemrograman Subsoal 1 (Mudah) • 1 ≤ N, T ≤ 200 Solusi Lakukan brute force naik untuk setiap nilai S yang mungkin. Dengan implementasi yang tepat, solusi akan cukup cepat untuk menembus time limit. Kompleksitas = O((N + M )T 2 ) atau O((N + M )T ) tergantung implementasi. Subsoal 2 (Sulit) Tidak ada batasan tambahan. Solusi Jika batas nilai T adalah 200 000 maka soal ini dapat diselesaikan dengan sliding window. Namun, karena T bisa sampai 1 000 000 000 maka kita hanya bisa menggeser ke bagian-bagian yang sekiranya mengganti besar skor. Tentunya skor akan berubah jika S + K − 1 berada di salah satu indeks berikut: • Ri → skor bertambah sebesar Vi • Li + K → skor berkurang sebesar Vi • Xi → skor berkurang sebesar Wi • Xi + K → skor bertambah sebesar Wi Jelas bahwa jika panjang segmen lebih dari K maka kita bisa mengabaikan segmen tersebut. Untuk menyimpan keempat nilai-nilai penting diatas kita bisa menyimpannya dalam vector of pairs, dan disort berdasarkan nilai yang membuatnya penting. Algoritma ini dinamakan line sweep. Kompleksitas = O((N + M )log(N + M )) 13 TROLLS 2024 Informatika Olympus Kesatuan Bangsa Kontak: Instagram: @hanifchdn Email: hanifpietoyo@gmail.com 14