PENYISIHAN PEMROGRAMAN GEMASTIK

dokumen-dokumen yang mirip
PENYISIHAN PEMROGRAMAN GEMASTIK

BUKLET SOAL. PENYISIHAN PEMROGRAMAN GEMASTIK September Soal

Olimpiade Sains Nasional 2015 Bidang Informatika. Pembahasan

PEMBAHASAN SOAL FINAL BNPCHS 2014

Pembahasan OSN Informatika 2017

Pembahasan Penyisihan Competitive Programming Tingkat Mahasiswa. CompFest 2013

Pembahasan Penyisihan Competitive Programming Tingkat SMA. CompFest Kontributor: Ashar Fuadi Gede Wahyu Adi Pramana William Gozali

Algoritma Pemrograman Fery Updi,M.Kom

Algoritma Greedy untuk Pengambilan Keputusan dalam Permainan Kartu Hearts

OSN 2013 Bidang Informatika. Pembahasan Soal

Penggabungan Algoritma Brute Force dan Backtracking dalam Travelling Thief Problem

Algoritma Greedy pada Board Game Saboteur

Penyelesaian Masalah Closest Pair dengan Algoritma Divide and Conquer

Penggunaan Algoritma Greedy untuk menyelesaikan Permainan Othello

Pembuatan Musik Tanpa Pola Dengan Menggunakan Algoritma Runut Balik

Mencari Banyak Posisi yang dapat Dijangkau sebuah Lingkaran dengan Dynamic Programming

PERMASALAHAN OPTIMASI 0-1 KNAPSACK DAN PERBANDINGAN BEBERAPA ALGORITMA PEMECAHANNYA

IMPLEMENTASI ALGORITMA GREEDY PADA PERMAINAN OTHELLO

Menyelesaikan Puzzle Matematika Braingle dengan Algoritma Brute Force

UNIVERSITAS GUNADARMA

Eksplorasi Algoritma Brute Force, Greedy, dan Dynamic Programming untuk Persoalan Integer Knapsack

BAB III ANALISIS DAN KEBUTUHAN ALGORITMA

EKSPLORASI ALGORITMA BRUTE FORCE, GREEDY DAN PEMROGRAMAN DINAMIS PADA PENYELESAIAN MASALAH 0/1 KNAPSACK

Penyempurnaan Intelegensa Buatan Mode AI ++ Ragnapolis dengan Langkah Penjualan Kota Berbasiskan Algoritma Greedy

Strategi Perancangan Bot Player pada Permainan Tradisional Congklak dengan Algoritma Greedy

Perbandingan Algoritma Brute Force, Divide and conquer, dan Dynamic Programming untuk Solusi Maximum Subarray Problem

Pencarian Solusi Optimal dalam Permainan Congklak dengan Program Dinamis

BAB 1 PENDAHULUAN. 1.1 Latar Belakang

Penerapan Program Dinamis untuk Optimisasi Taktik Pit Stop F1

Bagi peserta OSN 2014 dan calon peserta Open OSN William Gozali, Teknis OSN

PERBANDINGAN APLIKASI ALGORITMA BRUTE-FORCE DAN KOMBINASI ALGORITMA BREADTH FIRST SEARCH DAN GREEDY DALAM PENCARIAN SOLUSI PERMAINAN TREASURE HUNT

TUGAS RESUME MATERI KULIAH ALGORITMA DAN STRUKTUR DATA STRATEGI ALGORITMA : H

DAFTAR SINGKATAN. : Bahan Bakar Minyak : Programmable Logic Controller :Tarif Dasar Listrik :Kilo Watt Hour

BAB IV ANALISA DAN PENGUJIAN

Aplikasi Algoritma Greedy pada Permainan Kartu Truf Pass

Penggunaan Brute Force untuk Mendeteksi Potensi Terjadinya Deadlock

Aplikasi Algoritma MiniMax pada Beberapa Permainan Papan

Penentuan Lokasi Pemasaran Produk dengan Media Periklanan Menggunakan Algoritma Greedy

Penyelesaian Persoalan Penukaran Uang dengan Program Dinamis

Penerapan Algoritma Greedy dalam Permainan Tradisional Congklak

STRATEGI DIVIDE AND CONQUER

Sebuah algoritma tidak saja harus benar, tetapi juga harus mangkus (efisien). Algoritma yang bagus adalah algoritma yang mangkus.

Aplikasi Algoritma Greedy dalam Permainan Kartu Truf

BAB 1 PENDAHULUAN. Permasalahan pemotongan bahan baku menjadi beberapa bagian untuk diproses

Aplikasi Algoritma Greedy untuk Pergerakan Musuh pada Permainan Pac-Man

I. PENDAHULUAN II. DASAR TEORI. Contoh lainnya: Solusi: 0= V,1= I,2= O,3= R, 4= N,5= L,7= A,8= F,9= E.

Soal hari Selasa (13/10) Latihan 7 AN

Tujuan : A. Percabangan Percabangan di dalam Java terdapat 2 macam, yaitu dengan memakai if dan switch.

Implementasi Logika Penurunan Persamaan Aritmatika pada Program Komputer

PROGRAM STUDI S1 SISTEM KOMPUTER UNIVERSITAS DIPONEGORO. Oky Dwi Nurhayati, ST, MT

Perbandingan Algoritma Brute Force dan Breadth First Search dalam Permainan Onet

Penyelesaian Berbagai Permasalahan Algoritma dengan Kombinasi Algoritma Brute Force dan Greedy

Strategi Algoritma Penyelesaian Puzzle Hanjie

BAB I PENDAHULUAN. Pada tahun 1947, George B. Dantzig, seorang anggota kelompok penelitian

Gambar 13.1 Ilustrasi proses algoritma sorting

Aplikasi Graf pada Persoalan Lintasan Terpendek dengan Algoritma Dijkstra

Kompetisi Pemrograman IV Babak Final

24/09/2017 PERULANGAN

Penerapan Algoritma Backtracking untuk Menyelesaikan Permainan Hashiwokakero

Pemrograman Berorientasi Objek. Beni Suranto, S.T.

Penerapan Algoritma Brute Force pada Permainan Kartu 24 (24 game)

Penyelesaian Barisan Rekursif dengan Kompleksitas Logaritmik Menggunakan Pemangkatan Matriks

Program Dinamis (Dynamic Programming)

Decrease and Conquer

Bab 2 LANDASAN TEORI

MODUL PRAKTIKUM STRUKTUR DATA DAN ALGORITMA BUBBLE SORT, SELECTION SORT, INSERTION SORT

BAB 3 PENANGANAN JARINGAN KOMUNIKASI MULTIHOP TERKONFIGURASI SENDIRI UNTUK PAIRFORM-COMMUNICATION

Analisis Permainan FLIP Menggunakan Algoritma Program Dinamis

Penerapan Algoritma Greedy pada Permainan Tower Defense

Analisis Beberapa Algoritma dalam Menyelesaikan Pencarian Jalan Terpendek

Algoritma Exhaustive Search Dalam Permainan Congklak

BAB II LANDASAN TEORI

BAB III PEMBAHASAN. pemrograman nonlinear dan penerapannya dalam penetapan jumlah produksi

BAB II KAJIAN TEORI 2.1 Kajian Penelitian Sebelumnya

Pemilihan Monster yang Akan Digunakan dalam Permainan Yu-Gi-Oh! Capsule Monster Coliseum

Final Programming Competition (Mahasiswa)

Implementasi Algoritma Greedy dalam Pembagian kerja pada Mesin yang Identik

Penggunaan Algoritma Greedy untuk Mencari Solusi Optimal dalam Permainan Brick Breaker

Pemrograman Fery Updi,M.Kom

Penerapan Algoritma Greedy pada Intelegensia Buatan untuk Transfer Pemain dalam Permainan Simulasi Sepakbola

Berbagai Variasi Teknik Program Dinamis dalam Penyelesaian Masalah

Berkas Soal Penyisihan Competitive Programming Tingkat Mahasiswa. CompFest 2013

LAMPIRAN Perusahaan ini sudah berjalan berapa lama? 2. Perusahaan ini bergerak di bidang apa?

3/17/16 Testing dan Audit Perangkat Lunak - Universitas Mercu Buana Yogyakarta

PUSAT ALAT PERMAINAN EDUKATIF. No Gambar Nama Manfaat dan Cara Bermain Usia Harga (Rp) MAINAN KAYU

Penerapan Algoritma DFS pada Permainan Sudoku dengan Backtracking

KONTRAK PERKULIAHAN TIM KONSORSIUM

Strategi Memenangkan Permainan Domino dengan Mengunakan Algoritma Brute Force dan Greedy

REKAYASA PERANGKAT LUNAK. 3 sks Sri Rezeki Candra Nursari reezeki2011.wordpress.com

Pemanfaatan Algoritma Runut-Balik dalam Menyelesaikan Puzzle NeurOn dalam Permainan Logical Cell

BAB III PERANCANGAN KECERDASAN-BUATAN ROBOT PENCARI JALUR

SELAMAT ATAS PILIHAN ANDA MENGGUNAKAN TUDUNG HISAP (EXHAUST HOOD) DOMO

Penentuan Menu Makan dengan Pemrograman Dinamis

PUSAT ALAT PERMAINAN EDUKATIF. No Gambar Nama Manfaat dan Cara Bermain Harga (Rp) MAINAN KAYU

Sorting Algorithms. Buble Sort

METODE GREEDY. Secara matematis, masalah knapsack tersebut dapat ditulis sebagai berikut :

2. Sebuah prosedur langkah demi langkah yang pasti untuk menyelesaikan sebuah masalah disebut : a. Proses b. Program c. Algoritma d. Prosesor e.

Penerapan Algoritma Brute Force dalam mencari Faktor Prima pada suatu Bilangan

Pemecahan Masalah Longest Increasing Subsequence Memanfaatkan Program Dinamis dan Binary Search

Transkripsi:

BUKLET PEMBAHASAN PENYISIHAN PEMROGRAMAN GEMASTIK 9 2016 Soal Soal Kode Judul Penulis A Membangun Menara William Gozali B Kode Keras Alham Fikri Aji C Menggemaskan dan Cantik Alham Fikri Aji D Saklar Lhompat Ashar Fuadi E Libur Tahun Baru Ashar Fuadi F Kartu Truf Felix Halim

A. Membangun Menara Oleh: William Gozali Tema: sorting Ini adalah soal paling mudah pada penyisihan GEMASTIK 9. Untuk setiap balok yang ada, kita boleh memutar orientasi balok tersebut sesuka hati. Artinya, untuk membentuk menara tertinggi/terendah, kita cukup memutar setiap balok sehingga sisi terpanjang/terpendek balok menjadi tinggi balok tersebut. Dengan kata lain, untuk setiap balok, cari panjang sisi maksimum dan minimumnya. Kompleksitas: O(N). B. Kode Keras Oleh: Alham Fikri Aji Tema: line sweep, case study Pertama tama, perhatikan bahwa hanya ada 3 kemungkinan jawaban: 1, 1, dan 2. 1 artinya tidak mungkin. Ini terjadi jika interval i berada di dalam interval lain j. Dengan kata lain, terdapat j!= i dengan S[j] S[i] < E[i] E[j]. 1 artinya ada waktu X dengan S[i] X < E[i], dan tidak ada orang lain selain i yang online pada waktu X. Jika kondisi 1 dan 1 tidak terjadi, maka jawabannya pasti 2. Pembaca dipersilakan untuk membuktikan sendiri kenapa jawaban tidak mungkin lebih dari 2. Berdasarkan analisis tersebut, kita tinggal mendeteksi apakah setiap interval i termasuk pada kasus 1 atau 1. Kasus 1 : Terdapat 86.400 kemungkinan waktu. Untuk setiap waktu X, carilah interval k yang melingkupi X dan memiliki nilai E terbesar. Hal ini dapat dilakukan dengan metode line sweep atau sliding window. Pada setiap waktu X, asumsikan variabel k adalah suatu interval dengan S[k] X E[k], yang mana E[k] adalah terbesar di antara setiap k. Setiap kali kita iterasi nilai X baru, jika itu sama dengan suatu S[i], cek apakah nilai E[i] lebih besar daripada E[k]. Jika iya, perbarui nilai k dengan i. Jika tidak, maka dapat dijamin bahwa interval i tertutup oleh interval k. Artinya, interval i masuk dalam kasus 1. Perlu diperhatikan juga jika ada dua interval yang identik, maka kedua interval tersebut masuk ke dalam kasus 1. Kasus 1 : Kita bisa melakukan line sweep serupa dengan kasus 1. Pertama tama, kumpulkan semua titik S[i] dan E[i], kemudian urutkan. Siapkan juga sebuah struktur data set. Lalu, iterasi semua titik. Untuk setiap titik, jika itu adalah S[i], masukkan i ke dalam set, dan jika menemukan 1

E[i], keluarkan i dari set. Jika pada suatu waktu X, set tersebut tepat berisi 1 anggota, maka anggota set tersebut masuk ke dalam kasus 1. C. Menggemaskan dan Cantik Oleh: Alham Fikri Aji Tema: greedy Misalkan {a, b, c} adalah 3 orang dengan nilai kegemasan tertinggi. Maka, {a, b, c} merupakan calon terkuat untuk tim KegeMasan. Namun ada kemungkinan {a, b, c} juga memiliki nilai kecantikan yang tinggi, sehingga mereka juga berkemungkinan menjadi tim KecanTIKan. Dengan demikian, maka kita masih memerlukan {d, e, f}, yakni 3 orang dengan nilai kegemasan tertinggi setelah {a, b, c} sebagai calon terkuat selanjutnya. Berdasarkan pengamatan di atas, calon solusi adalah 6 orang terkuat berdasarkan nilai kecantikan dan 6 orang terkuat berdasarkan nilai kegemasan. Kumpulkan mereka dalah satu himpunan calon S. Ukuran S paling besar adalah 12. Setelah itu, lakukan brute force untuk membentuk tim KegeMasan dan KecanTIKan dari keduabelas orang tersebut. Kompleksitas: O(mengambil 6 orang terkuat) + O( brute force pembagian) (sekitar 3^12). D. Saklar Lhompat Oleh: Ashar Fuadi Ilustrasi oleh: William Gozali Tema: ad hoc Jika kita memiliki K buah stop kontak, apakah mungkin L steker lurus dan B steker bengkok dapat terpasang seluruhnya? Untuk mengetahui ini, kita harus tahu terlebih dahulu bagaimana cara pencolokan steker steker yang efisien. Pertama tama, jika kita ingin menyambungkan stop kontak pada stop kontak lain, akan optimal jika stekernya dicolok pada lubang tengah dari sebuah stop kontak yang sudah ada. Karena jika dipasang pada lubang pinggir, akan memakan tempat yang sebenarnya bisa dipakai untuk steker steker bengkok. Dengan demikian, untuk K buah stop kontak, kita memiliki: 2K buah lubang pinggir K+1 buah lubang tengah Maka, selanjutnya kita tinggal distribusikan L dan B pada lubang lubang tersebut. Prioritas pertama adalah memasang steker steker bengkok ke lubang pinggir. Jika lubang tidak cukup, kita pasangkan sisa steker bengkok ke lubang tengah. Jika kita pasang steker bengkok ke lubang tengah, maka setiap saklar akan menghabiskan 2 lubang. Setelah semua steker 2

bengkok terpasang, kita tinggal hitung lubang tersisa, dan cek apakah lubang tersisa steker lurus. Dengan cara di atas, kita tinggal mencoba semua nilai K untuk mencari solusi yang terbaik. Kompleksitas solusi di atas bergantung pada implementasi. Namun dengan implementasi yang efisien, solusi di atas adalah O(N), dengan N adalah jawabannya. Catatan penulis 1 : Contoh kasus uji ketiga mengecoh; karena sesungguhnya susunan tersebut (yang mana tidak optimal) kebetulan menghasilkan jawaban yang sama dengan susunan optimal. Catatan penulis 2 : Awalnya, batasan 2 L+B direncanakan sebagai 1 L+B. Hal ini memungkinkan adanya tricky case: jika laptop hanya ada 1, tidak perlu membeli stop kontak; cukup colokkan saja charger nya langsung ke tembok :) Namun, kami merasa ini terlalu kejam dan menggantinya. E. Libur Akhir Tahun Oleh: Ashar Fuadi Tema: dynamic programming Misalkan dp[i][s] adalah besarnya keindahan maksimum jika Budi berangkat dari kota i menuju kota Astik, dengan anggaran sebesar s. Nilai dp[i][s] didefinisikan sebagai berikut: dp[i][s] = 0, jika i = N (sudah sampai di kota Astik). max( V[i] + dp[i+1][s K[i]] (naik kereta; hanya jika s K[i]) max{dp[i+1][s P], dp[i+2][s P],, dp[n][s P]} (naik pesawat; hanya jika s P) ) Jawabannya adalah dp[1][s]. Jika rekurens di atas langsung diimplementasikan, kompleksitasnya adalah O(N^3), yang tentunya akan mendapatkan TLE. Rekurens tersebut perlu dioptimisasi. Terdapat setidaknya dua cara: 1. Tambahkan parameter baru: sedang naik pesawat Sekarang, state dp akan menjadi dp[i][s][p]. Variabel p adalah variabel boolean menunjukkan apakah sekarang kita sedang naik pesawat atau tidak. Rekurensnya menjadi: dp[i][s][p] = 3

0, jika i = N (sudah sampai di kota Astik). max( V[i] + dp[i+1][s K[i]][false] (naik kereta; hanya jika s K[i]) dp[i+1][s P][true] (naik pesawat; hanya jika p = false dan s P) dp[i+1][s][true] (melanjutkan perjalanan pesawat; hanya jika p = true) ) Kompleksitasnya menjadi O(N^2). 2. Buat array bantuan untuk akumulasi DP Perhatikan bahwa bottleneck perhitungan DP awal kita ada pada perhitungan saat Budi memilih naik pesawat: kita harus loop untuk mencoba semua kemungkinan kota akhir tujuan pesawat tersebut. Perhatikan sekali lagi ekspresi berikut ini: max{dp[i+1][s P], dp[i+2][s P],, dp[n][s P]} Dimensi kedua selalu sama, dan dimensi pertama adalah i+1, i+2, N. Maka, kita sebenarnya bisa membuat array lain, sebut saja dpmax[][], yang didefinisikan sebagai berikut: atau bisa juga ditulis seperti ini: dpmax[i][s] = max{dp[i][s], dp[i+1][s], dp[i+2][s],, dp[n][s]} dpmax[i][s] = max(dp[i][s], dpmax[i+1][s]) Sehingga, nilai pilihan untuk naik pesawat bisa disederhanakan menjadi dpmax[i+1][s P]. Kompleksitasnya juga menjadi O(N^2). F. Kartu Truf Oleh: Felix Halim Tema: probability, combinatorics Misalkan kartu yang kita keluarkan berjenis S. Misalkan di tangan kita terdapat K buah kartu berjenis S. Artinya, terdapat 12 K kartu berjenis S yang ada di tangan pemain pemain selain kita. Kita bisa lakukan brute force untuk mencoba semua distribusi 12 K kartu pada 3 pemain lainnya; yakni terdapat 3^(12 K) kemungkinan. Jawaban akhirnya adalah total peluang distribusi yang menyebabkan Anda menang. 4

Untuk menentukan apakah sebuah distribusi menyebabkan kita menang, cukup mudah. Kita akan menang hanya jika setiap pemain lainnya tidak memiliki kartu berjenis S yang bernilai lebih tinggi daripada kartu yang hendak Anda keluarkan. Yang lebih menantang adalah menghitung peluang sebuah distribusi terjadi. Misalkan C(i, j) = banyaknya cara memilih j benda dari i benda. Pertama pertama, hitung ada berapa cara pembagian 52 kartu kepada 4 orang, dengan 13 kartu kita sudah ditentukan dari awal. Banyaknya cara adalah: C(39, 13) * C(26, 13). (i) Kemudian, misalkan dalam distribusi tersebut orang 1 mendapat A buah kartu berjenis S, orang 2 mendapat B buah kartu berjenis S, dan orang 3 mendapat C buah kartu berjenis S. Banyaknya cara distribusi ini terjadi adalah C(39, 13 A) * C(12 K, A) * C(39 (13 A), 13 B) * C(12 K A, B). (ii) Peluang sebuah distribusi terjadi adalah hasil pembagian ekspresi (i) dengan (ii). Catatan: alih alih brute force, dapat juga dilakukan DP untuk menghitung semua distribusi. Observasinya adalah: untuk setiap pemain lainnya, kita hanya peduli berapa banyaknya kartu yang nilainya lebih rendah dan banyaknya kartu yang lebih tinggi daripada kartu yang kita pegang. Sisanya diserahkan kepada pembaca. 5