Hari 1 / Soal 1: Bukit dan Lembah Kode Soal: Batas Run-time: Batas Memori: Masukan: Keluaran: bukit 1 detik / test-case 1 MB Standard input Standard output Deskripsi Diberikan data ketinggian yang di catat dalam perjalanan dari suatu posisi awal ke posisi akhir. Data ketinggian adalah bilangan-bilangan integer (bulat) positif. Jalan kadang menaik, kadang menurun, kadang datar saja. Posisi dimana terjadi perubahan menaik kemudian menurun (boleh diselingi jalan datar) didefinisikan sebagai puncak dari suatu bukit. Sebaliknya, posisi terjadi perubahan dari menurun terus menaik (boleh diselingi bagian jalan yang datar) didefinisikan sebagai titik terbawah suatu lembah. Walaupun perubahan tersebut kecil saja, definisi itu tetap berlaku. Carilah beda ketinggian terbesar antara puncak bukit dengan titik terbawah lembah berikutnya atau sebaliknya antara titik terbawah lembah dengan puncak bukit berikutnya pada data perjalanan tersebut. Masukan Masukan berisi data yang bisa sangat banyak sekali. Setiap elemen data dalam baris tersendiri. Anda membacanya dari yang pertama hingga end of file; minimal ada dua data dalam masukan.. Keluaran Program hanya menghasilkan satu bilangan yang menyatakan beda ketinggian terbesar yang diperoleh. Perbedaan tinggi paling besar dijamin tidak akan melebihi harga long integer dalam Pascal. Contoh Masukan 10 26 26 35 35 27 30 30 45 10 8 9 Keluaran 37 Penjelasan Ada 12 data. Beda ketinggian pertama (10 ke 35) adalah 25, beda kedua (35 ke 27) adalah 8, beda ketiga (27 ke 45) adalah 18, beda ketinggian keempat (45 ke 8) adalah 37, dan beda ketinggian kelima (8-9) adalah 1. Jadi beda ketinggian tertinggi adalah 37. Petunjuk Standard I/O Banyak peserta yang tidak mengikuti PJJ karena berbagai alasan. Dalam deskripsi soal-soal PJJ diberikan contoh-contoh bagaimana membaca dari standard input/output. Tapi, ok sekarang diberikan contoh membaca semua bilangan dari standard input dengan format seperti yang digunakan pada sal Bukit-Lembah. var bil: integer; begin while not eof(input) do begin readln(bil); write(bil,' '); end; end. Misalnya, disimpan dengan nama coba.pas. Untuk mengujinya, buatlah file coba.txt berisi bilangan-bilangan dengan format seperti untuk soal Bukit-Lembah sbb. 34 2 44 2 4 5 245 3 32 Setelah dicompile, jalankan dengan perintah coba < coba.txt Soal-soal lainnya pun menggunakan standard input/output sehingga anda tidak perlu assign(...), dst. Hari 1 / Soal 2: Kata Spiral Kode Soal: Batas Run-time: Batas Memori: Masukan: Keluaran: spiral 1 detik / test-case 1 MB Standard input Standard output Deskripsi Suatu sistem sandi menyandikan kalimat yang diberikan dalam bantuk spiral. Penyusunan tersebut dilakukan membentuk matriks spiral yang dimulai pusat matriks 1 karakter pertama, lalu 1 karakter berikutnya ke kanan, lalu 1 karakter berikutnya ke bawah, lalu 2 karakter berikutnya ke kiri, lalu 2 karakter berikutnya ke atas, 3 karakter berikutnya ke kanan, 3 karakter berikutnya ke bawah, dan seterusnya hingga semua karakter dalam kalimat termasuk dalam spiral. Khususnya, karakter spasi di ganti dengan “_” (underscore), dan jika ada baris/kolom tersisa setelah karakter terakhir maka elemen-elemen matriks diisi juga dengan “_” (underscore) tsb. Misalnya kalimat “Seluruh peserta OSN bidang komputer harus mengerjakan soal-soal sebaikbaiknya untuk mendapatkan peringkat terbaik.” Dikodekan kedalam matriks sebagai berikut. b a i k . _ _ _ _ _ _ r a i k n y a _ u n t e b m e n g e r j a u t - _ b i d a n g k k _ k s _ h _ p e _ a _ t i u N u S e s k n m a a r S r u l e o _ e k b a O _ a t r m s n g e h _ r e t u p o d n s _ l a o s - l a a i r e p _ n a k t a p Masukan Program membaca satu baris teks paling panjang 250 karakter. Keluaran Program harus menghasilkan sejumlah baris sesuai dengan matriks yang dibentuk. Setiap baris keluaran berisikan karakter-karakter dari baris yang sama berturut-turut dari kolom paling kiri ke paling kanan tanpa pemisahan (karakter-karakter dituliskan bersambungan menjadi satu string serta jangan lupa setiap spasi menjadi underscore). Contoh 1 Masukan (tertulis dalam satu baris) Seluruh peserta OSN bidang komputer harus mengerjakan soal-soal sebaik-baiknya untuk mendapatkan peringkat terbaik. Keluaran baik.______ raiknya_unt ebmengerjau t-_bidangkk _ks_h_pe_a_ tiuNuSesknm aarSruleo_e kbaO_atrmsn geh_retupod ns_laos-laa irep_naktap Contoh 2 Masukan (tertulis dalam satu baris) TOKI Keluaran (ada ralat pada ralat ini) TO IK Contoh 3 Masukan (tertulis dalam satu baris) OSN Keluaran OS _N Contoh 4 Masukan (tertulis dalam satu baris) Bisakah Kamu????? Keluaran _h_Ka _aBim _kasu ????? Hari 1 / Soal 3: Faktorial Kode Soal: Batas Run-time: Batas Memori: Masukan: Keluaran: faktorial 1 detik / test-case 1 MB Standard input Standard output Deskripsi Pasti anda sudah pernah belajar apakah itu bilangan faktorial. Sesuai dengan definisinya bilangan faktorial n! = n.(n-1).(n-2)…..1. Untuk n yang kecil bilangan tersebut masih mudah dihitung dengan manual tetapi untuk n yang cukup besar bisa menghasilkan bilangan dengan jumlah digit yang amat banyak sehingga tentu melelahkan jika dihitung dengan manual bahkan dengan komputerpun kita perlu cara khusus untuk menanganinya akibat adanya batasan representasi bilangan integer. Oleh sebab itu dalam rumus-rumus bilangan faktorial tetap dinyatakan dalam bentuk n!, misalnya n!/(n-k)!k!. Untuk perhitungan (50! * 100! * 75!)/(73! * 99! * 52!) tentu tidak memungkinkan kalau masing-masing bilangan faktorialnya dihitung terlebih dahulu lalu diperkalikan/diperbagikan kemudian. Sebaliknya, akan lebih mudah jika dilakukan penyederhanaan dengan menghilangkan faktor-faktor yang sama antara pembilang (di atas tanda bagi) dan penyebut (di bawah tanda bagi) sampai tinggal sejumlah bilangan nonfaktorial yang tersisal. Contohnya. (50! * 100! * 75!)/(73! * 99! * 52!) = ( 74 * 75 * 100 ) / ( 51 * 52 ) yang berikutnya, dengan menguraikan ke faktor-faktor bilangan prima dapat disederhanakan lebih lanjut menjadi (catatan: notasi ^ adalah tanda pangkat). = (2 * 37 * 3 * 52 * 22 * 52) /(3 * 17 * 22 * 13) = (2 * 54 * 37)/(13 * 17) Dengan ekspresi tersebut, perhitungan kemudian menjadi lebih memungkinkan untuk dilakukan dibandingkan saat masih dalam bentuk faktorial. Buatlah program yang dapat melakukan penyederhanaan ekspresi perkalian/pembagian bilangan-bilangan faktorial hingga faktor-faktor bilangan prima seperti di atas. Masukan Masukan terdiri atas dua baris. Baris pertama menyatakan harga-harga n dari bilangan-bilangan faktorial yang berada pada bagian pembilang (yang dibagi). Baris kedua menyatakan harga-harga n dari bilangan-bilangan faktorial yang berada pada bagian penyebut. Format masing-masing bilangan sama sbb. Bilangan pertama menyatakan jumlah bilangan faktorial pada baris ybs. Jumlah bilangan tersebut paling sedikit 1 dan paling banyak 20. Misalkan jumlah bilangan itu m, berikutnya ada m bilangan bulat positif a, b, c, …,dst. yang masing-masing dapat berharga 2 sampai dengan 1000. Masing-masing bilangan tersebut menyatakan bilanga-bilangan faktorial a, b, c, … dst. Keluaran Keluaranya terdiri dari dua baris, baris pertama untuk pembilang dan beris kedua untuk penyebut. Bilangan-bilangan adalah bilangan prima yang tersisa dan untuk pangkat yang lebih dari 1 dituliskan di dalam tanda kurung langsung setelah bilangan prima ybs (tanpa spasi). Bilangan-bilangan prima dituliskan dari yang terkecil ke yang terbesar. Sekali lagi, penulisan pangkat hanya untuk bilangan prima dengan pangkat lebih dari 1. Jika salah satu dari pembilang atau penyebut berharga 1 maka baris untuk ybs dikosongkan (sebagai konsekuensi tidak adanya faktor bilangan prima padanya. Contoh 1 Masukan 3 50 100 75 3 73 99 52 Keluaran 2 5(4) 37 13 17 Contoh 2 Masukan 1 100 1 99 Keluaran 2(2) 5(2) Contoh 3 Masukan 1 48 1 49 Keluaran 7(2) Penjelasan: pada contoh kedua, baris kedua kosong dan pada contoh ketiga, baris pertama yang kosong. Hari 2 / Soal 1: Sandi Ayam Kode Soal: Batas Run-time: Batas Memori: Masukan: Keluaran: ayam 0,5 detik / test-case 16 MB Standard input Standard output Pak Dengklek punya tetangga baru yang berprofesi sebagai peternak ayam. Tentunya, tetangga baru ini memiliki beberapa ayam. Bebek-bebek Pak Dengklek tidak suka dengan kehadiran ayam-ayam ini, antara lain karena mereka curiga ayam-ayam tersebut akan melakukan hal-hal yang tidak baik. Dalam beberapa hari semenjak kedatangannya saja, bebek-bebek sudah menemukan goresan-goresan aneh di tanah. Setelah diteliti, para bebek menyimpulkan bahwa ayam-ayam tersebut sedang menuliskan sandi angka. Penelitian lebih lanjut memberikan hasil mengenai arti dari setiap sandi, seperti yang dijelaskan di bawah ini. Ayam-ayam menggunakan 20 macam simbol. Setiap simbol adalah hasil dari patokan paruh ayam (bulatan kecil) dan/atau goresan cakar ayam (garis). Bukti-bukti yang sejauh ini ada menunjukkan bahwa setiap simbol memiliki padanan seperti yang tertera pada gambar 1. Gambar 1. Terjemahan Sandi Angka Ayam Untuk membentuk angka yang benilai lebih dari 19, simbol-simbol di atas ditulis secara vertikal dan dibaca seperti layaknya bilangan dengan basis 20. Simbol dengan bobot lebih besar digores paling atas. Tentunya, dengan sistem ini para bebek berharap bahwa nilai satuan dari setiap simbol, mulai dari simbol yang mewakili satuan terkecil, adalah 1, 20, 400, 8000, dst. Akan tetapi, ayam-ayam tersebut lebih cerdas. Ternyata, harga satuan simbol ketiga dari bawah (bila ada) hanya 18 kali lebih besar dari harga satuan simbol kedua dari bawah. Akan tetapi untuk simbol-simbol berikutnya, nilai satuannya tetap 20 kali lebih besar daripada satuan sebelumnya. Untuk lebih jelasnya, lihat contoh berikut ini. Gambar 2. Contoh Sandi Ayam Seperti yang tertera pada gambar di atas, sandi di atas terdiri dari 4 simbol. Simbol paling atas melambangkan angka 2, simbol di bawahnya melambangkan angka 0, berikutnya angka 17 dan yang paling bawah melambangkan angka 1. Bila kita mengikuti sistem bilangan yang digunakan oleh para bebek (yang untungnya adalah sama seperti kita, desimal), maka angka yang dimaksud oleh sandi di atas adalah 14741 (= 2x7200 + 0x360 + 17x20 + 1). Para bebek memiliki kesulitan untuk menerjemahkan sandi-sandi yang panjang. Untuk itu, mereka meminta bantuan kalian untuk menerjemahkannya. FORMAT MASUKAN Masukan akan berisi sebuah angka yang tertulis dalam sandi ayam. Untuk mempermudah tugas kalian, patokan ayam akan dimasukkan sebagai titik (.), dan cakaran ayam akan dimasukkan sebagai tanda hubung (-). Simbol 0 (lingkaran besar) akan dimasukkan sebagai angka 0. Setiap dua simbol akan dipisahkan oleh sebuah baris kosong. Masukan akan diakhiri oleh penanda akhir berkas (end-of-file). Masukan berisi setidaknya sebuah simbol, tapi tidak lebih dari 30 simbol. Untuk setidaknya setengah dari total bobot testcase yang diujikan, masukan terdiri tidak lebih dari 14 simbol. CONTOH MASUKAN .. 0 .. . FORMAT KELUARAN Keluaran hanya terdiri dari sebuah baris berisi sebuah bilangan bulat yang merupakan hasil penerjemahan sandi ayam pada masukan. CONTOH KELUARAN 14741 Peringatan Keluaran untuk masukan dengan banyak simbol lebih dari 14 buah tidak dijamin dapat dimuat oleh sebuah variabel integer 64-bit bertanda (int64 di FreePascal). Hari 2 / Soal 2: Maze Kode Soal: Batas Run-time: Batas Memori: Masukan: Keluaran: maze 1 detik / test-case 1 MB Standard input Standard output Deskripsi Anda tahu permainan maze? Kalau melihat gambar berikut ini pasti tahu. Dalam permainan maze ini makhluk yang digambarkan dengan bulatan wajah Mr Groovy harus mencari jalan ke luar dari grid maze yang diberikan. keluar ☺ Jalan keluar yang harus dilaluinya adalah kota-kotak yang berwarna kuning tsb. Masalahnya karena bisa terdapat beberapa cara untuk mencapai jalan keluar maka disini anda harus menemukan jumlah kotak yang paling sedikit dalam lintasan (menyatakan juga jumlah langkah terpendek untuk mencapai bagian luar). Dalam hal contoh maze di atas yang paling sedikit adalah 17 kotak/langkah yaitu yang berwana kuning tsb. Masukan Baris pertama berisikan b dan k yang menyatakan jumlah baris dan jumlah kolom matriks grid tersebut. Kedua bilangan dipisahkan satu spasi. Jumlah baris/kolom terkecil adalah 3 dan jumlah baris/kolom terbesar adalah 100. Pada b baris berikutnya maze didefinisikan sbb. Harga -1 menyatakan dinding yang tidak dapat ditembus, harga 0 menyatakan ruang yang dapat dilalui. Dipastikan sekurangnya ada satu jalan keluar. Setiap baris grid pada baris masukan tersendiri. Pada baris yang sama hargaharga tersebut dituliskan terpisah satu spasi dengan harga berikutnya. Pada baris terakhir terdapat dua bilangan a dan b yang menyakan posisi awal Mr Groovy berada, a nomor baris dan b nomor kolom dengan penomoran baris: 1, 2, 3, …, dimulai dari atas ke bawah dan penomoran kolom: 1, 2, 3, …, dimulai dari kiri ke kanan. Dipastikan posisi awal ini selalu berada pada ruangan (bukan tembok!) dan di dalam matriks. Keluaran Program hanya mengeuarkan jumlah langkah paling sedikit untuk mencapai luar (sama juga dengan jumlah kotak paling sedikit yang dilalui). Contoh Masukan 8 10 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 -1 0 0 0 -1 0 0 -1 -1 0 0 0 -1 -1 -1 -1 0 0 -1 -1 -1 0 0 -1 -1 0 0 0 -1 0 -1 -1 -1 -1 -1 0 -1 0 -1 0 -1 0 0 -1 -1 0 -1 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 7 5 Keluaran 17 Hari 2 / Soal 3: Segitiga Bebek Kode Soal: Batas Run-time: Batas Memori: Masukan: Keluaran: bebek3 0,5 detik / test-case 16 MB Standard input Standard output Suatu hari Pak Dengklek mendapat penghasilan lebih dari hasil berjualan telur bebek asin. Oleh karena itu ia ingin membagi keuntungannya dengan bebek-bebeknya, dengan cara memberi makan lebih untuk mereka. Sayangnya uangnya hanya cukup untuk memberi makan lebih kepada tiga ekor bebek. Untuk itu ia membuat suatu cara untuk memilih tiga ekor bebek mana yang akan diberinya makan lebih hari itu. Saat itu, bebek-bebeknya sedang berkeliaran di ladangnya yang luas. Pak Dengklek memutuskan untuk memberi makan lebih kepada tiga ekor bebek yang di posisinya sekarang membentuk segitiga dengan luas minimum. Yang dimaksud segitiga dengan luas minimum di sini adalah, semua segitiga lain yang dibentuk oleh bebek-bebek memiliki luas yang lebih besar dari luas segitiga tersebut. Karena banyaknya jumlah bebek-bebek, Pak Dengklek meminta bantuanmu untuk masalah ini. Bantulah Pak Dengklek dengan mencari luas segitiga minimum tersebut akurat hingga dua tempat desimal. FORMAT MASUKAN Baris pertama dari masukan berisi sebuah bilangan N, yang menyatakan jumlah bebek-bebek yang tersebar di ladang Pak Dengklek saat ini. 1 ≤ N ≤ 300. Baris kedua hingga baris ke N+1 masing masing akan berisi dua buah bilangan bulat xi dan yi, yang merupakan koordinat bebek ke-i di sistem koordinat kartesian. -10000 ≤ xi,yi ≤ 10000. Tidak akan ada dua bebek yang berbeda yang berada di posisi (x, y) yang sama. CONTOH MASUKAN 4 0 0 -5 10 3 0 0 9 FORMAT KELUARAN Keluaran hanya terdiri dari sebuah baris berisi bilangan yang merupakan luas segitiga minimum menurut syarat yang sudah dijelaskan dengan dua tempat desimal. Jika tidak ada segitiga yang memenuhi syarat tersebut, keluarkan angka -1.00 . CONTOH KELUARAN 13.50 Olimpiade Sains Nasional V Bidang Informatika Faktorial Kode Soal: OSN601 Batas Run-time: 1 detik / test-case Batas Memori: 32 MB Masukan: Standard input Keluaran: Standard output Diberikan sebuah bilangan N, N! disebut N faktorial dan nilainya dihitung dengan rumus : N x (N 1) x (N - 2) ... x 1. Tugas Anda adalah menghitung berapa jumlah angka nol berturutan yang mengakhiri N!. Sebagai contoh: a. N=10: 10! = 3 628 800, maka jumlah angka nol adalah 2. b. N=8: 8! = 40 320, jumlah angka nol adalah 1 (nol di tengah tidak dihitung). FORMAT MASUKAN Masukan hanya terdiri dari satu baris berisi bilangan bulat N (1 ≤ N ≤ 10 000). FORMAT KELUARAN Tuliskan satu bilangan bulat yang menyatakan jumlah angka nol yang mengakhiri N!. CONTOH MASUKAN 1 10 CONTOH KELUARAN 1 2 CONTOH MASUKAN 2 8 CONTOH KELUARAN 2 1 CATATAN Hati-hati dengan integer overflow: tipe data longint atau long hanya dapat menampung bilangan hingga sekitar 2 milyar. PETUNJUK Jika Anda dapat memanfaatkan sifat rumus faktorial, maka Anda akan mendapatkan hasil yang lebih efisien Page 1 of 8 Olimpiade Sains Nasional V Bidang Informatika Tebak Lagu Kode Soal: OSN602 Batas Run-time: 1 detik / test-case Batas Memori: 32 MB Masukan: Standard input Keluaran: Standard output Pak Dengklek dan bebek-bebeknya punya permainan baru, yaitu tebak lagu. Sesuai namanya, dalam permainan ini salah satu bebek akan menyanyikan fragmen/potongan sebuah lagu untuk kemudian ditebak oleh Pak Dengklek. Karena tahu bahwa Pak Dengklek bukanlah seorang penghafal yang handal, para bebek menyiapkan sebuah buku yang berisikan daftar lagu yang akan mereka nyanyikan, lengkap dengan nadanya. Seperti halnya manusia, para bebek tidak menyanyi dengan ketinggian nada yang sama satu sama lain. Oleh sebab itu, mereka sepakat untuk menuliskan nada-nada lagu di buku lagu mereka dalam nada dasar C tengah (C4 pada piano manusia, yang mereka beri simbol c.), yaitu nada dengan frekuensi 261.6 Hz. Untuk nada-nada yang lain, perhatikan daftar lengkap nada, simbol, dan frekuensi yang digunakan oleh para bebek (terurut menaik berdasar ketinggian nada), yang diberikan pada tabel di bawah ini: Nada Simbol Frekuensi Nada Simbol Frekuensi C4 c. 261.6 C5 C. 523.3 C#4 c# 277.2 C#5 C# 554.4 D4 d. 293.7 D5 D. 587.3 D#4 d# 311.1 D#5 D# 622.3 E4 e. 329.6 E5 E. 659.3 F4 f. 349.2 F5 F. 698.5 F#4 f# 370.0 F#5 F# 740.0 G4 g. 392.0 G5 G. 784.0 G#4 g# 415.3 G#5 G# 830.6 A4 a. 440.0 A5 A. 880.0 A#4 a# 466.2 A#5 A# 932.3 B4 493.9 B5 987.8 b. B. Sebagai contoh, misalkan ada dua bebek (bebek Kwek dan bebek Kwak) yang akan menyanyikan sebuah lagu yang sama. Bebek Kwek menyanyikan lagu tersebut dalam nada dasar D4 (d.) dan bebek Kwak menyanyikannya dalam nada dasar E4 (e.). Rangkaian nada yang mereka nyanyikan adalah: Bebek Kwek: d.e.f#e.d. Bebek Kwak: e.f#g#f#e. Sedangkan dalam buku lagu mereka, lagu tersebut akan dituliskan sebagai c.d.e.d.c.. Karena perbedaan nada dasar itulah, meski dapat mengenali nada dengan sangat akurat, Pak Dengklek merasa kesulitan dalam menebak lagu apa yang para bebeknya nyanyikan. Karena itulah, Page 2 of 8 Olimpiade Sains Nasional V Bidang Informatika Pak Dengklek meminta bantuan Anda untuk membuatkan sebuah program yang dapat mengetahui lagu mana yang dinyanyikan para bebek. Informasi yang akan Pak Dengklek berikan pada Anda adalah: 1. Potongan lagu yang didengar oleh Pak Dengklek (dengan nada dasar sesuai yang dinyanyikan bebek yang bersangkutan). 2. Banyaknya lagu yang ada pada buku lagu bebek. 3. Rangkaian nada dari lagu-lagu dalam buku lagu tersebut. FORMAT MASUKAN Baris pertama berisikan serangkaian karakter yang merepresentasikan rangkaian nada yang ingin dicari (sesuai simbol pada tabel pada deskripsi soal). Baris kedua berupa sebuah integer n (1 <= n <= 100) yang menunjukkan banyaknya data lagu yang ada. n-baris berikutnya berisikan data lagu yang tersedia, masing-masing dalam satu baris. Tiap baris masukan rangkaian nada terdiri atas tidak lebih dari 250 karakter. FORMAT KELUARAN Nomor lagu yang di dalamnya terdapat rangkaian nada yang bersesuaian dengan nada yang dicari, atau # jika rangkaian nada yang dicari tidak ditemukan. Penomoran lagu dimulai dari 1 (i.e. baris setelah integer n pada masukan merupakan data lagu ke-1). Jika ada lebih dari satu lagu yang bersesuaian dengan potongan lagu yang diberikan, tuliskan lagu dengan nomor terkecil saja. CONTOH MASUKAN 1 g.g.g.f.e.d.c. 6 d.c.e.d.c.f.e.d.g.g.g.f.e.d.e. c.d.e.c#d.e.f#a.d.c. c.d#e. c.d.e.f.g.g.g.d.e.f.c.d.e. c.c#d.d#e.f.f#g.g#a.a#b.C. G.F.D#G#G.F.A#A#A#G#G.F.D# CONTOH KELUARAN 1 6 CONTOH MASUKAN 2 c.d.e. 1 C.D.C. CONTOH KELUARAN 2 # Page 3 of 8 Olimpiade Sains Nasional V Bidang Informatika Ulang Tahun Kode Soal: OSN603 Batas Run-time: 1 detik / test-case Batas Memori: 32 MB Masukan: Standard input Keluaran: Standard output Beberapa hari lagi, Pak Dengklek akan merayakan ulang tahunnya yang ke-61. Beliau bermaksud akan mengundang teman-temannya untuk menghadiri pesta ulang tahunnya tersebut. Sayangnya, beliau baru saja kehilangan satu-satunya buku telepon yang dipunyainya. Karena itu, ia harus mengunjungi wartel terdekat dan membuka buku kuning (yellow pages) untuk mengetahui nomor telepon teman-temannya. Tidak lupa ia mengajak Anda untuk membantunya mencarikan nomor telepon teman-temannya tersebut. Diberikan buku kuning yang berisi pasangan nama dan nomor telepon seluruh penduduk desa tempat Pak Dengklek tinggal, serta nama-nama teman Pak Dengklek yang tinggal di desa tsb., tolonglah Pak Dengklek untuk mencari nomor telepon teman-teman Pak Dengklek tersebut. FORMAT MASUKAN Baris pertama berisi dua buah bilangan bulat: N (1 ≤ N ≤ 10.000), menunjukkan jumlah penduduk desa yang terdaftar di buku kuning. Q (1 ≤ Q ≤ 10.000), menunjukkan jumlah teman Pak Dengklek. N baris selanjutnya berisi nama dan nomor telepon setiap orang di desa tersebut, dipisahkan dengan spasi. Q baris selanjutnya berisi nama-nama teman Pak Dengklek. Nama setiap orang hanya akan tersusun dari huruf kapital, dengan panjang maksimal 15 huruf. Daftar nama pada buku kuning akan terurut sesuai abjad, tetapi daftar teman Pak Dengklek yang akan dicari nomor telponnya belum tentu terurut dan satu teman Pak Dengklek bisa saja ditanyakan lebih dari sekali. Setiap nomor telepon terdiri atas tepat 7 angka, satu nomor telepon dapat dimiliki oleh lebih dari satu orang. Semua teman pak Dengklek yang akan dicari nomor telponnya pasti tercantum dalam buku kuning. FORMAT KELUARAN Keluarkan Q baris, di mana setiap barisnya berisi nomor telepon dari teman yang ditanyakan oleh Pak Dengklek. CONTOH MASUKAN 10 5 ACONG 8468431 BALAJI 1573547 GREGOR 1765743 JAPRA 3746843 JOKO 1357891 MALARANGENG 1375638 MANMOHAN 1357562 SITORUS 1378651 TERRY 8756345 Page 4 of 8 Olimpiade Sains Nasional V Bidang Informatika YUDHOYONO 1781945 GREGOR YUDHOYONO ACONG MANMOHAN JAPRA CONTOH KELUARAN 1765743 1781945 8468431 1357562 3746843 Page 5 of 8 Olimpiade Sains Nasional V Bidang Informatika Runtuh Kode Soal: OSN604 Batas Run-time: 1 detik / test-case Batas Memori: 32 MB Masukan: Standard input Keluaran: Standard output Game (permainan) ini adalah sebuah game yang bertujuan untuk membuat penuh satu baris (horizontal) dari sebuah board (papan) menggunakan beberapa bangun yang disediakan. Jika sebuah baris penuh terisi maka baris tersebut akan dihilangkan dan sisa bangun di atasnya akan "diruntuhkan" satu demi satu turun melewati ruang yang telah kosong sampai menumpuk di atas bangun yang ada di bawahnya. Penumpukan yang terjadi dapat menghasilkan situasi seperti pada saat awal di atas yaitu terdapat baris-baris yang penuh terisi, yang selanjutnya akan dihilangkan lagi (setelah semua runtuh). Demikian berlangsung bisa berulang-ulang sampai tidak ada lagi baris yang penuh terisi. Anda akan diberikan sebuah kondisi board dari suatu game ini untuk ditentukan kondisi akhirnya. Misalnya untuk board seperti di bawah ini: Page 6 of 8 Olimpiade Sains Nasional V Bidang Informatika Kondisi board setelah baris yang terisi penuh dihilangkan, akan menyisakan ruang kosong seperti di bawah ini: Bangun-bangun yang terletak di atas baris terbawah yang dihilangkan akan diruntuhkan ke bawah sehingga kondisi board setelah terjadi penurunan adalah seperti di bawah ini: Dalam contoh di atas kebetulan keruntuhan hanya sekali saja dalam sejumlah testcase bisa terjadi berulang-ulang. FORMAT MASUKAN Baris 1: Jumlah baris (1..20) dan kolom (1..8) board. Dipisahkan oleh spasi. Baris 2..jumlah baris+1: Berisi konfigurasi awal board dalam bentuk angka 0 atau 1 sebanyak jumlah kolom. 1 berarti ada bangun pada posisi tersebut, 0 berarti ruang kosong pada posisi tersebut. FORMAT KELUARAN Tuliskan konfigurasi akhir dari board setelah proses penghilangan dan penurunan berhenti. Page 7 of 8 Olimpiade Sains Nasional V Bidang Informatika CONTOH MASUKAN 11 6 000000 000000 011100 110011 111111 111000 111111 111111 111001 001100 111011 CONTOH KELUARAN 000000 000000 000000 000000 000000 010000 111000 111001 111101 001110 111011 Page 8 of 8 Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika SOAL ARITMETIKA / ANALITIKA / LOGIKA 1. Bilangan selanjutnya dari barisan 4, 5, 8, 13, 20, 29, ... adalah: a. 38 b. 39 2. Berapakah nilai dari a. 1 b. 2/3 c. 40 d. 42 e. 49 d. 2 e. tidak ada pilihan jawaban lain yang benar ? c. 30/11 3. Berapakah nilai dari ekspresi 2 – 4 + 6 – 8 + 10 – 12 + 14 – ... – 100 ? a. –50 b. 0 c. 50 d. 100 e. tidak ada pilihan jawaban lain yang benar 4. Berapakah nilai dari: 1 + 2 – 3 – 4 + 5 + 6 – 7 – 8 + 9 + ... – 99 – 100 ? a. –100 b. 0 c. 1 d. 100 e. tidak ada pilihan jawaban lain yang benar 5. Floor(x) adalah bilangan bulat terbesar yang tidak lebih besar dari x. Sebagai contoh, floor(10/3) = 3. Berapakah hasil perhitungan floor(floor(1000/7)/floor(71/2))? a. 4 b. 5 c. 7 d. 10 e. 500 6. Jika a ⌂ b = ab + a – b, berapakah (7 ⌂ p) – (p ⌂ 7)? a. 14p b. 14 – 2p c. p + 7 d. 0 e. tidak ada pilihan jawaban lain yang benar 7. Ada berapa carakah kita dapat menuliskan angka 10 sebagai hasil penjumlahan atas tepat tiga bilangan bulat positif yang tidak harus berbeda satu sama lain jika urutan penulisannya tidak diperhitungkan? (Sebagai contoh, salah satu cara memperolehnya adalah 10 = 1+4+5, yang sama dengan 10 = 4+1+5) Page 1 of 18 Olimpiade Sains Nasional VI a. 5 b. 6 Soal Aritmetika / Analitika / Logika c. 7 d. 8 e. 10 8. Sebuah lantai persegi panjang dilapisi sepenuhnya dengan ubin yang berukuran 1 × 2. Jika ubin-ubin ini tidak dipotong dan tidak saling bertindihan, lantai tersebut tidak mungkin berukuran: a. 4 × 9 b. 8 × 8 c. 11 × 7 d. 16 × 5 e. tidak ada pilihan jawaban lain yang benar 9. Sebuah kubus 4 × 4 × 4, yang dibangun dengan cara melekatkan kubus-kubus berukuran 1 × 1 × 1, dicat pada sisi-sisi luarnya dan kemudian diurai kembali. Berapa jumlah kubus-kubus kecil hasil penguraian ini yang memiliki tepat 2 sisi bercat? a. 8 b. 16 c. 20 d. 24 e. 32 10. Sebuah kotak berisikan 80 balok, sebagian terbuat dari kayu dan sebagian lagi terbuat dari plastik. Tiap balok diwarnai dengan warna merah atau hijau. Jika 48 buah balok terbuat dari kayu dan 32 balok berwarna merah, berapakah jumlah terbesar balok plastik hijau yang mungkin? a. 16 b. 24 c. 32 d. 48 e. tidak ada pilihan jawaban lain yang benar 11. Sebuah jalur yang berlebar 1m dikelilingi sebagian oleh pagar yang ditunjukkan pada diagram berikut. Berapakah panjang dari pagar tersebut? Page 2 of 18 Olimpiade Sains Nasional VI a. 21m b. 22m Soal Aritmetika / Analitika / Logika c. 23m d. 24m e. 25m 12. Seorang siswa yang sedang menggunakan sebuah kalkulator untuk menghitung sebuah penjumlahan secara tidak sengaja menambahkan 79012 sementara sebenarnya ia ingin menambahkan 7912. Untuk membetulkan perhitungannya dalam satu operasi, siswa tersebut harus melakukan pengurangan dengan: a. 7012 b. 71100 c. 71112 d. 86924 e. tidak ada pilihan jawaban lain yang benar 13. Suatu hari, Kwek bertanya kepada Pak Dengklek, “Pak, berapa umur Anda?”. Pak Dengklek menjawab, “Tahun ini, saya tiga kali lebih tua dari saudara saya. Enam tahun lalu, saya lima kali lebih tua darinya.” Berapakah umur Pak Dengklek saat itu? a. 36 b. 40 c. 49 d. 55 e. tidak ada pilihan jawaban lain yang benar 14. Empat orang anak menemukan sekantong kelereng dan membaginya di antara mereka. Tiap anak mengambil sejumlah berbeda kelereng dan tidak satupun anak mendapat kelereng sebanyak lebih dari 2 kali lipat kelereng yang dimiliki oleh anak lainnya. Banyak terkecil kelereng yang mungkin terdapat pada kantong tersebut adalah: a. 10 b. 15 c. 18 d. 21 e. tidak ada pilihan jawaban lain yang benar 15. Tepat 100 orang tinggal di sebuah desa. Orang tertua di desa tersebut dilahirkan pada tahun 1900 dan setiap orang pada desa tersebut dilahirkan pada tahun yang berbeda tetapi kesemuanya lahir pada 1 Januari. Pada tahun 1999, hasil penjumlahan digit-digit dari angka tahun lahir seorang penduduk desa tersebut sama dengan umurnya saat itu. Berapakah umur orang tersebut? a. 4 b. 12 c. 16 d. 23 e. tidak ada pilihan jawaban lain yang benar Page 3 of 18 Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika 16. Kwak berlari dengan kecepatan tetap dari titik A ke titik C. Pada saat yang bersamaan, Kwik berlari dari titik B ke titik C dengan kecepatan tetap pula. Mereka tiba di C pada saat yang bersamaan. Jika mereka terus berlari dengan arah yang sama seperti semula, Kwak tiba di B tepat 10 detik sebelum Kwik tiba di A. Seberapa cepatkah (dalam m/s) Kwik berlari? (titik C berada di antara A dan B, jarak AC adalah 60m, jarak CB 40m) a. 3 b. 10/3 c. 13/3 d. 5 e. informasi tidak cukup 17. Sebuah kotak berisikan beberapa buah apel. Kwak mengambil 1/2 di antaranya ditambah 1 buah apel lagi dari apel-apel yang tersisa. Kemudian, Kwik mengambil 1/3 dari apel yang tersisa tetapi kemudian memasukkan kembali 2 buah apel ke dalam kotak. Kwek lantas mengambil 5/6 dari apel yang tersisa ditambah 1 buah apel lainnya. Setelah pengambilan-pengambilan tersebut, apel yang tersisa di dalam kotak tersebut tinggal 7 buah. Berapa banyakkah jumlah apel mula-mula? a. 16 b. 44 c. 110 d. 140 e. tidak ada pilihan jawaban lain yang benar 18. Dalam sebuah ujian yang terdiri atas 2 soal, 18 peserta menjawab pertanyaan pertama dengan benar, 23 peserta menjawab pertanyaan kedua dengan benar, 8 peserta menjawab kedua pertanyaan dengan benar dan 11 peserta tidak berhasil menjawab dengan benar kedua pertanyaan. Berapakah jumlah peserta ujian tersebut? a. 41 b. 44 c. 49 d. 52 e. 60 19. Berapakah banyaknya persegi panjang pada sebuah papan catur berukuran 5 × 5? (Jangan lupa menghitung pula bujur sangkar (persegi) yang Page 4 of 18 Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika ditemukan karena bujur sangkar merupakan salah satu jenis khusus dari persegi panjang) a. 25 b. 225 c. 55 d. 200 e. 170 20. Pak Dengklek memiliki 101 buah telur yang harus dibagi-bagi ke dalam beberapa buah kantung untuk dijual. Pak Dengklek kemudian melabeli kantung-kantung tersebut dengan banyaknya telur yang ada dalam kantung tersebut serta menyegelnya. Pak Dengklek ingin agar dia dapat melayani seorang pembeli yang ingin membeli telur sebanyak sembarang butir antara 1 dan 101 (termasuk 1 dan 101) tanpa harus membuka satu pun segel dan mengemas ulang telur-telur tersebut. Agar dapat memenuhi kondisi tersebut, berapakah jumlah kantung minimal yang dibutuhkan Pak Dengklek pada saat pembungkusan awal? (Perlu diketahui bahwa Pak Dengklek bebas menentukan banyaknya kantung serta banyaknya telur yang dimasukkan pada masing-masing kantung, jumlah telur pada setiap kantong tidak harus sama meski boleh sama, dan telur harus dimasukkan ke dalam kantung dalam kondisi utuh – tidak mungkin memasukkan ½ telur atau telur dalam jumlah pecahan lainnya) a. 7 b. 21 c. 5 d. 101 e. 8 21. Berat badan Kwek 140 gram lebih berat dari Kwik. Total berat mereka 200 gram. Berapakah berat badan Kwik (dalam gram)? a. 30 b. 60 c. 80 d. 140 e. 170 22. Dalam sebuah turnamen sepakbola, setiap kesebelasan diharuskan bertanding tepat satu kali melawan tiap kesebelasan lainnya. Jika dalam turnamen tersebut dimainkan 66 pertandingan, berapakah banyaknya kesebelasan yang mengikuti turnamen tersebut? a. 33 b. 12 c. 20 d. 11 e. 6 23. Sebuah lomba tenis perorangan dilangsungkan dengan sistem gugur. (Untuk setiap tahap, tiap peserta ditandingkan dengan salah satu peserta lain. Peserta yang menang akan maju ke tahap berikutnya dan ditandingkan dengan salah satu pemenang lainnya. Demikian seterusnya hingga tersisa 1 orang pemenang pada tahap terakhir.) Jika banyak peserta adalah 32 orang, berapakah banyaknya pertandingan yang terjadi pada lomba tenis tersebut? a. 32 b. 16 c. 15 d. 31 e. 17 24. Seorang saudagar kaya memiliki banyak koin emas. Karena tak ingin kekayaannya diketahui orang, dia menyimpannya di sebuah gua Page 5 of 18 Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika tersembunyi di dalam hutan dan tidak pernah memberitahukan jumlah kekayaannya kepada siapapun. Suatu hari, karena penasaran, istri saudagar tersebut bertanya kepada saudagar tersebut mengenai jumlah kekayaannya. Mendengar pertanyaan itu, sang saudagar hanya menjawab, “Jika aku membaginya menjadi 2 bagian tidak sama banyak, selisih banyak koin antardua bagian tersebut dikalikan 42 sama banyaknya dengan selisih dari (kuadrat banyak koin bagian pertama) dan (kuadrat banyak koin pada bagian kedua).” Berapa banyakkah koin emas yang dimiliki saudagar tersebut? a. 9 b. 7 c. 33 d. 6 e. 42 25. Seorang pengemudi mengendarai mobil dari kota A ke kota B, kemudian kembali ke kota A melalui jalur jalan yang persis sama. Perjalanan dari kota A ke kota B bersifat menanjak dan ditempuh dengan kecepatan 42 km/jam. Sebaliknya, perjalanan dari kota B ke kota A menurun, sehingga kecepatan yang dicapainya adalah 56 km/jam. Berapakah kecepatan rata-rata pengemudi tersebut untuk keseluruhan perjalanan? a. 49 b. 48 c. 50 d. 47 e. tidak ada pilihan jawaban lain yang benar 26. “Jarak” antara dua tombol pada tuts telepon adalah jumlah perbedaan posisi kolom dan baris keduanya. Sebagai contoh, “jarak” antara tombol 0 dan 1 adalah 4, karena ada perbedaan 1 kolom dan 3 baris antara tombol 0 dan 1. Berapakah “jarak” yang tercipta jika tombol 8654937 ditekan sebanyak 2007 kali berturut- turut? a. 26091 b. 27094 c. 28097 d. 29100 e. tidak ada pilihan jawaban lain yang benar 27. Dino berada di sekolah dari jam 06.36 pagi hingga 14.24. Selama berada di sekolah, sepertiga waktunya digunakan untuk beristirahat. Seperempat dari waktu yang tersisa digunakan untuk berolahraga. Jika sisa waktunya digunakan untuk belajar, maka pernyataan manakah yang benar? a. Dino belajar 156 menit lebih lama dari berolahraga b. Dino belajar 160 menit lebih lama dari berolahraga menit lebih lama dari berolahraga d. Dino belajar 240 menit lebih lama dari berolahraga c. Dino belajar 234 e. tidak ada pilihan jawaban lain yang benar 28. Sebuah fungsi didefinisikan sebagai f(n) = f(n-1).f(n-2) dan selalu bernilai non-negatif. Diketahui f(36) = 7 dan f(39) = 1008. Berapakah nilai Page 6 of 18 Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika dari f(38) – f(37)? a. 72 b. 84 c. 144 d. tidak dapat ditentukan e. tidak ada pilihan jawaban lain yang benar 29. Pada suatu waktu ada 5 orang sahabat: Andi, Budi, Ratna, Hendri, dan Tuti. Hendri memiliki uang Rp. 10000, sementara yang lainnya tidak memiliki uang. Suatu hari, Budi meminjam uang Rp. 9000 dari Hendri dengan bunga 5%. Lalu, Ratna meminjam uang Rp. 8000 dari Budi dengan bunga 10%. Kemudian, Andi meminjam uang Rp. 4500 dari Ratna dengan bunga 20%. Lalu, Tuti meminjam uang Rp. 4000 dari Andi dengan bunga 25%. Terakhir, Hendri memberikan uang Rp. 1000 kepada Tuti sebagai hadiah ulang tahun. Setelah semua hutang-hutang dan bunganya dibayarkan (dengan asumsi tidak ada tambahan pemasukan lain), siapakah yang memiliki uang paling banyak? a. Andi b. Budi c. Ratna d. Hendri e. Tuti 30. Dari angka 1 hingga 1000 (termasuk 1 dan 1000), ada berapa banyakkah kelipatan 3 yang bukan kelipatan 5? a. 123 b. 200 c. 267 d. 334 e. tidak ada pilihan jawaban lain yang benar 31. Berapakah nilai rata-rata dari 100000 bilangan bulat positif ganjil pertama? a. 100000 b. 1000000 c. 10000000 d. 100000000 e. 1000000000 32. Jika digabungkan, seluruh sekolah SMA di kota X memiliki 1.989 unit komputer untuk keperluan berlajar siswa-siswanya, yang mana dari jumlah tersebut maka rasio jumlah siswa dibandingkan jumlah komputer adalah 68,6. Berapakah kira-kira terdekat jumlah siswa SMA di kota tersebut? (dalam ribuan) a. 30 b. 120 c. 140 d. 160 e. 200 33. Jika p adalah sebuah bilangan bulat positif, manakah dari persamaan berikut ini yang mungkin menghasilkan bilangan prima? a. 8p b. 8p + 1 c. 8p + 2 d. 8p + 4 e. 8p + 6 34. Sebuah mobil ambulans menempuh jarak 10 km pada kecepatan 50 km/jam, Berapakah kecepatan (dalam km/jam) yang harus dicapai oleh ambulans tersebut agar total waktu tempuh perjalanan pulang perginya tepat 20 menit? a. 55 b. 60 c. 65 d. 70 e. 75 Page 7 of 18 Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika 35. Dua hari terakhir ini, Pak Dengklek membelikan sarapan untuk beberapa orang temannya. Untuk masing-masing temannya, kemarin Pak Dengklek membelikan sepotong roti dan segelas teh manis di sebuah warung. Karena sarapan kemarin dirasa kurang, hari ini, ia membelikan 3 potong roti dan segelas teh manis di warung yang sama. Jika Pak Dengklek menghabiskan total uang sebesar Rp 5.400 kemarin dan Rp 12.600 hari ini, berapakah uang yang dikeluarkan Parto untuk membayar roti-roti yang dibelinya hari ini? (dengan asumsi harga sepotong roti dan harga segelas teh manis tidak berubah dalam dua hari ini) a. Rp 10.800 b. Rp 9.600 c. Rp 7.200 d. Rp 3.600 e. Rp 2.400 SOAL BACAAN 1 Seorang petugas museum merencanakan sebuah pameran patung di sebuah taman. Terdapat tujuh patung yang akan dipamerkan: F, G, H, J, R, S dan U. Tiga patung akan di pamerkan di taman sebelah selatan dan empat patung akan di pamerkan di taman sebelah utara. Empat dari patung-patung tersebut – F, G, H, J – terbuat dari baja sedangkan tiga patung lainnya – R, S, U – terbuat dari perunggu. Petugas museum tersebut akan menyusun patungpatung tersebut dengan beberapa aturan berikut ini: − Masing-masing taman harus terdapat paling banyak 2 patung perunggu − G tidak dapat berada di sisi taman yang sama dengan U − H tidak dapat berada di sisi taman yang sama dengan R 36. Manakah dari kelompok berikut ini yang dapat diletakkan di taman sebelah utara? a. F, G, H dan U b. F, H, S dan U c. G, H, R dan U d. G, J, R dan U e. J, R, S dan U 37. Jika U dan R ditempatkan di taman sebelah utara, manakah kelompok patung berikut ini yang seharusnya berada di taman sebelah selatan? a. F, G dan H b. F, J dan S c. G, H dan S d. G, H dan U e. H, S dan U 38. Jika S dan U ditempatkan di taman sebelah selatan, masing-masing patung berikut ini harus diletakkan di taman sebelah utara, KECUALI : a. F b. G c. H d. J e. R Page 8 of 18 Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika 39. Jika S dan R diletakkan di taman sebelah selatan, manakah dari patung-patung berikut ini yang juga ditempatkan di taman yang sama? a. F b. G c. H d. J e. U 40. Jika G dan H diletakkan di taman sebelah selatan, manakah diantara patung-patung berikut ini yang harus juga berada di taman yang sama? a. F b. J c. R d. S e. U 41. Jika F dan G diletakkan di taman sebelah utara, manakah diantara kelompok patung-patung ini yang dapat diletakkan di taman sebelah selatan ? a. H, J dan S b. H, J dan U c. H, R, dan U d. J, S dan U e. R, S dan U SOAL BACAAN 2 Terdapat 6 buah tiang kayu – P, Q, R, S, T dan U - yang masing-masing diletakkan ke dalam lubang-lubang yang berbeda. Terdapat 7 lubang yang telah disiapkan dan masing-masing diberi nomer berurutan dari kiri ke kanan, lubang-lubang tersebut dibuat sejajar lurus dan diberi jarak yang sama di masing-masing lubang. Penempatan tiang-tiang tersebut harus mengikuti beberapa kondisi berikut ini: − Jarak yang memisahkan antara tiang P dan Q harus sama dengan jarak yang memisahkan R dan S − T harus berada di lubang yang berdampingan setelah lubang dimana U ditempatkan − Lubang yang paling kiri harus terisi (tidak dapat dibiarkan kosong) 42. Jika U ada di lubang nomer 2, manakah pernyataan yang benar? a. P berada di lubang nomer 3 7 b. Q berada di lubang nomer 4 c. R berada di lubang nomer 5 d. S berada di lubang nomer e. T berada di lubang nomer 1 43. Jika U, P dan R berada di lubang nomer 5, 6, dan 7 berturut-turut, manakah pernyataan yang benar? a. S berada di lubang nomer 1 2 b. S berada di lubang nomer 2 e. Lubang nomer 2 adalah lubang kosong Page 9 of 18 c. Q berada di lubang nomer 2 d. Q berada di lubang nomer Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika 44. Jika P dan R berada di lubang 1 dan 3 berurutan, lubang yang mungkin akan menjadi kosong adalah salah satu dari: a. 2 atau 4 b. 2 atau 6 c. 4 atau 5 d. 5 atau 7 e. 6 atau 7 45. Jika P dan Q berada di lubang 2 dan 4 berurutan, manakah pernyataan yang benar? a. R berada di lubang nomer 3 1 b. R berada di lubang nomer 5 c. S berada di lubang nomer 6 d. U berada di lubang nomer e. Lubang nomer 6 adalah lubang kosong SOAL ALGORITMIK 1 Ada sebuah alat gambar sederhana yang hanya bisa menggambar garis lurus pada sebuah bidang Cartesius. Alat ini diberi input berupa 2 bilangan: x y. - x artinya alat berputar x*900 ke kanan - y artinya alat bergerak maju y kotak - pada awalnya alat ini menghadap sumbu y-positif Contoh pemakaian alat: 1. Jika dimasukkan: 0 10 maka alat akan berputar 0*900 ke kanan dan bergerak maju 10 kotak sehingga muncul garis vertikal sepanjang 10 satuan. Jika ditambah lagi: 1 10 {berputar 1*900 ke kanan dan maju 10 kotak} 1 10 1 10 maka akan tergambar sebuah persegi dengan panjang sisi 10 Page 10 of 18 Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika 2. Jika dimasukkan: 0 5 {berputar 0*900 ke kanan dan maju 5 kotak} 1 2 {berputar 1*900 ke kanan dan maju 2 kotak} 1 4 {berputar 1*900 ke kanan dan maju 4 kotak} 3 2 {berputar 3*900 ke kanan dan maju 2 kotak} 1 1 {berputar 1*900 ke kanan dan maju 1 kotak} 1 4 {berputar 1*900 ke kanan dan maju 4 kotak} maka akan tergambar bentuk: dengan penjelasan: Page 11 of 18 Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika 46. Apa gambar yang dihasilkan oleh mesin gambar ini jika diberi masukan: 4 2 8 3 10 5 7 4 a. b. c. 47. Manakah masukan yang menghasilkan gambar a. 1 3 b. 8 3 d. e. tidak ada pilihan jawaban lain yang benar ? c. 3 3 d. 0 7 5 3 1 3 7 4 1 3 10 6 1 6 3 5 5 3 7 3 9 3 3 6 1 4 3 6 1 3 7 5 3 4 3 3 5 4 3 2 7 3 Page 12 of 18 e. tidak ada pilihan jawaban lain yang benar Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika SOAL ALGORITMIK 2 Ada sebuah alat yang dapat mengendalikan 4 buah wadah air: - Wadah 1 berukuran 4 liter - Wadah 2 berukuran 7 liter - Wadah 3 berukuran 13 liter - Wadah 4 berukuran 19 liter {pada awalnya, semua wadah air kosong} Alat ini dapat diberi input: isi x {perintah ini untuk mengisi wadah x sampai penuh} tuang x y {perintah ini untuk menuangkan isi wadah x ke wadah y, jika wadah y sudah penuh maka penuangan dihentikan} tumpah x y {perintah ini untuk menuangkan isi wadah x ke wadah y, walaupun wadah y sudah penuh penuangan tetap diteruskan sampai isi wadah x habis (sisanya tumpah)} buang x {perintah ini untuk mengosongkan isi wadah x} Contoh pemakaian: isi 4 {maka wadah 4 berisi penuh 19 L} tuang 4 3 {maka wadah 3 berisi penuh 13 L dan wadah 4 sisa 6 L} tumpah 3 1 buang 2 {maka wadah 1 berisi penuh 4 L dan wadah 3 kosong} {karena wadah 2 memang kosong sejak awal, tidak terjadi perubahan apa-apa} Page 13 of 18 Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika {keadaan akhir: - wadah 1: 4 L - wadah 2: 0 L - wadah 3: 0 L - wadah 4: 6 L} 48. Manakah deretan input yang menghasilkan 9 L air pada wadah 4? a. b. isi 3 c. isi 3 isi 2 tuang 3 2 tuang 3 1 tuang 2 4 tumpah 3 4 tumpah 3 4 tambah 2 4 d. ada lebih dari satu deretan input yang benar e. tidak ada pilihan jawaban lain yang benar 49. Berapa input minimal yang diperlukan untuk menghasilkan 5 L air pada wadah 4? a. 3 b. 4 c. 5 d. 6 e. tidak ada pilihan jawaban lain yang benar SOAL ALGORITMIK 3 50. Var matriks : array[1..10, 1..10] of integer Bayangkan kita memiliki sebuah array 2 dimensi seperti deklarasi diatas. Kita ingin mengisi salah satu nilai dalam matriks tersebut. Kita baca x dan y sebagai posisi elemen matriks yang akan diisikan, kemudian kita baca nilai yang akan diisikan ke dalam matriks[x,y] tersebut. Pengecekan manakah yang paling tepat untuk mencegah agar posisi yang akan kita isikan tidak berada di luar jangkauan? a. if (x>0) or (y>0) and (x<=10) or (y<=10) then ... b. if (x>0) and (y>0) or (x<=10) and (y<=10) then ... c. if not((x<0) or (y<0) or (x>10) or (y>10)) then ... d. if (x>0) and (y>0) and not(x<11) and not(y<11) then ... Page 14 of 18 Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika e. if not((x<1) or (x>10)) and not((y<1) or (y>10)) then ... SOAL ALGORITMIK 4 Perhatikan sub program berikut: 51. Dari pemanggilan dibawah ini, manakah yang bernilai FALSE? a. topSecret(1,2,3) b. topSecret(2,6,2) c. topSecret(4,8,8) d. topSecret(6,5,4) e. topSecret(7,9,5) Page 15 of 18 Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika 52. Dari pemanggilan dibawah ini, manakah yang bernilai TRUE? a. topSecret(77,35,59) b. topSecret(61,82,93) c. topSecret(54,20,11) d. topSecret(44,43,72) e. topSecret(25,18,36) SOAL ALGORITMIK 5 Perhatikan potongan program di bawah ini! Page 16 of 18 Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika 53. Jika kita memasukkan bilangan 5 3 8 1 6 sebagai pengisi a, b, c, d dan e, maka apakah keluaran potongan program di atas? a. -2 3 8 4 1 b. 0 3 8 4 1 c. 3 -3 -2 8 0 d. 3 3 -2 4 0 e. 5 3 8 16 0 SOAL ALGORITMIK 5 Perhatikan potongan program di bawah ini! 54. Jika di akhir, dituliskan writeln(data[2,2]); apakah keluaran program tersebut? a. 1 b. 2 c. 4 d. 7 e. 11 Page 17 of 18 Olimpiade Sains Nasional VI Soal Aritmetika / Analitika / Logika 55. Berapakah nilai akhir data[5,5]? a. 10 b. 16 c. 23 d. 24 e. 45 CADANGAN 56. Berapakah digit terakhir dari hasil perkalian 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1? a. 0 b. 2 c. 4 d. 6 e. 8 57. Berapakah hasil penjumlahan 200 + 201 + 202 + ... + 800? a. 300000 b. 300500 c. 301500 d. 302000 e.302500 58. Apakah digit terakhir dari perhitungan a. 1 b. 3 c. 5 ? d. 7 e. 9 59. Jika bilangan x habis dibagi 7 dan bilangan y habis dibagi 21, pernyataan-pernyataan manakah yang benar? I. x dan y kemungkinan adalah bilangan yang sama II. y-x akan berupa bilangan non-negatif III. Faktor persekutuan terbesar dari x dan y adalah 7 a. I dan II b. I dan III c. II dan III d. I, II, dan III e. tidak ada pilihan jawaban lain yang benar Page 18 of 18 Olimpiade Sains Nasional VI 1. Soal Pemrograman Hari Pertama Si Ganesh diberi PR oleh gurunya untuk menulis lirik lagu “Anak Ayam” (ini lagu kolaborasi antara seni dan matematika). Namun, karena ini juga sekaligus hukuman, dia harus menulis lirik lagu “Anak Ayam Turun 100000”. Marilah kita bantu Si Ganesh menyelesaikan PR-nya ini. Buatlah sebuah program yang menerima sebuah bilangan N (1 <= N <= 100000) lalu menuliskan lirik “Anak Ayam Turun N” di layar. Contoh Masukan: 10 Contoh Keluaran: Anak ayam Anak ayam Anak ayam Anak ayam Anak ayam Anak ayam Anak ayam Anak ayam Anak ayam Anak ayam Catatan: turun turun turun turun turun turun turun turun turun turun 10, mati 1 tinggal 9. 9, mati 1 tinggal 8. 8, mati 1 tinggal 7. 7, mati 1 tinggal 6. 6, mati 1 tinggal 5. 5, mati 1 tinggal 4. 4, mati 1 tinggal 3. 3, mati 1 tinggal 2. 2, mati 1 tinggal 1. 1, mati 1 tinggal induknya. Perhatikan pemakaian tanda bacanya (titik dan koma). 2. Buatlah sebuah program yang menerima masukan sebuah bilangan bulat N (N <= 180). Keluaran program adalah sebuah tabel perkalian dengan ukuran N x N. Baris ke-i kolom ke-j pada output merupakan hasil perkalian dari i dan j. Apabila bilangan masukan adalah nol atau bernilai negatif, program tidak mengeluarkan apa-apa. Contoh Masukan: 4 Contoh Keluaran: 1 2 3 4 2 4 6 8 3 6 9 12 4 8 12 16 Catatan: Perhatikan dalam setiap baris satu bilangan dengan bilangan lain hanya dipisahkan 1 (satu) spasi. Page 1 of 5 Olimpiade Sains Nasional VI 3. Soal Pemrograman Hari Pertama Di dalam pelatihan militer terdapat sebuah sandi yang menggeser semua huruf dalam alfabet sebanyak dua langkah ke kanan, contoh: 'AKU ANAK TOKI' jika di-kode-kan menjadi 'CMW CPCM VQMK'. Huruf Y dan Z masingmasing di-kode-kan menjadi A dan B. Buatlah program untuk mengembalikan kalimat yang sudah ter-kode-kan ke dalam bentuk asalnya. Contoh Masukan: CMW CPCM VQMK Contoh Keluaran : AKU ANAK TOKI Catatan: Semua input dipastikan dalam huruf besar (uppercase) dan panjangnya tidak lebih dari 255 karakter. 4. Buatlah sebuah program yang menerima masukn sebuah bilangan bulat (dipastikan berada dalam batasan tipe data integer), dan mengeluarkan pola bintang dan spasi seperti pada contoh berikut. Contoh Masukan: 5 Contoh Keluaran: *........* **......** ***....*** ****..**** ********** Contoh Masukan: 10 Contoh Keluaran: *..................* **................** ***..............*** ****............**** *****..........***** ******........****** *******......******* ********....******** *********..********* ******************** Page 2 of 5 Olimpiade Sains Nasional VI 5. Soal Pemrograman Hari Pertama Buatlah sebuah program untuk menjumlahkan dua buah matriks. Baris pertama pada masukan berisi 2 bilangan bulat, M dan N (2 <= M,N <= 100), merupakan ukuran baris dan kolom matriks. Baris 2 sampai m + 1 berisi n buah bilangan bulat (dalam batasan tipe data integer), masing-masing merupakan elemen dari matriks pertama. Baris m + 2 sampai 2m + 1 berisi n buah bilangan bulat (dalam batasan tipe data integer), masing-masing merupakan elemen dari matriks kedua. Keluaran dari program ini adalah matriks yang merupakan hasil penjumlahan kedua matriks masukan. Contoh Masukan: 3 3 1 2 3 4 5 6 7 8 9 1 4 7 2 5 8 3 6 9 Contoh Keluaran: 2 6 10 6 10 14 10 14 18 Penjelasan Contoh: 1 2 3 matriks berukuran 3 × 3, dengan matriks pertama: 4 5 6 7 8 9 1 4 7 dan matriks kedua: 2 5 8 3 6 9 1 + 1 2 + 4 3 + 7 2 6 10 matriks hasil penjumlahan: 4 + 2 5 + 5 6 + 8 = 6 10 14 7 + 3 8 + 6 9 + 9 10 14 18 Page 3 of 5 Olimpiade Sains Nasional VI 6. Soal Pemrograman Hari Pertama Buatlah sebuah program yang menerima masukan sebuah bilangan bulat (1..9), dan mengeluarkan pola seperti pada contoh berikut. Contoh Masukan: 5 Contoh Keluaran: ....9.... ....8.... ....7.... ....6.... 123456789 ....4.... ....3.... ....2.... ....1.... Contoh Masukan: 3 Contoh Keluaran: ..9...... ..8...... ..7...... ..6...... ..5...... ..4...... 123456789 ..2...... ..1...... Page 4 of 5 Olimpiade Sains Nasional VI 7. Soal Pemrograman Hari Pertama Buatlah program yang menghitung jumlah kemunculan huruf pada suatu kalimat. Baris pertama pada masukan berisi bilangan bulat m (1 <= m <= 10000) dan karakter c, dengan m menyatakan jumlah huruf pada kalimat masukan dan c yang menyatakan karakter yang akan dicari jumlah kemunculannya. Baris kedua berisi m karakter yang telah didefinisikan sebelumnya. Keluaran berupa jumlah kemunculan karakter c. Huruf besar dan huruf kecil dianggap sama. Contoh Masukan: 20 a Aku seorang kapiten. Contoh Masukan: 3 8. Buatlah sebuah program untuk mengubah suatu pecahan menjadi bentuk pecahan campuran-tersederhana. Sebagai contoh, 10/4 akan diubah menjadi 2 1/2, 6/9 menjadi 2/3. Contoh Masukan: 10/4 Contoh Keluaran: 2 1/2 Contoh Masukan: 6/9 Contoh Keluaran: 2/3 Page 5 of 5 Olimpiade Sains Nasional VI Bidang Informatika TINGGI KANDANG SUSUN Kode Soal : Batas Run-time : Batas Memori : Masukan : Keluaran : SUSUN.PAS 1 detik / testcase 32 MB Standard Input Standard Output Selain bebek, Pak Dengklek berkeinginan memelihara kucing dan karena itu ia bermaksud membangun kandang untuk kucing-kucingnya. Harga tanah kini sangat mahal, Pak Dengklek tidak memiliki lahan yang cukup luas untuk membangun kandang berlantai satu, maka kandang susunlah solusi untuk tempat tidur N kucingnya (1 <= N <= 1000000). Namun dalam kasus ini, justru yang kita pedulikan adalah total tinggi dari kandang susun tersebut, bukan luasnya. Sekedar informasi, kucing-kucing Pak Dengklek adalah hewan yang rewel, mereka tidak ingin tempat tinggalnya lebih rendah dari batas yang sudah mereka tentukan. Untuk tiap lantai kandang, Pak Dengklek hanya dapat memasukkan K (1 <= K <= 1000000) kucing secara berurutan, sehingga kucing 1 sampai K pasti akan berada di lantai pertama, kucing ke K+1 sampai 2K pasti akan berada di lantai kedua, dan seterusnya. Agar semua kucing senang, tinggi setiap lantai haruslah nilai maksimal dari batas yang ditentukan oleh kucing-kucing yang ada dalam lantai tersebut. Tugas Anda kini adalah mencari berapa total tinggi dari kandang susun yang akan dibangun Pak Dengklek. Perlu diingat untuk alas dan atap dibutuhkan papan setebal 1 sentimeter, di antara kedua lantai pun ada sekat setebal 1 sentimeter dan tebal-tebal itu harus diperhitungkan juga dalam menentukan total tinggi kandang. Format Masukan Baris pertama berisi dua buah bilangan bulat N dan K. Baris ke-2 sampai ke N+1 masing-masing berisi sebuah bilangan Ti yang merupakan batas tinggi yang diinginkan oleh kucing ke-i (dalam sentimeter). Format Keluaran Sebuah bilangan bulat yang menunjukkan total tinggi kandang susun yang akan Pak Dengklek bangun (dalam sentimeter). Contoh Masukan 1 Contoh Keluaran 1 5 3 62 30 20 15 19 29 Page 1 of 8 Olimpiade Sains Nasional VI Bidang Informatika Contoh Masukan 2 2 2 2 2 Contoh Keluaran 2 4 Penjelasan Contoh 1 Total tinggi = 62 = 30 + 29 + 1 (alas) + 1 (atap) + 1 (sekat lantai 1 dan lantai 2) Page 2 of 8 Olimpiade Sains Nasional VI Bidang Informatika MENGHITUNG RUANG TERTUTUP Kode Soal : Batas Run-time : Batas Memori : Masukan : Keluaran : RUANG.PAS 1 detik / testcase 32 MB Standard Input Standard Output Pada suatu hari yang indah, Pak Dengklek bermain-main dengan komputernya. Dia berusaha menggambar sesuatu menggunakan karakter-karakter yang tersedia di keyboard. Setelah lama bermain-main, Pak Dengklek tertarik dengan karakter slash "/", karakter backslash "\", dan karakter period "." pada keyboard, karena dengan karakter-karakter itu dia dapat membuat gambar abstrak seperti gambar berukuran 5 x 5 di bawah ini: ./\.. .\/\. .///. ///./ \/./. Pak Dengklek memiliki kreativitas yang besar. Dari gambar-gambar abstrak yang dibuatnya, dia ingin mengetahui ada berapa ruang tertutup yang dihasilkan oleh gambarnya. Ruang tertutup adalah ruang yang seluruhnya dibatasi oleh dinding. Karakter slash "/" dan backslash "\" berfungsi sebagai dinding. Anggaplah karakter "/" pada suatu kotak tepat menghubungkan titik sudut kanan atas dan kiri bawah kotak itu, dan karakter "\" pada suatu kotak tepat menghubungkan titik sudut kiri atas dan kanan bawah kotak itu. Sedangkan karakter "." mewakili ruang kosong, walaupun tidak semua ruang kosong ditandai dengan karakter ".". Untuk lebih jelasnya, gambar abstrak di atas dapat diterjemahkan menjadi gambar di bawah ini: Perhatikan bahwa ruang yang dibatasi dengan garis merah dan garis biru merupakan dua ruang tertutup yang dimaksud. Catatan: ruang yang ditandai dengan X bukan ruang tertutup, karena ruang itu tidak seluruhnya dibatasi oleh dinding (sisi kanan dan sisi bawah terbuka). Page 3 of 8 Olimpiade Sains Nasional VI Bidang Informatika Format Masukan Baris pertama berisi bilangan bulat N dan M (1 <= N, M <= 250) yang merupakan tinggi dan lebar gambar. N baris berikutnya masing-masing memiliki panjang M karakter dan berisi gambar abstrak yang dibuat oleh Pak Dengklek. Gambar abstrak ini hanya terdiri atas karakter "/", "\", dan "." saja. Format Keluaran Baris pertama berisi sebuah bilangan bulat yang merupakan jumlah ruang tertutup pada gambar abstrak pada masukan. Contoh Masukan 1 5 5 ./\.. .\/\. .///. ///./ \/./. Contoh Keluaran 1 2 Contoh Masukan 2 Contoh Masukan 3 5 6 4 4 ../\.. \../ .//\\. .\/. .\\.\\ ./\. ..\\// /..\ ...\/. Contoh Keluaran 3 Contoh Keluaran 2 0 2 Page 4 of 8 Olimpiade Sains Nasional VI Bidang Informatika PEMBERAT Kode Soal : Batas Run-Time : Batas Memori : Masukan : Keluaran : PEMBERAT.PAS 0,1 detik / testcase 1 MB Standard Input Standard Output Setelah membeli beberapa ekor kucing, kini Pak Dengklek memiliki dua jenis binatang di kebun belakang rumahnya. Kucing dan bebek tentunya. Di belakang rumahnya tersebut, Pak Dengklek juga memiliki sebuah jungkat-jungkit untuk kucing dan bebeknya bermain. Agar tidak dinilai pilih kasih, untuk setiap kali permainan jungkat-jungkit, Pak Dengklek selalu mengatur sedemikian rupa sehingga di satu sisi pastilah seekor bebek dan di sisi lainnya pastilah seekor kucing. Sayangnya semua kucing Pak Dengklek gemuk-gemuk sehingga berat kucing terkurus Pak Dengklek pun tetap lebih besar dari berat bebek tergemuk. Oleh karena itu jungkat-jungkit Pak Dengklek sering kali lebih berat ke sisi di mana kucing berada dan permainan pun tidak berjalan dengan mengasyikan. Untuk mengatasi masalah ini, dasar Pak Dengklek yang banyak akalnya, ia menggunakan beberapa pemberat di sisi bebek berada, sedemikian sehingga berat satu sisi dan lainnya kini sama. Sayangnya Pak Dengklek tidak memiliki pemberat dalam setiap ukuran, Pak Dengklek hanya memiliki pemberat dengan ukuran 2^K dimana 0 <= K <= 60. Dan Pak Dengklek hanya memiliki satu buah pemberat untuk setiap ukuran tersebut. Nah, tugas kalian adalah membantu Pak Dengklek untuk menentukan pemberat mana saja yang harus ia gunakan. Asumsikan bahwa input selalu valid dan selalu ada solusi akan input yang diberikan. Format Masukan Baris pertama berisi sebuah bilangan bulat yang menunjukkan berat bebek yang akan bermain. Baris kedua berisi sebuah bilangan bulat yang menunjukkan berat kucing yang akan bermain. 1 <= berat bebek, berat kucing <= 2^61. Format Keluaran Beberapa baris dengan satu bilangan bulat setiap barisnya yang merupakan berat dari masing-masing pemberat yang digunakan Pak Dengklek. Keluaran ini diatur dalam keadaan terurut mengecil. Contoh Masukan 1 1 6 Contoh Keluaran 1 4 1 Page 5 of 8 Olimpiade Sains Nasional VI Bidang Informatika Contoh Masukan 2 10 101 Contoh Keluaran 2 64 16 8 2 1 Page 6 of 8 Olimpiade Sains Nasional VI Bidang Informatika PERMUTASI EKSPRESI Kode Soal: Batas Run-time: Batas Memori: Masukan: Keluaran: PERMUT.PAS 0.5 detik / testcase 32 MB Standard Input Standard Output Anda akan diberikan sebuah angka yang panjangnya maksimal 12 digit dan minimal 2 digit. Misalkan Anda diberikan angka 111. Angka tersebut tidak terlalu menarik bukan? Mari kita membuat hal yang lebih menarik dengan menyelipkan tanda '+' atau '-' di antara angka-angka tersebut. Jika Anda menyelipkan tanda '+' di antara setiap dua angka, Anda akan mendapatkan 1+1+1 = 3. Jika Anda menyelipkan tanda '-' di antara setiap dua angka, Anda akan mendapatkan 1-1-1 = -1. Hal yang menarik adalah Anda dapat membuat berbagai ekspresi dari angka 111 ini yang memiliki hasil ekspresi yang berbedabeda. Untuk setiap dua angka yang bersebelahan, Anda dapat memilih untuk menyelipkan tanda '+', tanda '-', atau tidak menyelipkan apa-apa. Jika anda memilih untuk tidak menyelipkan apa-apa, Anda akan mendapatkan 111 = 111. Format Masukan Baris pertama berisi sebuah bilangan bulat N yang panjangnya maksimal 12 digit dan minimal 2 digit. Bilangan bulat ini selalu diawali dengan digit positif. Format Keluaran Baris pertama berisi sebuah bilangan bulat, yang merupakan banyaknya kemungkinan hasil ekspresi yang dapat dibuat dari bilangan N pada masukan. Contoh Masukan 1 111 Contoh Keluaran 1 7 Contoh Masukan 2 101 Contoh Keluaran 2 5 Page 7 of 8 Olimpiade Sains Nasional VI Bidang Informatika Penjelasan Contoh 1 Tujuh hasil ekspresi yang dimaksud pada contoh keluaran 1 adalah 111 = 111 11+1 = 1+11 = 12 11-1 = 10 1+1+1 = 3 1+1-1 = 1-1+1 = 1 1-1-1 = -1 1-11 = -10 Penjelasan Contoh 2 Lima hasil ekspresi yang dimaksud pada contoh keluaran 2 adalah 101 = 101 10+1 = 11 10-1 = 9 1+0+1 = 1-0+1 = 1+01 = 2 1+0-1 = 1-0-1 = 1-01 = 0 Page 8 of 8 SOAL SESI 1 OLIMPIADE SAINS NASIONAL VII BIDANG INFORMATIKA 10 AGUSTUS 2008 MAKASSAR, SULAWESI SELATAN Selamat Bekerja, Berkompetisi, Jadilah Yang Terbaik! Sesi 3 OSN VII OSN2008: Olimpiade Sain Nasional 2008 Pilihan berganda Waktu: 10 Agustus 2008, 08:45:00-11:45:00 • Jawaban Betul: 4 • Jawaban Salah: -1 • Jawaban Kosong: 0 • Nilai akhir dipetakan ke 20 - 100 Bagian Deskripsi Deskripsi osn0816.html Berikut ini adalah sebuah fungsi untuk menjawab beberapa pertanyaan dalam set ini: Deskripsi osn0831.html Di sebuah daerah, ada tepat 5 buah sungai, bernama A, B, C, D, E dan tepat 5 buah kota, bernama F, G, H, I, J. Kota F, H, dan J masing-masing dialiri oleh 3 buah sungai. Sungai B, C, dan D masingmasing mengaliri 2 buah kota. Kota I hanya dialiri oleh sungai B dan E, dan kota G hanya dialiri oleh sungai D dan A. Jika sebuah sungai yang mengaliri sebuah kota meluap, maka kota tersebut akan kebanjiran. Bagian Pertanyaan 1. "Angap bahwa semua burung bersayap dua, dan semua serangga bersayap genap. Anggap juga bahwa tidak semua burung tidak bisa terbang, tetapi semua serangga bisa terbang. Tetapi, ada juga hewan lain yang bisa terbang, meskipun hewan itu bukan burung dan bukan serangga." Berdasarkan pernyataan di atas, manakah pernyataan yang salah? A. "Setiap hewan yang tidak bisa terbang tetapi bersayap dua adalah burung." B. "Setiap hewan yang tidak berwayap dua tetapi bisa terbang bukan burung." C. "Jika seekor hewan tidak bisa terbang dan bersayap ganjil, hewan itu bukan burung." D. "Tidak semua hewan bersayap genap adalah burung." E. "Tidak semua hewan yang bersayap 6 dan bisa terbang adalah serangga." 2. Ada 5 orang di sebuah pertemuan, bernama A, B, C, D, dan E. o A berkata bahwa dia mengenal B dan E, tetapi C tidak mengenal E. o B berkata bahwa C, D, dan E mengenal satu sama lain. o C berkata behwa dia tidak mengenal E. o D berkata behwa A tidak mengenal C. o E berkata behwa dia mengenal C, dan A juga mengenal C. Jika ada tepat dua orang berbohong, siapakah keduanya itu? A. B. C. D. E. B dan E B dan D A dan E A dan B C dan E Halaman 1 dari 9 Sesi 3 OSN VII 3. Ada 1000 buah kubus yang masing-masing berukuran 1 cm x 1 cm x1 cm. Setiap sisi dari setiap kubus dicat dengan warna yang berbeda-beda: merah, biru, hijau, kuning, oranye, dan putih. Kubuskubus itu disusun sehingga membentuk sebuah kubus besar berukuran 10c cm x 10 cm x 10 cm. Berapa cm2 luas maksimal daerah berwarna merah yang mungkin dilihat oleh seorang pengamat? A. B. C. D. E. 488 384 502 592 600 4. Dari bilangan 1 sampai dengan 2008, ada berapa bilangan yang hanya terdiri dari angka-angka ganjil? A. B. C. D. E. 280 208 99 504 1004 5. Jika setiap digit dari deret bilangan 1, 2, 3, ..., 100 dijumlahkan, maka berpakah hasilnya? A. B. C. D. E. 901 5050 200 910 505 6. (Soal ini mengacu pada Deskripsi osn0816.html di atas) Hasil pemanggilan f(10,6) adalah: A. B. C. D. E. 848 60 160 6000 1012 7. Perhatikan algoritma rekursif berikut: 1. function f(m,n: integer): integer; 2. begin 3. if (m = 0) or (n = 0) then f := 1 4. else f := f(m-1, n-1) + f(m-1, n); 5. end; Hasil pemanggilan f(6,6) adalah: A. B. C. D. E. 64 12 15 35 81 Halaman 2 dari 9 Sesi 3 8. Perhatikan algoritma berikut ini: Jika nilai awal n adalah 0 dan nilai i adalah 686; nilai n pada akhir algoritma adalah A. B. C. D. E. 12 11 13 14 15 9. Perhatikan algoritma sebuah fungsi berikut ini: nilai coba(19, 4, 15) adalah A. B. C. D. E. 150 112 78 22 18 10. Jika pada program didefinisikan sebuah array berikut ini: dan diberikan sebuah fungsi hitung berikut ini: Nilai hitung(4) adalah Halaman 3 dari 9 OSN VII Sesi 3 A. B. C. D. E. OSN VII 87 66 72 82 79 11. Diberikan sebuah algoritma Nilai yang dicetak ke layar jika a, b, c, d masing-masing 1, 2, 3, 4 adalah A. B. C. D. E. 66 58 32 28 82 12. Diberikan sebuah array A berikut ini: dan algoritma berikut ini: Saat A[6] bernilai 18 makaaa A[8] bernilai ... A. B. C. D. E. 14 13 11 12 10 13. Perhatikan algoritma di bawah ini: Jika diberikan a, b, c ketiganya adaah 1, maka jika nilai n adalah 20, nilai satuan dari d pada akhir algoritma adalah ... Halaman 4 dari 9 Sesi 3 A. B. C. D. E. 9 8 4 6 10 14. Diberikan array berikut: dan diberikan algoritma berikut: Nilai elemen ke 9 dari array tersebut (atau a[9]) adalah... A. B. C. D. E. 7 8 4 6 5 15. Diberikan algoritma berikut: (*** Algoritma ini telah mengalami revisi!! ***) Banyaknya karakter '*' yang dicetak ke layar adalah ... A. B. C. D. E. 128 121 149 118 102 Halaman 5 dari 9 OSN VII Sesi 3 OSN VII 16. Perhatikan algoritma berikut ini: Jika nilai awal x, y, z ketiganya adalah 1; nilai z pada akhir algoritma adalah A. B. C. D. E. 1593 983 606 2580 140 17. Perhatikan algoritma berikut ini: Jika nilai x, y, dan z diberikan masing-masing 2, 6, 21; nilai yang dicetak ke layar adalah A. B. C. D. E. 17 13 -25 25 -17 18. (Soal ini mengacu pada Deskripsi osn0831.html di atas) Pernyataan manakah yang pasti salah? A. B. C. D. E. Ada tepat 3 sungai yang meluap tetapi kota H tidak kebanjiran Ada tepat 1 sungai yang meluap dan 4 kota yang kebanjiran Ada tepat 2 sungai yang meluap dan 4 kota yang kebanjiran Kota F, G, dan H kebanjiran tetapi sungai A, B, dan C tidak meluap Sungai A dan E meluap dan semua kota kebanjiran 19. (Soal ini mengacu pada Deskripsi osn0831.html di atas) Jika ada tepat 4 kota yang kebanjiran, berapa jumlah minimal sungai yang meluap? A. B. C. D. E. 1 2 3 4 5 Halaman 6 dari 9 Sesi 3 OSN VII 20. (Soal ini mengacu pada Deskripsi osn0831.html di atas) Jika semua sungai-sungai yang mengaliri kota F meluap, berapa banyak minimal kota yang kebanjiran? A. B. C. D. E. 2 1 3 4 5 21. (Soal ini mengacu pada Deskripsi osn0831.html di atas) Jika kota H dialiri oleh sungai A, C, dan E, sungai manakah yang tidak mugkin mengaliri F dan J sekaligus? A. B. C. D. E. C A B D E 22. (Soal ini mengacu pada Deskripsi osn0831.html di atas) Dua kota manakah yang pasti dialiri sungai yang sama? A. B. C. D. E. F dan H F da I G dan H G dan I H dan I 23. (Soal ini mengacu pada Deskripsi osn0831.html di atas) Jika sungai A mengaliri tepat 4 kota di daerah tersebut, berapa kota kah yang dialiri oleh sungai E? A. B. C. D. E. 3 1 2 4 5 24. Seorang tukang cat dapat mengerjakan pengecatan suatu ruangan dalam x jam. Tepat pada jam ke 2, catnya habis sehingga terpaksa menunggu kaleng cat berikutnya yang sedang dipesan. Berapa bagiankah pekerjaan yang belum ia selesaikan? A. B. C. D. E. (x - 2)/x (2 - x)/x x-2 (x - 2)/2 x/2 25. Suatu kubus A berada di dalam bola dan tepat setiap ujung kubis mengenai dinding bola. Bola tersebut berada dalam suatu kubus B dan tepat keenam dinding kubus B menempel pada bola. Dengan asumsi dinding bola maupun kubus sangat tipis hingga bisa diabaikan, berapa kalikah volume kubus B terhadap volume kubus A? A. B. C. D. E. 2.828 3.14 4 8 2.09 Halaman 7 dari 9 Sesi 3 OSN VII Soal Isian Singkat OSN2008: Olimpiade Sains Nasional 2008 Petunjuk: Jawablah sesingkat-singkatnya untuk memungkinkan penilaian secara otomatis 1. Mengacu pada Masalah Reverse & Add, berapakah harga bilangan palindrom yang diperoleh jika dimulai dari N=750? 2. Jika setiap digit ganjil dari deret bilangan ganjil 1, 3, 5, ..., 9999 dijumlahkan, maka berapakah hasilnya? 3. Masalah Reverse & Add: Mereverse suatu bilangan bulat positif N adalah membalikkan urutan digitnya (direverse) membentuk bilangan baru M. Misalnya 123 direverse menjadi 321 dan 130 direverse menjadi 031 (yaitu 31). Jika N direverse menjadi M dan kemudian keduanya dijumlahkan membentuk N baru, dan direverse kembali menjadi M, lalu dijumlahkan kembali secara berulang-ulang hingga menghasilkan bilangan yang jika direverse menghasilkan bilangan yang sama (yaitu bilangan palindrom). Jika bilangan N awalnya adalah 195 berapakah bilanga palindromnya? 4. Deret 3n+1: Sebuah deret bilangan bulat positif dihasilkan dengan aturan sbb. o Dimulai dari satu bilangan a > 0 o Jika a merupakan bilangan genap maka bilangan berikutnya adalah a/2 o Jika a merupakan bilangan ganjil maka bilangan berikutnya adalah 3a+1 o Bilangan-bilangan berikutnya dihasilkan dengan aturan di atas. Jika dimulai dari deret barharga 55 sebagai yang pertama berapakah harga bilangan yang ke 10 dalam deret? 5. Mengacu pada deret bilangan 3n+1 pada soal sebelumnya, ada berapa bilangan yang akan muncul mulai dari 100 sampai dengan angka 10? 6. Mengacu pada deret bilangan 3n+1 pada soal sebelumnya, jika dimulai dari 55 sebagai yang pertama pada bilangan keberapa bilangan > 1000 muncul pertama kalinya? 7. Multiplying Game: Amir dan Badu suka sekali akan permainan berikut ini. Mula-mula keduanya mendapatkan sebuah bilangan bulat positif secara sembarang. Bilangan itu kita sebut N. Mulai dari p=1, secara bergantian keduanya menentukan satu bilangan k antara 2 s.d. 9 dan memperkalikannya ke p (sehingga berikutnya p berharga p semula dikali k). Permainan berlanjut selama p < N dan pemain yang menang adalah yang pertama menyebahkan p >= N. Dengan asumsi bahwa mereka sudah mahir memilih yang bilangan k terbaik pada setiap gilirannya (tidak akan membuat kesalahan yang tidak perlu), pada suatu kesempatan didapati N = 17 dan Badu kebagian yang pertama yang harus memilih k. Siapkah yang akan kalah? (Jawab: Amir atau Badu). 8. Mengacu pada permainan Multiplying Game di soal sebelumnya antara Amir dan Badu, untuk N = 162 dan Badu yang memulai siapakah yang akan menang? 9. Soal Tangga Baru Pak Dengklek: Sudah bosan membuat tangga yang biasa-biasa saja, Pak Dengklek hedak membuat tangga dengan aturan jarak sebagai berikut. Tinggi tangga adalah bilangan bulat (positif) dinyatakan dalam suatu satuan. Tinggi anak tangga adalah bilangan bulat namun beda ketinggian suatu anak tangga dengan anak tangga berikutnya/sebelumnya tidak boleh berselisih lebih dari satu satuan (anak tangga berikutnya bisa lebih pendek 1 satuan, bisa lebih panjang 1 satuan atau sama tinggi). Aturan berikutnya, anak tangga pertama harus tepat 1 satuan dari ujung bawah tangga (yaitu pada lantai) dan terakhir harus tepat 1 satuan dari ujung atas tangga. Misalnya jika tinggi tangga 4 maka tinggi dari anak-anak tangga bisa, 1, 2, dan 1 (ada 3 anak tangga). Ada berapa minimal banyaknya anak tangga jika tinggi tangga 10? 10. Notasi prefiks sering digunakan dalam menyatakan suatu ekspresi aritmatika dengan menuliskan operator aritmatika di depan dari kedua operand-nya. Misalnya untuk "a + b" ditulis "+ a b" (Baca: "+_a_b" dengan "_" adalah spasi). Dengan notasi prefiks maka tanda kurung tidak diperlukan lagi karena otomatis yang akan menjadi operand dari suatu operator adalah yang mengikutinya misalnya "(a + b) * c" akan ditulis "* + a b c" (Baca: "*_+_a_b_c" dengan "_" adalah spasi) sementara untuk "a + b * c" adalah "+ a * b c" (Baca: "+_a_*_b_c" dengan "_" adalah spasi). Berapakah perhitungan dari ekpresi aritmatika dalam notasi prefiks "+ * / 14 + 9 12 + - / 3 + 4 2 / 4 8 3 / 22 1" (Baca: "+_*_/_14_+_9_12_+_-_/_3_+_4_2_/_4_8_3_/_22_1" dengan "_" adalah spasi) 11. Masalah Makanan-makanan di OSN: Selama penyelenggaraan suatu OSN, kepada para OSN diberikan menu makanan yang berisi 6 pilihan: A, B, C, D, E, dan F. Panitia yang bertugas menyiapkan makanan telah mendapatkan informasi sebagai berikut. o Mereka yang menyukai B pasti menyukai juga E. o Mereka yang menyukai E pasti tidak suka C. o Beberapa dari yang menyukai E juga menyukai A. o Semua yang menyukai C, suka juga D. o Beberapa dari yang suka D menyukai juga E. o Beberapa yang menyukai A, tidak suka C. o Semua yang menyukai D, juga menyukai F. Budiman adalah peserta OSN yang menyukai B. Suatu hari disajikan makanan-makanan A, C, D, E Halaman 8 dari 9 Sesi 3 OSN VII dan F. Manakah di antaranya yang ia tidak sukai? 12. Dari soal Makanan-makanan di OSN di atas, apabila ternyata Tono yang juga peserta OSN, menyukai D, apakah ia juga menyukai C? (Jawab dengan Y untuk Ya, T untuk tidak, atau X untuk tidak bisa ditentukan. 13. Empat orang hendak menyeberangi sebuah jembatan yang sempit dari tepi A ke tepi B sesegera mungkin. Sayangnya hari itu turun hujan deras dan mereka tidak mau kehujanan. Di A maupun di B terdapat tempat berteduh dari hujan. Beruntungnya seseorang membawa payung walaupun hanya cukup untuk berdua saja sekali menyeberang. Jadi dua orang menyeberang dan dari A ke B, kemudian satu orang kembali dari B ke A untuk membawa payung untuk digunakan yang lainnya. Kecepatan secara perorangan berbeda-beda tetapi saat menyeberang tentunya yang lebih cepat harus mengikuti yang lebh lambat. Waktu tempuh menyeberangi jembatan secara perorangan adalah 5, 1, 10, dan 2 (dalam satuan waktu tetentu). Jika mereka menemukan urutan penyeberangan yang mencapai waktu total minimal, berapakah panjang waktu minimal itu sehingga keempatnya tiba di B? 14. Berapakah 3 digit terkanan dari 1110? 15. Diberikan algoritma mencetak '*' berikut: 1. 2. 3. 4. 5. 6. 7. 8. 9. i := 1; while i < n do begin j := n; while j > 0 do begin if (j mod 2) = 1 then write('*'); j := j div 2; end; i := i + 2; end; Jika banyaknya '*' yang dicetak adalah 104, berapakah n harus diberi harga? 16. Diberikan algoritma fungsi wah berikut ini. 17. 18. 19. 20. Hasil dari pemanggilan fungsi wah(3,3) adalah... (mohon diabaikan ";" di belakang pemangilan rekursif fungsi "wah(...)+1") Mengacu pada deskripsi fungsi wah pada soal sebelumnya, banyaknya pasangan x dan y yang berbeda, yang menyebabkan pemanggilan wah(x,y) bernilai 3 adalah .... Diberikan persamaan ABCDEF x 5 = FABCDE, di mana setiap huruf mewakili satu digit (huruf yang berbeda boleh mewakili digit yang sama), dan A ≠ 0, digit apakah yang diwakili oleh B? Sebuah sungai dimulai dari sebuah mata air. Setelah mengalir 1 km, sungai itu bercang dua. Untuk setiap cabang, setelah mengalir 1 km, cabang itu bercabang dua lagi. Begitu seterusnya dengan cabang-cabang yang terbentuk. Jarak dari sumber mata air ke laut, melalui cabang yang mana saja adalah 8 km. Berapakah panjang total aliran air sungai tersebut. Andi adalah kakak Tono dan Didi adalah adik Tono. Andi memiliki 5 orang adik. Didi memiliki 2 orang adik dan 7 orang kakak. Ada berapa orang di dalam keluarga Tono yang lebih tua daripada Tono tetapi lebih muda daripada Andi, jika tidak ada yang kembar di dalam keluarga Tono? Halaman 9 dari 9 SOAL SESI 2 OLIMPIADE SAINS NASIONAL VII BIDANG INFORMATIKA 10 AGUSTUS 2008 MAKASSAR, SULAWESI SELATAN Selamat Bekerja, Berkompetisi, Jadilah Yang Terbaik! Sesi 2 OSN VII Kartu 1 Nama Program: kartu1.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Pak Dengklek baru saja membeli beberapa set kartu permainan ayam‐bebek. Satu set kartu permainan ayam‐ bebek terdiri atas 18 kartu bergambar, dengan rincian sebagai berikut: • 9 kartu bergambar 1 hingga 9 ekor ayam, dan • 9 kartu bergambar 1 hingga 9 ekor bebek Jika kartu dituliskan dengan notasi XY dengan X adalah banyaknya gambar ayam/bebek pada kartu dan Y adalah jenis gambar pada kartu (A = ayam dan B = bebek), satu set kartu permainan ayam‐bebek terdiri atas kartu‐kartu: 1A, 2A, 3A, 4A, 5A, 6A, 7A, 8A, 9A, 1B, 2B, 3B, 4B, 5B, 6B, 7B, 8B, dan 9B. Salah satu permainan yang bisa dimainkan dengan kartu ayam‐bebek ini adalah permainan perang unggas. Dalam permainan ini, masing‐masing pemain akan menerima 6 buah kartu yang telah diambil secara acak dari 1 atau lebih set kartu permainan yang tersedia. Setiap pemain kemudian akan mengeluarkan sebuah susunan kartu yang terdiri atas maksimal 3 kartu. Tiap kombinasi susunan kartu akan mendapat nilai sesuai dengan kriteria berikut: • • • • Susunan 3 kartu: o 3 kartu A = 20 o 2 kartu A, 1 kartu B = 25 o 1 kartu A, 2 kartu B = 50 o 3 kartu B = 100 Susunan 2 kartu: o 2 kartu A = 10 o 1 kartu A, 1 kartu B = 40 o 2 kartu B = 70 Susunan 1 kartu: o A = 2 o B = 5 Banyaknya gambar pada kartu tidak diperhitungkan. Pemenang dari permainan ini adalah pemain yang mengeluarkan susunan kartu dengan nilai tertinggi. Karena tidak percaya akan kemampuan dirinya sendiri, Pak Dengklek meminta bantuan Anda untuk membuat sebuah program yang akan menentukan berapa nilai yang akan didapatkan oleh Pak Dengklek apabila ia mengeluarkan susunan kartu terbaik yang dimilikinya. Program Anda akan menerima masukan berupa 6 buah kartu yang diterima oleh Pak Dengklek dalam permainan. Keenam buah kartu tersebut dinyatakan dalam notasi XY dan masing‐masing dipisahkan oleh sebuah spasi. FORMAT MASUKAN Enam pasang angka‐huruf yang menyatakan kartu yang dimiliki Pak Dengklek, masing‐masing dipisahkan oleh satu spasi. FORMAT KELUARAN Sebuah bilangan bulat yang menyatakan nilai susunan kartu terbaik yang dapat dikeluarkan oleh Pak Dengklek. CONTOH MASUKAN CONTOH KELUARAN 3B 2A 1B 7B 9A 7A 100 Halaman 1 dari 8 Sesi 2 OSN VII Kartu 2 Nama Program: kartu2.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Pak Dengklek kembali bermain dengan kartu ayam‐bebeknya. Pada permainan ini, Pak Dengklek menggabungkan beberapa set kartu ayam bebek, mengocoknya, dan kemudian meletakkannya dalam posisi tumpukan tertutup. Permainan dimainkan oleh n orang pemain, yang diberi nomor urut mulai dari 1 hingga n. Pemain pertama akan memulai permainan dengan mengambil kartu dari tumpukan secara terus menerus hingga kartu yang diambil terakhir memiliki banyak gambar yang lebih sedikit dibanding kartu yang diambil sebelumnya (tanpa mempedulikan jenis gambar pada kartu). Kartu setelah kartu terakhir yang diambil pemain pertama akan menjadi kartu pertama pemain kedua, dan seterusnya. Permainan berhenti ketika tumpukan kartu habis atau semua pemain telah mendapatkan gilirannya 1 kali (tergantung kondisi mana yang terpenuhi lebih dahulu). Diberikan n (1 ≤ n ≤ 100000) orang pemain dan tumpukan k (1 ≤ k ≤ 100000) kartu, tentukan banyaknya kartu yang didapat pemain pertama pada akhir permainan. Perlu diingat, kartu ayam‐bebek merupakan kartu bergambar 1 hingga 9 ekor ayam atau bebek yang dinyatakan dengan pasangan angka‐huruf XY dengan X menyatakan banyaknya gambar dan Y menyatakan jenis gambar (A = ayam dan B = bebek). FORMAT MASUKAN Baris pertama: banyaknya pemain, n. Baris kedua: banyaknya kartu dalam tumpukan, k. Baris ke‐3..k+2: deskripsi tiap kartu pada tumpukan, mulai dari kartu paling atas. FORMAT KELUARAN Sebuah bilangan bulat yang menyatakan banyaknya kartu yang didapat oleh pemain pertama. CONTOH MASUKAN 2 10 4A 5A 6B 6A 6A 5B 1A 1B 2B 3B CONTOH KELUARAN 6 Halaman 2 dari 8 Sesi 2 OSN VII Kartu 3 Nama Program: kartu3.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Pak Dengklek mencoba memainkan kartu ayam‐bebeknya dengan cara yang berbeda. Ia menyediakan sebuah papan berpetak 3x3 dan kartu‐kartu yang telah dipisahkan sesuai jenisnya. Pemain pertama akan mendapatkan kartu ayam dan pemain kedua akan mendapatkan kartu bebek. Permainan dilakukan secara bergiliran, dimulai dari pemain pertama. Pemain pertama akan meletakkan sebuah kartunya pada salah satu petak di papan. Kemudian, pemain kedua akan meletakkan sebuah kartunya pada salah satu petak di papan yang masih kosong, dan seterusnya. Seorang pemain dinyatakan menang apabila pemain tersebut memiliki tiga buah kartu yang terletak secara berjajar secara horizontal, vertikal, atau diagonal di atas papan permainan. Diberikan beberapa konfigurasi akhir kartu pada papan, tentukan apakah permainan diakhiri dengan kemenangan pemain pertama, pemain kedua, atau seri/belum dapat ditentukan, untuk masing‐masing konfigurasi. Kartu ayam‐bebek merupakan kartu bergambar 1 hingga 9 ekor ayam atau bebek yang dinyatakan dengan pasangan angka‐huruf XY dengan X menyatakan banyaknya gambar dan Y menyatakan jenis gambar (A = ayam dan B = bebek). FORMAT MASUKAN Baris pertama: sebuah bilangan bulat n (1 ≤ n ≤ 10) yang menyatakan banyaknya konfigurasi akhir kartu pada papan, yang harus Anda tentukan hasil akhirnya. Baris 2+3(i‐1).. 2+3i‐1: konfigurasi kartu pada papan ke‐I (1 ≤ i ≤ n). Konfigurasi kartu pada setiap papan terdiri atas tepat tiga baris yang masing‐masing berisi 6 karakter. Masing‐ masing baris berisi deskripsi kartu dalam format pasangan angka‐huruf atau ‘##’ jika petak kosong dan TIDAK dipisahkan dengan spasi. FORMAT KELUARAN Karakter ‘A’, jika pemain pertama menang dan ‘B’ jika pemain kedua menang, atau ‘S’ jika permainan berakhir seri atau apabila pemenang permainan belum dapat ditentukan. Perhatikan huruf besar atau kecil (keluaran bersifat case‐sensitive). Asumsikan semua kasus yang diberikan pasti valid (keluarannya antara "A ", "B ", atau "S"). CONTOH MASUKAN CONTOH KELUARAN 2 7A4A6A ##3B2B ##1B## 3A##6A 4B2B2B ##1A## A B Halaman 3 dari 8 Sesi 2 OSN VII Angka 1 Nama Program: angka1.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Bosan dengan kartu‐kartu ayam‐bebeknya, Pak Dengklek kini mencoba bermain‐main dengan angka. Pak Dengklek mencoba menuliskan berbagai jenis barisan bilangan yang menurut dirinya menarik. Salah satunya adalah barisan berikut: 1, 3, 6, 10, 15, 21, ... Dapat diamati bahwa selisih antara suku ke‐i dan i‐1 dari barisan tersebut membentuk barisan bilangan: 2, 3, 4, 5, 6, ... Bantulah Pak Dengklek dengan membuat sebuah program yang menuliskan n (1 ≤ n ≤ 50000) suku pertama dari barisan tersebut FORMAT MASUKAN Bilangan bulat n yang menyatakan banyaknya suku dari barisan yang hendak dikeluarkan. FORMAT KELUARAN n buah bilangan bulat yang merupakan n suku pertama dari barisan yang telah dideskripsikan, masing‐masing dalam 1 baris. CONTOH MASUKAN 6 CONTOH KELUARAN 1 3 6 10 15 21 Halaman 4 dari 8 Sesi 2 OSN VII Angka 2 Nama Program: angka2.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Pak Dengklek merasa belum puas dengan barisan bilangan yang telah dibuatnya. Ia mengubah barisan tersebut menjadi bentuk matriks 2 dimensi sebagai berikut: 1 3 6 10 15 ... 3 6 12 22 37 ... 6 12 24 46 83 ... 10 22 46 ... ... ... 15 37 83 ... ... ... ... ... ... ... ... ... Baris 1 kolom 1 dari matriks selalu berisi angka 1. Matriks tersebut kemudian diisi dengan bilangan‐bilangan sedemikian sehingga: • • baris dan kolom pertama dari matriks membentuk barisan yang memiliki selisih antarsuku berbentuk barisan 2, 3, 4, 5, ... petak pada baris i kolom j selain baris dan kolom pertama akan diisi dengan hasil penjumlahan bilangan pada petak di kiri (i, j‐1) dan atas (i‐1, j) petak. Buatlah sebuah program yang akan membangkitkan matriks n x n (1 ≤ n ≤ 15) sesuai deskripsi yang telah diberikan. FORMAT MASUKAN Sebuah bilangan bulat n yang menyatakan ukuran baris/kolom matriks. FORMAT KELUARAN n baris keluaran yang masing‐masing berisikan n buah bilangan yang dipisahkan oleh sebuah spasi. CONTOH MASUKAN 3 CONTOH KELUARAN 1 3 6 3 6 12 6 12 24 Halaman 5 dari 8 Sesi 2 OSN VII Angka 3 Nama Program: angka3.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Pak Dengklek sedang belajar tentang basis bilangan. Karena merasa kesulitan dalam memahami basis bilangan tersebut, Pak Dengklek meminta Anda membantunya membuat sebuah program yang dapat mengubah sebuah bilangan non‐negatif basis 10 (lebih kecil atau sama dengan 32767) menjadi bilangan berbasis x (2 ≤ x ≤ 9). Bilangan berbasis x tersusun atas angka‐angka 0 sampai dengan x‐1. Perhatikan tabel berikut sebagai contoh: Basis‐10 0 1 2 3 4 5 6 7 8 9 10 11 … Basis‐2 0 1 10 11 100 101 110 111 1000 1001 1010 1011 … Basis‐3 0 1 2 10 11 12 20 21 22 100 101 102 … . . . Basis‐8 0 1 2 3 4 5 6 7 10 11 12 13 … Basis‐9 0 1 2 3 4 5 6 7 8 10 11 12 … FORMAT MASUKAN Baris 1: bilangan basis‐10 yang akan dikonversi. Baris 2: bilangan bulat x yang menyatakan basis tujuan konversi. FORMAT KELUARAN Bilangan hasil konversi dari basis‐10 ke basis‐x. CONTOH MASUKAN 31 2 CONTOH KELUARAN 11111 Penjelasan 1 * 2^4 + 1 * 2^3 + 1 * 2^2 + 1 * 2^1 + 1 * 2^0 = 16 + 8 + 4 + 2 + 1 = 31 Halaman 6 dari 8 Sesi 2 OSN VII Angka 4 Nama Program: angka4.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Ketika sedang membaca‐baca buku matematika, Pak Dengklek secara tiba‐tiba ingin mengetahui banyaknya bilangan komposit yang ada pada rentang a sampai dengan b (inklusif, 1 ≤ a ≤ b ≤ 1000). Bilangan komposit adalah bilangan bulat yang memiliki minimal sebuah bilangan bulat lain yang dapat habis membagi bilangan tersebut selain 1 dan bilangan itu sendiri. Bantulah Pak Dengklek dengan membuat program yang dapat mengeluarkan banyaknya bilangan komposit pada rentang a..b. FORMAT MASUKAN Nilai batas a dan b, dipisahkan oleh sebuah spasi. FORMAT KELUARAN Banyaknya bilangan komposit pada rentang a..b. CONTOH MASUKAN 4 10 CONTOH KELUARAN 5 Halaman 7 dari 8 Sesi 2 OSN VII Angka 5 Nama Program: Angka5.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Pak Dengklek sedang bermain‐main tentang angka dengan kedua bebeknya, Kwak dan Kwek. Dalam permainan ini, Kwak menyebutkan i buah bilangan kemudian Kwek melanjutkan dengan menyebutkan j buah bilangan lainnya (1 ≤ i, j ≤ 1000000). Bilangan‐bilangan tersebut merupakan bilangan bulat non‐negatif tidak unik yang kurang atau sama dengan 20000000. Kwak dan Kwek menyebutkan bilangan‐bilangan tersebut dalam kondisi sudah terurut menaik (bilangan yang lebih dahulu disebut selalu lebih kecil atau sama dengan bilangan yang disebut kemudian). Setelah Kwak dan Kwek selesai menyebutkan semua bilangan yang dimilikinya, Pak Dengklek harus menebak bilangan ke‐n dari keseluruhan bilangan tersebut apabila semua bilangan yang telah disebutkan diurutkan secara menaik. Bantulah Pak Dengklek memenangkan permainan ini dengan membuat sebuah program yang akan mengeluarkan bilangan ke‐n dari semua bilangan yang diberikan apabila bilangan‐bilangan tersebut diurutkan secara menaik. FORMAT MASUKAN Masukan terdiri atas 3 baris. Baris pertama terdiri atas dua bilangan bulat i dan j yang secara berturut‐turut menyatakan banyaknya bilangan yang disebutkan Kwak dan banyaknya bilangan yang disebutkan Kwek. Kedua buah bilangan tersebut dipisahkan oleh sebuah spasi. Baris kedua berisi sebuah bilangan bulat n, yang menyatakan posisi elemen yang harus ditebak oleh Pak Dengklek. Baris ketiga berisi i bilangan bulat yang merupakan bilangan‐bilangan yang disebutkan oleh Kwak. Baris keempat berisi j bilangan bulat yang merupakan bilangan‐bilangan yang disebutkan oleh Kwek. FORMAT KELUARAN Sebuah bilangan bulat yang merupakan bilangan ke‐n dari keseluruhan bilangan yang disebutkan oleh Kwak dan Kwek setelah diurutkan secara menaik. CONTOH MASUKAN 3 4 6 1 3 5 2 4 4 7 CONTOH KELUARAN 5 Halaman 8 dari 8 SOAL SESI 3 OLIMPIADE SAINS NASIONAL VII BIDANG INFORMATIKA 11 AGUSTUS 2008 MAKASSAR, SULAWESI SELATAN Selamat Bekerja, Berkompetisi, Jadilah Yang Terbaik! Sesi 3 OSN VII Bola dan Gelas Nama Program: bola.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Menuju acara 17‐an, Pak Dengklek mempersiapkan permainan untuk perlombaan di desanya. Permainan tersebut adalah permainan yang klasik dan kini Pak Dengklek ingin mengujinya kepada Anda. Terdapat N buah gelas yang diletakkan terbalik lalu dijejerkan di atas meja dan diberi nomor berbeda‐beda antara 1 sampai N. Di dalam salah satu gelas terbalik tersebut diletakkan sebuah bola. Lalu dua buah gelas dipilih secara acak dan ditukar posisi dan nomornya. Pemilihan dan pertukaran tersebut dilakukan sebanyak M kali. Setelah itu, semua gelas dibuka dan bola pastilah ditemukan di bawah salah satu gelas, misalnya gelas X. Pak Dengklek ingin agar Anda menebak di gelas nomor berapakah bola tersebut berada pada awalnya. Tidak hanya sekali, Pak Dengklek ingin Anda menebak berkali‐kali untuk beberapa kemungkinan X. FORMAT MASUKAN Baris pertama berisi bilangan bulat N dan M (1 ≤ N, M ≤ 100000). M baris berikutnya masing‐masing berisi dua angka X1 dan X2, yang berarti gelas bernomor X1 ditukar nomor dan posisinya dengan gelas bernomor X2 (1 ≤ X1, X2 ≤ N). Baris berikutnya berisi bilangan Q, yang merupakan jumlah pertanyaan untuk kasus bersangkutan (1 ≤ Q ≤ 100000). Q baris berikutnya masing‐masing berisi sebuah bilangan yang merupakan nomor gelas X (1 ≤ X ≤ N) tempat bola berada setelah permainan berakhir. FORMAT KELUARAN Q buah baris yang merupakan jawaban untuk tiap pertanyaan yang diberikan di masukan. Halaman 1 dari 7 Sesi 3 CONTOH MASUKAN 5 1 4 5 4 3 4 3 2 3 4 6 3 2 2 5 2 1 CONTOH KELUARAN 1 5 3 Halaman 2 dari 7 OSN VII Sesi 3 OSN VII Memasang Lantai Nama Program: lantai.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 32 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Pak Dengklek membuat kandang baru untuk bebek‐bebeknya. Kandang baru ini luasnya adalah 3 x N meter. Untuk menutupi seluruh permukaan lantai kandang baru tersebut, Pak Dengklek sudah membeli sejumlah papan dengan ukuran 1 x 3 meter. Sayangnya Pak Dengklek tidak memiliki gergaji, sehingga ia tidak dapat memotong papan‐papannya seenak hati. Kini ia memikirkan bagaimana cara ia dapat menutupi semua permukaan lantai dengan papan‐papan tersebut tanpa memotong satu papan pun dan tanpa ada dua atau lebih papan bertumpuk. Dasar Pak Dengklek, ia tidak puas hanya dengan mengetahui salah satu cara untuk menutup semua permukaan lantai, kini ia memikirkan berapa banyak kemungkinan peletakan papan‐papan agar semua permukaan lantai tertutupi. FORMAT MASUKAN Sebuah bilangan bulat N (1 ≤ N ≤ 1000) yang berarti luas kandang baru adalah 3 x N meter. FORMAT KELUARAN Sebuah bilangan bulat yang merupakan banyaknya kemungkinan peletakan papan‐papan untuk menutupi lantai. Jika bilangan ini lebih besar dari 999999 Anda cukup mencetak sisa bagi bilangan tersebut dengan 1000000 (bila bilangan tersebut adalah X dan X>999999, Anda cukup mencetak X MOD 1000000). CONTOH MASUKAN 1 4 CONTOH KELUARAN 1 3 Penjelasan Berikut ini adalah 3 kemungkinan yang dimaksud oleh contoh keluaran: Halaman 3 dari 7 Sesi 3 OSN VII Menutup Tiang Nama Program: tiang.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Menuju acara 17‐an, Pak Dengklek memasang beberapa tiang baru di depan rumahnya untuk nantinya dipasangi bendera atau umbul‐umbul. Setelah memasang tiang‐tiang tersebut, Pak Dengklek mengecat tiang‐ tiang tersebut agar tampak lebih bagus. Sialnya, baru saja Pak Dengklek mengecat semua tiang, langit tampak mendung. Ia harus segera menutupi tiang‐tiangnya agar catnya tidak luntur diguyur air hujan. Tiang yang dipasang oleh Pak Dengklek berada pada suatu garis lurus (sumbu X) seperti pada gambar berikut: Untuk menutup semua tiang tersebut, Pak Dengklek ingin membeli kain tak tembus air (semacam terpal). Supaya hemat, tentunya Pak Dengklek ingin membeli kain sependek mungkin, perhatikan gambar berikut (dalam soal ini kita hanya membicarakan panjang dengan mengabaikan lebarnya): Garis biru pada gambar adalah kain terpal yang ditarik dari titik S sampai titik F dan menutupi semua tiang. Semua tiang memiliki diameter yang sama tapi tinggi berbeda. Diberikan titik awal dimana kain akan dipasang (titik S), titik akhir (titik F), diameter semua tiang (D), beberapa titik X dan H yang merupakan lokasi titik tengah dan tinggi setiap tiang. Tugas Anda adalah membantu Pak Dengklek menentukan berapa panjang kain terpal minimal yang harus ia beli untuk menutupi semua tiangnya. FORMAT MASUKAN Baris pertama berisi empat buah bilangan bulat : • • • • S, titik awal kain terpal (0 ≤ S ≤ 250000) F, titik akhir terpal (S < F ≤ 250000) N, jumlah tiang (1 ≤ N ≤ 1000), tapi terdapat 1 testcase khusus dengan N = 100000 D, diameter tiang (2 ≤ D ≤ 10, D adalah bilangan genap) Halaman 4 dari 7 Sesi 3 OSN VII N baris berikutnya berisi masing‐masing dua buah bilangan bulat X (S + D/2 < X < F ‐ D/2) dan H (1 ≤ H ≤ 1000) yang merupakan titik tengah dan tinggi tiang secara berturut‐turut. Tidak ada dua tiang yang jarak kedua titik tengahnya lebih kecil dari D. FORMAT KELUARAN Sebuah bilangan yang merupakan panjang kain terpal minimal yang harus Pak Dengklek beli dengan pembulatan 3 angka desimal. CONTOH MASUKAN 0 100 5 2 20 7 10 6 50 6 70 4 56 3 CONTOH KELUARAN 102.258 Penjelasan Gambar di atas sekedar ilustrasi untuk contoh kasus, total panjang kain terpal yang harus dibeli adalah 102.258. Peringatan Hati‐hati, jangan melakukan pembulatan prematur, pembulatan cukup dilakukan di saat akhir akan mencetak keluaran. Pengguna PASCAL disarankan untuk menggunakan writeln(hasil:0:3), sedangkan pengguna C/CPP disarankan untuk menggunakan printf("%.3lf\n",hasil); Halaman 5 dari 7 Sesi 3 OSN VII Knight Force Nama Program: kuda.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 32 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Selain permainan "Bola dan Gelas", Pak Dengklek pun menyiapkan permainan lain yang bernama "Knight Force". Dan kembali Pak Dengklek ingin mengujinya kepada Anda. Pada permainan "Knight Force", daerah kekuasaan seekor kuda catur adalah kotak‐kotak pada papan catur (ukurannya dapat bervariasi seenak hati Pak Dengklek) yang dapat dicapainya (tanpa keluar dari papan) dengan jumlah langkah kurang atau sama dengan S. Sekedar pengingat lihatlah gambar di bawah ini. Jika gambar kuda menunjukkan posisi awal kuda, maka kotak berwarna merah adalah kotak‐kotak yang dapat ia kunjungi dengan tepat 1 langkah: Kali ini, Pak Dengklek bosan dengan hanya menggunakan 1 kuda, ia memilih K ekor kuda untuk menguasai papan catur bersama‐sama. Diberikan posisi setiap kuda (baris dan kolom pada papan catur), tentukanlah apakah suatu kotak berada dalam kuasa kuda‐kuda tersebut atau tidak (kotak asal kuda tentunya adalah daerah kekuasaan kuda tersebut). FORMAT MASUKAN Masukan akan berisi T (1 ≤ T ≤ 10) permainan. Pada baris pertama dari keseluruhan masukan akan terdapat sebuah bilangan bulat T. Untuk setiap permainan, baris pertama berisi enam buah bilangan bulat: • • • • • • N (1 ≤ N ≤ 500), banyak baris pada papan catur M (1 ≤ M ≤ 500), banyak kolom pada papan catur K (1 ≤ K ≤ 10), banyak kuda pada papan catur S (1 ≤ S ≤ 10), jumlah langkah maksimal kuda untuk mencapai suatu kotak (batas kuasanya) I (1 ≤ I ≤ N), posisi baris dari kotak yang ditanyakan J (1 ≤ J ≤ M), posisi kolom dari kotak yang ditanyakan Baris kedua sampai baris ke‐(K+1) masing‐masing berisi dua buah bilangan bulat (baris dan kolom) posisi awal setiap kuda. Tidak ada dua kuda yang memiliki posisi awal yang sama. FORMAT KELUARAN T baris yang masing‐masing berisi "TRUE" jika kotak tersebut adalah daerah kekuasaan kuda‐kuda pada permainan tersebut, atau "FALSE" jika sebaliknya. Halaman 6 dari 7 Sesi 3 OSN VII CONTOH MASUKAN 3 8 5 6 8 5 6 8 4 6 8 2 2 2 2 5 6 8 2 2 7 8 5 6 8 2 2 1 1 5 6 CONTOH KELUARAN TRUE TRUE FALSE Penjelasan Pada contoh kasus, terdapat 3 permainan. Untuk permainan pertama, berikut adalah peta kekuasaan 2 kuda yang ada (daerah kekuasaan mereka ditandai dengan kotak berwarna hijau dan karakter 'X' menandakan kotak yang ditanyakan): Halaman 7 dari 7 SOAL SESI 1 OLIMPIADE SAINS NASIONAL VIII BIDANG INFORMATIKA 5 AGUSTUS 2009 DKI JAKARTA Selamat Bekerja, Berkompetisi, Jadilah Yang Terbaik! Sesi 1 OSN VIII 1. Ada 27 buah bola tenis. 1 di antaranya lebih berat dibanding yang lainnya (ke‐26 bola lainnya memiliki berat yang sama). Andaikan Anda memiliki sebuah timbangan yang terdiri atas dua buah nampan dan dapat menentukan nampan manakah yang lebih berat/ringan dibanding yang lainnya (tetapi tidak dapat menentukan besarnya perbedaan berat) seperti yang ditunjukkan pada gambar berikut: Harus berapa kalikah paling sedikit Anda perlu melakukan penimbangan untuk menentukan bola manakah yang berbeda beratnya? Tuliskan jawabannya dalam bentuk angka. Untuk soal 2 sampai 6: Sebuah perusahaan ingin membagi karyawan‐karyawannya menjadi beberapa tim, dan ingin agar tim‐tim tersebut dapat bekerja seefektif mungkin. Agar dapat bekerja seefektif mungkin, setiap anggota dalam sebuah tim harus menyukai anggota lainnya di dalam tim tersebut. Dari antara 8 karyawan yang sudah ada, A, B, C, D, E, F, G, H, sang manager telah memperhatikan bahwa secara umum setiap karyawan saling menyukai satu sama lain, kecuali pasangan‐pasangan berikut ini: A dan H, F dan G, C dan E, B dan E, F dan D, B dan H, F dan B, C dan G, A dan F. Sebuah tim didefinisikan sebagai kumpulan dua atau lebih karyawan. 2. Sang manager harus membagi kedelapan karyawan tersebut minimal ke dalam berapa tim agar tidak ada dua orang anggota dalam sebuah tim yang tidak menyukai satu sama lain, dan setiap karyawan menjadi anggota tepat sebuah tim? Tuliskan jawabannya dalam bentuk angka. 3. Dari antara karyawan‐karyawan tersebut, misalkan sang manager ingin memecat satu orang karyawan, agar banyaknya tim yang dibuatnya berkurang. Sebutkan siapa sajakah yang jika menjadi seorang karyawan yang dipecat tersebut, tidak dapat mengurangi jumlah tim yang harus dibuat? Tuliskan jawabannya terurut secara alfabetis, dengan huruf kapital, dipisahkan oleh sebuah spasi. 4. Sang manager tidak jadi memecat satu orang, tetapi dia ingin memecat dua orang sekaligus agar tidak ada yang merasa dikucilkan. Namun, kedua orang itu haruslah tidak menyukai satu sama lain, untuk mengurangi resiko pemberontakan. Pasangan mana sajakah yang, meskipun sudah dipecat, tetap tidak bisa mengurangi banyaknya tim yang harus dibuat sang manager? Tuliskan jawabannya terurut secara alfabetis, dengan huruf kapital, dipisahkan oleh sebuah spasi. 5. Jika tiba‐tiba setiap pasang karyawan yang saling menyukai satu sama lain tiba‐tiba membenci satu sama lain, dan setiap pasang karyawan yang saling tidak menyukai satu sama lain tiba‐tiba menyukai satu sama lain, sang manager harus mengubah konfigurasi tim. Ada berapa tim paling sedikit yang harus dibentuk? Tuliskan jawabannya dalam bentuk angka. 6. Dalam tim‐tim baru yang dibentuk ini, siapa sajakah karyawan‐karyawan yang berada di tim yang sama dengan B? Tuliskan jawabannya terurut secara alfabetis, dengan huruf kapital, dipisahkan oleh sebuah spasi. Halaman 1 dari 11 Sesi 1 OSN VIII Untuk soal 7 sampai 10: Sebuah keluarga yang terdiri atas ayah, ibu, putra dan putri hendak menyeberangi sebuah jembatan gantung di waktu malam. Karena sempitnya jembatan tersebut, hanya 2 orang yang dapat melewatinya dalam suatu waktu secara bersamaan. Sang ayah dapat menyeberangi jembatan dalam 1 menit, ibu dalam 2 menit, putra dalam 4 menit, dan putri dalam 5 menit. Apabila ada lebih dari 1 orang yang menyeberang jembatan secara bersamaan, kecepatan kedua orang tersebut menyeberang sama dengan kecepatan orang yang lebih lambat. Sayangnya, keluarga tersebut hanya membawa 1 buah senter sementara malam begitu gelap sehingga tidak seorang pun dapat menyeberang tanpa membawa senter. 7. Berapa menitkah waktu minimal yang dibutuhkan agar seluruh anggota keluarga tersebut dapat pindah ke sisi lain jembatan? Tuliskan jawabannya dalam bentuk angka. 8. Berapa menitkah waktu tempuh orang/pasangan yang pertama kali menyeberang jika diinginkan agar waktu tempuh total seminimal mungkin? Tuliskan jawabannya dalam bentuk angka. 9. Siapakah orang pertama yang kembali dari sisi lain jembatan untuk mengantar senter? Tuliskan jawaban dalam huruf kecil seluruhnya. 10. Terjadi berapa kali penyeberangankah (tiap perpindahan orang/pasangan dari satu sisi ke sisi lain dihitung 1 kali penyeberangan) untuk mendapatkan total waktu tempuh yang minimal? Tuliskan jawabannya dalam bentuk angka. 11. Berapakah digit terakhir (angka satuan) dari ? Tuliskan jawabannya dalam bentuk angka. 12. Sebuah kandang ayam memiliki kapasitas untuk menampung maksimum 10 ekor ayam. Jika sebuah peternakan memiliki 21 kandang ayam dan 100 ekor ayam, ada minimal berapa kandang ayamkah yang harus berisi 4 ekor ayam atau lebih agar setiap ayam kebagian kandang? Tuliskan jawabannya dalam bentuk angka. 13. Sebuah lembaga sepak bola mengadakan survey kepada para pelajar di sebuah sekolah, untuk mengetahui seberapa populer olahraga sepak bola di antara remaja putra dan putri. Dari 100 pelajar yang disurvey, ternyata banyaknya remaja putra yang menyukai sepak bola sama banyak dengan banyaknya remaja putri yang tidak menyukai sepak bola, dan perbandingan antara banyaknya remaja putra yang menyukai sepak bola dan tidak menyukai sepak bola adalah 3 : 1. Jika 52% pelajar yang disurvey adalah putri, ada berapa pelajar putri yang menyukai sepak bola? Tuliskan jawabannya dalam bentuk angka. ? Tuliskan jawabannya dalam 14. Berapakah digit terakhir dari bentuk angka. 15. x mod (x div 1000 ‐ 1) = 1001 Untuk membuat persamaan di atas menjadi benar, berapakah nilai bilangan bulat positif x yang paling kecil? Tuliskan jawabannya dalam bentuk angka. Untuk soal 16 dan 17: Ditemukan bahwa sebuah tes yang digunakan untuk mengecek apakah seseorang terkena penyakit flu babi memiliki tingkat keakuratan 80% ‐‐ yang artinya jika seseorang yang berpenyakit flu babi mengambil tes ini, pada 80% kesempatan (misalnya, 8 dari 10 kali tes), hasil tesnya akan positif dan sebaliknya jika seseorang tidak berpenyakit flu babi, hasil tesnya akan negatif pada 80% kesempatan. Seseorang diambil secara acak dari sebuah grup yang 10% di antaranya adalah penderita penyakit flu babi. 16. Jika hasil tes orang yang diambil secara acak tersebut adalah positif, berapakah kemungkinan dia menderita flu babi? (tuliskan dalam bentuk pecahan paling sederhana, berupa dua buah bilangan bulat yang dipisahkan dengan sebuah tanda /, tanpa spasi) Halaman 2 dari 11 Sesi 1 OSN VIII 17. Jika hasil tes orang yang diambil secara acak tersebut adalah negatif, berapakah kemungkinan dia menderita flu babi? (tuliskan dalam bentuk pecahan paling sederhana, berupa dua buah bilangan bulat yang dipisahkan dengan sebuah tanda /, tanpa spasi) Untuk soal 18 sampai 21: Diberikan 4 buah ekspresi : 1. N^N 2. N! + 1 3. N^(N!) ‐ (N!)^N 4. 2^(N!) ‐ 3^N N adalah bilangan bulat positif. 18. Supaya #1 memiliki nilai terbesar dibanding semuanya, maka berapakah batasan N maksimum yang bisa diberikan? Tuliskan jawabannya dalam bentuk angka. 19. Supaya #2 memiliki nilai terbesar dibanding semuanya, maka berapakah batasan N maksimum yang bisa diberikan? Tuliskan jawabannya dalam bentuk angka. 20. Dengan N nilai yang sangat besar, maka ekspresi mana yang akan menghasilkan nilai paling kecil? Tuliskan jawabannya dalam bentuk angka. 21. Dengan N nilai yang sangat besar, maka ekspresi mana yang akan menghasilkan nilai paling besar? Tuliskan jawabannya dalam bentuk angka. 22. Berapakah angka yang sesuai untuk melanjutkan deret berikut: 1, 2, 6, 24, 120, ? 23. Kontingen olimpiade sains nasional dari suatu propinsi terdiri dari 8 siswa yang akan mengikuti lomba tingkat SMA, 3 siswa yang mengikuti lomba tingkat SMP, dan 2 siswa yang mengikuti lomba tingkat SD. Berapa kombinasi yang dapat dihasilkan, untuk mementukan satu wakil siswa SMA, satu wakil siswa SMP, dan satu wakil siswa SD yang akan mewakili kontingen propinsi tsb untuk acara Pembukaan? Tuliskan jawabannya dalam bentuk angka. 24. Jumlah kontingen tingkat SMA dari suatu propinsi terdiri dari bidang Matematika: 4 siswa, Fisika: 4 siswa, Kimia: 3 siswa, Biologi: 3 siswa, Komputer: 3 siswa, Astronomi: 2 siswa, Kebumian: 2 siswa, dan Ekonomi 4 siswa. Berapa kombinasi yang dapat dihasilkan untuk menentukan satu siswa yang akan mewakili siswa tingkat SMA dari propinsi tersebut dalam upacara Pembukaan? Tuliskan jawabannya dalam bentuk angka. 25. Jika terdapat 10 pertanyaan yang masing‐masing dapat dijawab benar atau salah (B atau S), berapakah kemungkinan kombinasi jawaban yang dapat dibuat? Tuliskan jawabannya dalam bentuk angka. 26. Berapakah banyaknya bilangan ganjil antara 1000 dan 9999 (termasuk 1000 dan 9999 itu sendiri) yang semua angkanya berbeda? Tuliskan jawabannya dalam bentuk angka. 27. Berapakah banyaknya bilangan ganjil antara 1000 dan 9999 (termasuk 1000 dan 9999 itu sendiri) jika boleh ada angka yaang berulang? Tuliskan jawabannya dalam bentuk angka. 28. Berapakah banyak string yang dapat dibentuk dari kombinasi huruf‐huruf pada kata ‘kerang’ sedemikian sehingga huruf‐huruf vokal terletak pada posisi saling bersebelahan? Tuliskan jawabannya dalam bentuk angka. 29. Ada berapa kombinasi untuk dapat memilih 3 dari 4 elemen himpunan S = {p, q, r, s}? Tuliskan jawabannya dalam bentuk angka. Halaman 3 dari 11 Sesi 1 OSN VIII 30. Berapakan jumlah kemungkinan membentuk 3 angka dari 5 angka berikut: 1, 2, 3, 4, 5, jika boleh ada pengulangan angka. Tuliskan jawabannya dalam bentuk angka. 31. Jika Anda melemparkan x buah dadu dan menjumlahkan angka‐angka yang keluar, peluang mendapatkan angka‐angka dadu berjumlah 31 sama dengan peluang mendapatkan angka‐angka dadu berjumlah 46. Berapakah nilai x? Tuliskan jawabannya dalam bentuk angka. 32. Proyek pembangunan jalan di Kabupaten “Panjang Jalan” telah selesai. Hasil yang dicapai proyek ini luar biasa: Setiap pasang desa yang ada di Kabupaten “Panjang Jalan” dihubungkan oleh tepat sebuah ruas jalan. Jika ada 36 ruas jalan di Kabupaten “Panjang Jalan”, ada berapa desa di Kabupaten tersebut? Tuliskan jawabannya dalam bentuk angka. 33. Definisi tahun kabisat yang resmi adalah sebagai berikut. Jika angka tahun habis dibagi 4 tetapi tidak habis dibagi 100, maka tahun itu adalah tahun kabisat. Jika angka tahun habis dibagi 100 tetapi tidak habis dibagi 400, maka tahun itu bukan tahun kabisat. Jika angka tahun habis dibagi 400, maka tahun itu adalah tahun kabisat. Ada berapa tahun yang bukan tahun kabisat mulai tahun 1000 sampai dengan tahun 2000 (1000 dan 2000 termasuk)? Tuliskan jawabannya dalam bentuk angka. 34. Jika kita mempunyai deretan bilangan : 1 2 3 4 5 6 7 ... 999999 1000000, ada berapakah bilangan yang merupakan angka kuadrat (misalnya: 1, 4, 9, 16)? Tuliskan jawabannya dalam bentuk angka. Untuk soal 35 dan 36: function F1(a, b : integer) : integer; begin if (a < b) then begin F1 := F2(a, b) + 1; end else if (a < 2 * b) then begin F1 := F1(b, a) + 1; end else F1 := 0; begin end; function F2(b, a : integer) : integer; begin F2 := F1(2 * a, b) + 1; while (a < b) do begin F2 := F1(a, b); a := 2 * a; end; end; Halaman 4 dari 11 Sesi 1 OSN VIII 35. Berapakah hasil dari F2(1, 1)? 36. Berapakah hasil dari F1(3, 2)? 37. Berapakah nilai yang dikembalikan fungsi ini? function R() : integer; var j : integer; i : array [0..3] of integer; begin for j := 0 to 3 do i[j] := (j + 1) mod 4; i[i[i[i[0]]]] := i[i[i[i[1]]]]; i[i[i[i[2]]]] := i[i[i[i[3]]]]; R := i[0] + i[1] + i[2] + i[3]; end; 38. Perhatikan potongan kode program dalam pseudopascal berikut ini: k := 0; n1 := ?; n2 := 8; n3 := 45; for p1 := 1 to n1 do k := k + 1; for p2 := 1 to n2 do k := k + 1; for p3 := 1 to n3 do k := k + 1; Dengan nilai berapakah n1 harus diinisialisasi sehingga setelah potongan kode program tersebut dieksekusi, k bernilai 70?. 39. Perhatikan potongan kode program dalam pseudopascal berikut ini: k := 0; n1 := 8; n2 := 4; n3 := ?; for p1 := 1 to n1 do begin k := k + 1 for p2 := 1 to n2 do begin k := k + 1 for p3 := 1 to n3 do k := k + 1; end; end; Dengan nilai berapakah n3 harus diinisialisasi sehingga setelah potongan kode program tersebut dieksekusi, k bernilai 160?. Halaman 5 dari 11 Sesi 1 OSN VIII 40. Faktor persekutuan terbesar dari dua buah bilangan bulat non‐negatif m dan n (fpb(m, n)) didefinisikan sebagai bilangan bulat terbesar yang habis membagi kedua bilangan m dan n (dengan sisa 0). Diberikan algoritma untuk menghitung fpb berikut: Langkah 1: isi variabel t dengan nilai minimum dari (m, n) Langkah 2: bagi m dengan t. Jika sisa pembagian adalah 0, lanjutkan ke langkah 3; jika tidak, lanjutkan ke langkah 4 Langkah 3: bagi n dengan t. Jika sisa pembagian adalah 0, berhenti ‐‐ t adalah hasil; jika tidak, lanjutkan ke langkah 4. Langkah 4: kurangi nilai t dengan 1. Ulangi langkah 2. Apabila nilai n diisi dengan sebuah bilangan bulat positif yang dipilih secara acak, adakah nilai m tertentu yang dapat mengakibatkan algoritma di atas menghasilkan nilai yang salah? Apabila ada, tuliskan bilangan tersebut (dalam bentuk angka, apabila ada lebih dari satu, tuliskan mulai dari yang terkecil, masing‐masing dipisahkan dengan sebuah spasi). Apabila tidak ada, tuliskan kata “TIDAK ADA” (seluruhnya kapital, tanpa tanda kutip) Untuk soal 41 sampai 44: Turnamen Tinju (IPSC08A) Untuk menyemarakkan acara ulang tahun kemerdekaan RI, SMP Merdeka dan SMA Mulia mengadakan pertandingan tinju persahabatan. Masing‐masing sekolah (SMP Merdeka dan SMA Mulia) diwakili oleh 1 tim yang terdiri atas beberapa siswa yang memiliki berat badan berbeda‐beda. (Berat badang masing‐ masing siswa dapat dinyatakan dengan sebuah bilangan bulat positif, makin besar bilangan berarti makin berat.) Pertandingan ini dilakukan dalam cara yang sedikit berbeda dari pertandingan tinju biasa. Pada pertandingan ini, semua peserta langsung memasuki arena tinju bersama‐sama dan dapat melawan petinju manapun dari pihak lawan. Untuk tiap rondenya, petinju yang paling banyak menerima pukulan pada ronde itu dikeluarkan dari arena. Jika ada lebih dari satu petinju dengan banyak pukulan maksimal, petinju yang dikeluarkan adalah: jika semuanya berasal dari sekolah yang sama, akan dipilih salah satu secara acak; jika berasal dari sekolah berbeda, yang dikeluarkan adalah salah satu petinju SMA Mulia (dipilih secara acak). Pertandingan selesai jika salah satu tim telah kehabisan petinju di arena. Tim yang masih memiliki petinju di arena menang, sedangkan tim lawannya kalah. Dari hasil pengamatan tahun‐tahun sebelumnya, ditemukan bahwa jumlah pukulan yang diterima seorang petinju pada tiap rondenya berbanding terbalik secara proporsional dengan berat badannya (dengan kata lain, petinju dengan berat badan terbesar akan menerima pukulan paling sedikit, dan sebaliknya.) Dengan melihat data berat badan anggota kedua tim, tentukan tim mana yang akan memenangi pertandingan. Spesifikasi masukan Masukan diawali dengan dua buah bilangan bulat NP – banyaknya anggota tim SMP Merdeka – dan NA – banyaknya anggota tim SMA Mulia. Dua baris berikutnya berisikan data berat badan masing‐masing petinju. Baris yang pertama terdiri atas NP buah bilangan bulat positif yang menyatakan berat badan petinju‐petinju dari SMP Merdeka. Sedangkan baris kedua berisi NA buah bilangan bulat positif yang menyatakan berat badan petinju‐petinju SMA Mulia. Halaman 6 dari 11 Sesi 1 OSN VIII Spesifikasi keluaran Jika SMP Merdeka yang menang, tuliskan string “MERDEKA” (seluruhnya berupa huruf kapital, tanpa tanda kutip). Jika SMA Mulia yang menang, tuliskan string “MULIA” (seluruhnya berupa huruf kapital, tanpa tanda kutip). Jika bukan keduanya, tuliskan string “ENTAH” (seluruhnya berupa huruf kapital, tanpa tanda kutip). Contoh Masukan 1 1 1 1 Contoh Keluaran MERDEKA Contoh Masukan 3 2 1 3 2 5 5 Contoh Keluaran MULIA 41. Apakah keluaran program apabila data yang diberikan adalah: 5 5 2 8 12 10 24 2 6 11 26 24 42. Apakah keluaran program apabila data yang diberikan adalah: 7 5 2 2 7 3 12 5 4 2 5 6 5 8 43. Apakah keluaran program apabila data yang diberikan adalah: 9 8 2 8 17 2 26 6 10 55 66 2 5 13 15 11 4 15 10 44. Apakah keluaran program apabila data yang diberikan adalah: 12 7 2 3 2 27 22 29 51 33 34 74 40 93 2 7 10 21 5 31 12 Halaman 7 dari 11 Sesi 1 OSN VIII Untuk soal 45 sampai 47: Diberikan n buah bilangan bulat: x1, x2, ..., xn, dimana n adalah bilangan genap. Andaikan kita hendak mengelompokkan n bilangan ini menjadi n/2 pasangan dan kemudian menjumlahkan kedua bilangan pada masing‐masing pasangan. Nilai dari sebuah pengelompokan adalah nilai maksimum dari penjumlahan‐ penjumlahan tiap pasangan tersebut. Sebagai contoh, jika bilangan yang menjadi masukan adalah 5, 7, 8, ‐2, 6, 4, 5, 2 dan dikelompokkan menjadi (5,‐2), (7,4), (5,6), (2,8), maka nilai hasil penjumlahan tiap‐tiap pasang adalah 3, 11, 11, dan 10. Dengan demikian, nilai pengelompokan ini adalah nilai maksimum dari {3, 11, 11, 10} yaitu 11. Untuk tiap himpunan bilangan yang disediakan, tentukan pengelompokan yang harus dilakukan sehingga nilai pengelompokan menjadi seminimal mungkin. 45. Berapakah nilai pengelompokan dari 103, 24, 77, 65, 12, 108, 69, 25, 66, 83? 46. Berapakah nilai pengelompokan dari 83, 112, ‐16, 72, 161, 75, 152, ‐23, 77, 247 47. Berapakah nilai pengelompokan dari 19, 81, 2, 41, 61, 59, 28, 69, 76, 88 Untuk soal 48 sampai 50: Ada sebuah permainan yang dimainkan 2 orang. Anggaplah orang yang mendapat giliran pertama bernama Budi, dan yang kedua bernama Siska. Diberikan 2 angka yang berlainan, A dan B, A < B. Kemudian, kedua pemain bergantian mengurangi angka yang lebih besar dengan kelipatan angka yang lebih kecil (tidak boleh 0 dan hasilnya tidak boleh lebih kecil dari 0). Orang yang berhasil mengurangi salah satu angka tersebut menjadi 0 adalah pemenangnya. Sebagai contoh dari angka 25 dan 7: 25 7 Budi mengurangi 25 dengan 7 * 1 = 7 18 7 Siska mengurangi 18 dengan 7 * 2 = 14 4 7 Budi mengurangi 7 dengan 4 * 1 = 4 4 3 Siska mengurangi 4 dengan 3 * 1 = 3 1 3 Budi mengurangi 3 dengan 1 * 3 = 3 1 0 Budi menang. Seorang pemain dikatakan bermain optimal apabila untuk tiap langkahnya, pengurangan yang dilakukan akan memberikan peluang maksimal baginya untuk menang (dan sebaliknya, peluang minimal untuk kalah). Catatan: setelah dilakukan pengurangan, ada kemungkinan A = B, pada kasus ini, pemain bebas memilih angka yang mana yang akan dikurangi dan yang akan digunakan sebagai pengurang. 48. Diberikan 2 angka : 13 dan 10. Jika kedua pemain bermain optimal, siapakah yang akan menang? 49. Diberikan 2 angka : 25 dan 11. Jika kedua pemain bermain optimal, siapakah yang akan menang? 50. Diberikan 2 angka : 46 dan 20. Jika kedua pemain bermain optimal, setelah permainan berlangsung, selain angka 0, angka berapakah yang akan tersisa? Halaman 8 dari 11 Sesi 1 OSN VIII Untuk soal 51 sampai 53: Seorang pencuri memasuki sebuah toko yang menjual berbagai bahan pangan. Dia memiliki sebuah karung yang dapat digunakan untuk membawa bahan pangan apa saja seberat maksimum W kilogram (kg). Untuk setiap bahan pangan, sang pencuri mengetahui banyaknya bahan pangan yang tersedia di toko dan harga total dari masing‐masing bahan pangan. Sang pencuri ingin menentukan berapa kilogram dari masing‐ masing bahan pangan yang harus ia curi sehingga harga total dari bahan pangan yang ia curi menjadi maksimal. (Satuan terkecil yang dapat diambil dari sebuah bahan pangan adalah 1 kg) Sebagai contoh, andaikan pencuri tersebut dapat membawa 20 kg bahan pangan (W = 20) dan ada tiga macam bahan pangan yang tersedia: garam, beras, dan gula. Di dalam toko terdapat 18 kg garam dengan harga total Rp 24000, 10 kg beras dengan harga total Rp 15000 dan 15 kg gula dengan harga total Rp 18000. Kita dapat menyatakan nilai‐nilai ini dalam tabel berikut: Garam Beras Gula W = 20 Banyaknya (kg) 18 10 15 Harga (Rp) 24000 15000 18000 Jika pencuri mengisi karungnya dengan 18 kg garam dan 2 kg gula, ia akan membawa pergi bahan pangan senilai Rp 24000 + (2/15 * 18000) = Rp 24000 + 2400 = Rp 26400. Diberikan beberapa situasi yang dihadapi pencuri, tentukan harga total maksimum bahan pangan yang dapat dicurinya. 51. Berapakah total bahan pangan yang dapat dicuri apabila kondisi yang dihadapi pencuri adalah seperti yang tercantum pada tabel berikut? Tuliskan jawabannya dalam bentuk bilangan bulat. Apabila hasil berupa pecahan, ambil bagian bulatnya saja (misalnya jika hasilnya adalah 2.84, tuliskan 2) A B C W = 20 Banyaknya (kg) 15 10 18 Harga (Rp) 1800 1500 2400 52. Berapakah total bahan pangan yang dapat dicuri apabila kondisi yang dihadapi pencuri adalah seperti yang tercantum pada tabel berikut? Tuliskan jawabannya dalam bentuk bilangan bulat. Apabila hasil berupa pecahan, ambil bagian bulatnya saja (misalnya jika hasilnya adalah 2.84, tuliskan 2) A B C D W = 30 Banyaknya (kg) 25 10 15 9 Harga (Rp) 3000 1400 1800 1200 Halaman 9 dari 11 Sesi 1 OSN VIII 53. Berapakah total bahan pangan yang dapat dicuri apabila kondisi yang dihadapi pencuri adalah seperti yang tercantum pada tabel berikut? Tuliskan jawabannya dalam bentuk bilangan bulat. Apabila hasil berupa pecahan, ambil bagian bulatnya saja (misalnya jika hasilnya adalah 2.84, tuliskan 2) A B C D W = 30 Banyaknya (kg) 25 10 15 20 Harga (Rp) 2250 1100 1500 1900 Untuk soal 54 sampai 56: Adi, Budi, dan Choki bersekolah di sekolah yang sama. Semua jalan di kota tempat tinggal mereka bersifat searah (hanya dapat dilalui dari suatu titik ke titik lainnya sesuai arah yang ditentukan) sehingga rute perjalanan mereka dari rumah ke sekolah harus memperhatikan hal ini. Diberikan peta kota berikut ini. Huruf A, B, dan C secara berturut‐turut menandakan lokasi rumah Adi, Budi, dan Choki, dan S menunjukkan lokasi sekolah mereka. Arah jalan ditandakan dengan tanda panah. 54. Berapakah banyak rute berbeda yang dapat dilalui Adi untuk menuju sekolahnya? Tuliskan jawabannya dalam bentuk angka. 55. Berapakah banyak rute berbeda yang dapat dilalui Budi untuk menuju sekolahnya? Tuliskan jawabannya dalam bentuk angka. 56. Berapakah banyak rute berbeda yang dapat dilalui Choki untuk menuju sekolahnya? Tuliskan jawabannya dalam bentuk angka. Halaman 10 dari 11 Sesi 1 OSN VIII Untuk soal 57 sampai 60: Di sebuah desa antah berantah, terdapat 5 buah rumah yang terhubung satu sama lain baik secara langsung maupun tidak langsung melalui jalan‐jalan setapak. Diberikan peta desa berikut ini: Angka yang tertulis di samping setiap ruas jalan adalah panjang jalan setapak tersebut (dalam kilometer). 57. Berapakah kilometerkah jarak minimum yang harus dilewati untuk mencapai rumah b dari a? 58. Berapakah kilometerkah jarak minimum yang harus dilewati untuk mencapai rumah d dari a? 59. Berapakah kilometerkah jarak minimum yang harus dilewati untuk mencapai rumah c dari a? 60. Berapakah kilometerkah jarak minimum yang harus dilewati untuk mencapai rumah e dari a? Halaman 11 dari 11 SOAL SESI 2 OLIMPIADE SAINS NASIONAL VIII BIDANG INFORMATIKA 5 AGUSTUS 2009 DKI JAKARTA Selamat Bekerja, Berkompetisi, Jadilah Yang Terbaik! Sesi 2 OSN VIII Soal 1: Kuadrat Sempurna Nama Program: kuadrat.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Di waktu‐waktu senggangnya, Pak Dengklek suka menguji kemampuan matematika bebek‐bebeknya. Kali ini Pak Dengklek hendak menguji apakah bebek‐bebeknya dapat membedakan bilangan kuadrat sempurna dan yang bukan. Dalam hal ini, sebuah bilangan bulat N disebut bilangan kuadrat sempurna jika ada sebuah bilangan bulat positif lainnya yang jika dikalikan dengan dirinya sendiri (dengan kata lain, dikuadratkan) hasilnya tepat sama dengan N. Sayangnya bebek‐bebek Pak Dengklek hanya mampu menjawab pertanyaan mengenai bilangan kuadrat sempurna ini jika bilangan yang ditanyakan relatif kecil. Oleh karena itu, bantulah bebek‐bebek Pak Dengklek dengan membuatkan sebuah program yang dapat menentukan apakah sebuah bilangan adalah bilangan kuadrat sempurna atau bukan. FORMAT MASUKAN Sebuah bilangan bulat N (1 ≤ N ≤ 2 000 000 000). FORMAT KELUARAN Sebuah bilangan bulat M (dimana M x M = N) jika N adalah bilangan kuadrat sempurna atau 0 jika N bukan bilangan kuadrat sempurna. CONTOH MASUKAN 1 65025 CONTOH KELUARAN 1 255 CONTOH MASUKAN 2 10 CONTOH KELUARAN 2 0 CONTOH MASUKAN 3 100 CONTOH KELUARAN 3 10 Halaman 1 dari 11 Sesi 2 OSN VIII Soal 2: Berhitung dan Keluar Nama Program: hitung.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Selain menguji kemampuan matematika bebek‐bebeknya, di waktu‐waktu senggangnya, Pak Dengklek pun senang mengajak bebek‐bebeknya bermain. Kali ini permainan yang dimainkan Pak Dengklek dan bebek‐ bebeknya disebut permainan “berhitung dan keluar”. Dalam permainan ini, mula‐mula terdapat N ekor bebek (bernomor 1 sampai N) yang berbaris berurut membentuk sebuah lingkaran besar. Karena bentuk barisan yang menyerupai lingkaran, bebek ke‐1 selain bersebelahan dengan bebek ke‐2, juga bersebelahan dengan bebek ke‐N. Kemudian secara berurutan, mereka berhitung mulai dari hitungan pertama hingga hitungan ke‐M. Bebek ke‐1 menyebutkan 1, bebek ke‐2 menyebutkan 2, dan seterusnya sampai M. JIka nilai M lebih besar dari N, maka setelah bebek ke‐N, hitungan dimulai kembali dari bebek ke‐1. Bebek yang tepat menyebutkan hitungan ke‐M, harus pergi meninggalkan lingkaran dan tidak mengikuti permainan lagi (tidak ikut menghitung lagi). Kemudian hitungan dilanjutkan dari bebek berikutnya (yang berada di sebelah bebek yang baru saja keluar permainan) mulai dari menyebutkan hitungan ke‐1 lagi. Hal ini dilakukan hingga X putaran atau hingga tersisa hanya 1 ekor bebek. Karena di awal permainan Pak Dengklek sudah menyebutkan nilai X (banyak putaran hitungan yang akan dilakukan), Anda yang cerdik tentu sudah dapat memprediksikan bebek nomor berapa saja yang akan bertahan di saat permainan berakhir. FORMAT MASUKAN Sebuah baris berisi 3 buah bilangan bulat N (2 ≤ N ≤ 1 000), M dan X (1 ≤ M, X ≤ 1 000), masing‐masing dipisahkan oleh sebuah spasi. FORMAT KELUARAN Nomor bebek‐bebek yang akan bertahan di saat permainan berakhir, terurut dari nomor bebek terkecil sampai nomor bebek terbesar. CONTOH MASUKAN 5 4 2 CONTOH KELUARAN 1 2 5 PENJELASAN CONTOH Pada putaran pertama, bebek bernomor 4 keluar. Sedangkan pada putaran kedua, bebek bernomor 3 yang keluar. Permainan berakhir saat dua putaran hitungan selesai dilakukan. Halaman 2 dari 11 Sesi 2 OSN VIII Soal 3: Pola Segitiga Nama Program: segitiga.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Terkadang sebelum memulai permainan, Pak Dengklek meminta bebek‐bebeknya untuk berbaris dengan suatu pola tertentu. Salah satunya adalah pola segitiga seperti yang diberikan pada contoh di bawah ini. Pak Dengklek merasa kesulitan membayangkan pola segitiga tersebut jika ukurannya sudah cukup besar. Diberikan sebuah bilangan bulat ganjil N, tugas Anda adalah untuk mencetak pola segitiga berukuran N sesuai contoh di bawah ini. FORMAT MASUKAN Sebuah bilangan ganjil N (4 < N < 200). FORMAT KELUARAN Pola segitiga berukuran N sesuai contoh di bawah ini. Anda tidak perlu mencetak apa‐apa (termasuk spasi) setelah mencetak bintang terakhir pada setiap baris. CONTOH MASUKAN 1 5 CONTOH KELUARAN 1 * * * ***** * * * * ********* CONTOH MASUKAN 2 7 CONTOH KELUARAN 2 * * * * * ******* * * * * * * * * ************* Halaman 3 dari 11 Sesi 2 OSN VIII Soal 4: Zig Zag Nama Program: zigzag.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Pak Dengklek mendapatkan sebuah barisan bilangan, ia ingin tahu apakah barisan bilangan yang ia miliki membentuk pola zig zag atau tidak. Zig zag di sini berarti bilangan pada posisi ke‐(i‐1) dan ke‐(i+1), keduanya harus sama‐sama lebih besar dari bilangan di posisi ke‐i atau sama‐sama lebih kecil dari bilangan di posisi ke‐i. Pengecualian diberikan kepada bilangan pertama dan terakhir karena hanya terdapat satu bilangan yang tepat bersebelahan dengannya. Gambar di bawah ini memberikan contoh urutan zig zag yang dimaksud. FORMAT MASUKAN Baris pertama berisi sebuah bilangan bulat N (1 ≤ N ≤ 100 000) yang menyatakan banyaknya bilangan dalam barisan. N baris berikutnya berisi bilangan‐bilangan tersebut. Semua bilangan yang diberikan adalah bilangan positif yang lebih kecil dari 1 000 000. Tidak ada dua buah bilangan yang sama yang muncul dalam satu barisan. FORMAT KELUARAN Jika barisan yang diberikan memenuhi syarat zig zag di atas, keluarkan kata “ZIGZAG” (huruf besar, tanpa spasi, tanpa tanda kutip). Jika barisan yang diberikan tidak memenuhi syarat zig zag di atas, cetak tiga buah bilangan bulat dalam satu baris (masing‐masing dipisahkan oleh sebuah spasi) yang merupakan bilangan‐ bilangan yang membuat barisan tersebut tidak sesuai dengan syarat zig zag di atas. Ketiga bilangan tersebut dicetak sesuai dengan urutan kemunculannya pada masukan. Jika terdapat beberapa kesalahan pada barisan bilangan yang membuatnya tidak memenuhi syarat zig zag di atas, keluarkan yang paling pertama terjadi saja (yang terjadi pada kumpulan bilangan yang muncul lebih dahulu pada masukan). CONTOH MASUKAN 1 8 3 2 4 1 10 6 8 5 Halaman 4 dari 11 Sesi 2 CONTOH KELUARAN 1 ZIGZAG CONTOH MASUKAN 2 8 3 2 4 7 10 6 8 9 CONTOH KELUARAN 2 2 4 7 PENJELASAN CONTOH 1 Contoh pertama sesuai dengan gambar yang diberikan di deskripsi soal. Halaman 5 dari 11 OSN VIII Sesi 2 OSN VIII Soal 5: Stack dan Queue Nama Program: sq.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Dalam dunia informatika, penggunaan struktur data queue (antrian) dan stack (tumpukan) sangatlah umum. Kedua struktur data tersebut memiliki kesamaan yakni bahwa keduanya dapat diimplementasikan menggunakan array. Sedangkan perbedaannya terletak pada cara keluar masuk elemen. Struktur data queue memiliki sifat FIFO (first in first out), artinya elemen yang pertama kali masuk juga akan keluar pertama kali. Sedangkan struktur data stack memiliki sifat LIFO (last in first out), artinya elemen yang terakhir kali masuk akan keluar pertama kali juga. Pada soal ini, Anda akan mensimulasikan sebuah struktur data yang merupakan gabung antara queue dan stack. Pada struktur data ini, suatu elemen dapat masuk ke bagian awal menggunakan perintah push_front maupun bagian akhir menggunakan perintah push_back. Begitu juga proses pengambilan elemen, dapat mengambil dari bagian awal menggunakan perintah pop_front maupun dari bagian akhir menggunakan perintah pop_back. Diberikan struktur data tersebut dalam keadaan kosong, lakukan beberapa operasi memasukkan dan mengeluarkan elemen, tentukan kondisi akhir dari struktur data tersebut. FORMAT MASUKAN Baris pertama berisi sebuah bilangan N (1 ≤ N ≤ 10 000). N baris berikutnya masing‐masing berisi sebuah perintah. Sesuai deskripsi di atas, terdapat 4 kemungkinan perintah yakni: • • • • push_front, memasukkan elemen ke bagian awal struktur data push_back, memasukkan elemen ke bagian akhir struktur data pop_front, mengeluarkan sebuah elemen dari bagian awal struktur data pop_back, mengeluarkan sebuah elemen dari bagian akhir struktur data Perintah push_front dan push_back tentunya akan diikuti sebuah elemen berupa bilangan bulat antara 1 sampai 1 000 000. Dan perintah pop_front maupun pop_back tidak akan dilakukan saat struktur data tersebut tidak memiliki elemen. FORMAT KELUARAN Elemen‐elemen berurutan dari bagian awal sampai bagian akhir yang berada di kondisi akhir struktur data tersebut. CONTOH MASUKAN 7 push_back 1 push_back 2 push_front 3 push_back 4 push_front 5 pop_back pop_front Halaman 6 dari 11 Sesi 2 CONTOH KELUARAN 3 1 2 Halaman 7 dari 11 OSN VIII Sesi 2 OSN VIII Soal 6: Operasi Matriks Nama Program: matriks.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Kali ini Pak Dengklek bermain lagi dengan bebek‐bebeknya menggunakan matriks. Pak Dengklek memberikan bebek‐bebeknya sebuah matriks berukuran N kali M lalu sejumlah operasi rotasi dan refleksi. Tugas bebek‐bebek adalah melakukan operasi rotasi dan refleksi tersebut terhadap matriks yang diberikan. Merasa bosan dengan permainan ini, para bebek meminta bantuan Anda untuk membuatkan sebuah program yang dapat mencetak kembali matriks yang diberikan Pak Dengklek setelah melalui serangkaian operasi rotasi dan refleksi tersebut. FORMAT MASUKAN Baris pertama berisi 3 buah bilangan bulat, N dan M (1 ≤ N, M ≤ 100) yang menyatakan banyaknya baris dan kolom pada matriks, serta X (1 ≤ X ≤ 100) yang menyatakan banyaknya operasi yang dilakukan. N baris berikutnya berisi masing‐masing M elemen matriks. Setiap elemen adalah bilangan bulat dari 1 sampai 100, inklusif. X baris berikutnya, masing‐masing berisi sebuah operasi matriks, antara lain: • • • • • “_”, merefleksikan matriks berdasarkan garis horizontal “|”, merefleksikan matriks berdasarkan garis vertikal “90”, merotasikan matriks 90 derajat searah jarum jam “180”, merotasikan matriks 180 derajat searah jarum jam “270”, merotasikan matriks 270 derajat searah jarum jam FORMAT KELUARAN Matriks yang diberikan pada masukan setelah melalui rangkaian operasi refleksi dan rotasi. CONTOH MASUKAN 1 3 3 1 2 4 5 7 8 _ 270 2 3 6 9 CONTOH KELUARAN 1 9 6 3 8 5 2 7 4 1 Halaman 8 dari 11 Sesi 2 CONTOH MASUKAN 2 3 3 1 2 4 5 7 8 | 90 2 3 6 9 CONTOH KELUARAN 2 9 6 3 8 5 2 7 4 1 Halaman 9 dari 11 OSN VIII Sesi 2 OSN VIII Soal 7: Pola String Nama Program: string.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Pekerjaan rumah untuk bebek‐bebek Pak Dengklek! Diberikan barisan karakter yang terdiri dari alfabet dan angka (‘a’..’z’, ‘A’..’Z’, ‘0’..’9’) dengan panjang maksimal 255 karakter. Tugas bebek‐bebek adalah untuk menulis ulang barisan karakter tersebut dalam matriks berbentuk persegi berukuran N x N. Ukuran sisi persegi (N) di sini haruslah merupakan ukuran terkecil yang mungkin. Jika terdapat kotak‐kotak sisa, isilah kotak‐kotak tersebut dengan karakter titik (‘.’). Bebek‐bebek Pak Dengklek yang lebih memilih untuk bermain daripada mengerjakan pekerjaan rumah, meminta bantuan Anda untuk membuat program yang dapat membuatkan pekerjaan rumah mereka tersebut. FORMAT MASUKAN Sebuah baris berisi barisan karakter dengan panjang maksimal 255 karakter. FORMAT KELUARAN N baris, masing‐masing berisi N karakter, sesuai dengan deskripsi di atas. CONTOH MASUKAN 1 GoGetGold CONTOH KELUARAN 1 GoG Gte old CONTOH MASUKAN 2 SeleksiTOKI2010 CONTOH KELUARAN 2 Sele Tisk OKI2 .010 Halaman 10 dari 11 Sesi 2 OSN VIII Soal 8: Penukaran Emas Nama Program: emas.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Tetangga Pak Dengklek, baru saja membuka usaha toko emas. Toko emas tersebut melayani jual, beli, dan tukar emas. Uniknya, proses penukaran emas pada toko tersebut adalah sebagai berikut. Satu keping emas dengan berat N gram akan dan harus ditukar dengan tiga keping emas dengan berat masing‐masing N/2, N/3, dan N/4. Jika nilai N/2, N/3, N/4 tersebut tidak bulat, maka nilainya akan dibulatkan ke bawah. Pak Dengklek yang cerdik tampaknya menemui celah sistem penukaran tersebut, ia tahu bahwa untuk beberapa nilai N, dengan satu atau lebih proses penukaran, ia mungkin memperoleh total berat emas yang lebih besar daripada semula. Tugas Anda kini adalah untuk membantu Pak Dengklek memperkirakan total berat emas maksimal yang dapat ia peroleh jika ia memiliki modal sekeping emas dengan berat N gram. FORMAT MASUKAN Sebuah bilangan bulat N (10 ≤ N ≤ 1 000) yang merupakan berat satu‐satunya keping emas yang Pak Dengklek miliki sebagai modal. FORMAT KELUARAN Total berat emas maksimal yang mungkin Pak Dengklek peroleh. CONTOH MASUKAN 1 12 CONTOH KELUARAN 1 13 CONTOH MASUKAN 2 11 CONTOH KELUARAN 2 11 Halaman 11 dari 11 SOAL SESI 3 OLIMPIADE SAINS NASIONAL VIII BIDANG INFORMATIKA 6 AGUSTUS 2009 DKI JAKARTA Selamat Bekerja, Berkompetisi, Jadilah Yang Terbaik! Sesi 3 OSN VIII Lagu Nama Program: lagu.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Untuk mengisi acara penutupan OSN 2009, Pak Dengklek sudah menciptakan dan mencatat sebuah lagu spesial. Masalahnya, beberapa hari menjelang acara tersebut, catatan berisi urutan not‐not lagu Pak Dengklek hilang. Ia hanya ingat bahwa semua not pada lagunya adalah unik. Tidak ada satu pun not yang sama digunakan lebih dari satu kali dalam lagunya. Tentunya dibutuhkan waktu yang tidak sebentar untuk mengingat‐ingat dan mengurutkan kembali not‐not lagunya seperti rencana semula. Mengingat waktu yang sempit, Pak Dengklek akhirnya mengambil jalan pintas untuk mengurutkan not‐not tersebut. Ia hanya ingin not‐not lagunya membentuk urutan zig zag. Zig zag di sini berarti untuk setiap not X, not yang dimainkan tepat sebelum dan tepat sesudah not X harus sama‐sama lebih besar dari not X atau sama‐sama lebih kecil dari not X. Dengan kata lain, not di posisi ke‐(i‐1) dan ke‐(i+1), keduanya harus sama‐sama lebih besar dari not di posisi ke‐i atau sama‐sama lebih kecil dari not di posisi ke‐i. Pengecualian diberikan kepada not pertama dan terakhir karena hanya terdapat satu not yang tepat bersebelahan dengannya. Gambar di bawah ini memberikan contoh urutan zig zag yang dimaksud. Cara yang relatif mudah ini ternyata cukup sulit juga jika diaplikasikan untuk not dalam jumlah yang besar. Oleh karena itu Pak Dengklek meminta bantuan Anda. Pak Dengklek juga sadar bahwa dengan cara ini mungkin terdapat lebih dari satu urutan yang valid, tapi dalam kepanikannya Pak Dengklek tidak begitu peduli lagi, ia sudah cukup senang jika Anda dapat memberikan salah satu dari banyak kemungkinan tersebut. FORMAT MASUKAN Baris pertama berisi sebuah bilangan bulat N (1 ≤ N ≤ 100 000) yang menyatakan banyaknya not yang harus diurutkan secara zig‐zag. N baris berikutnya berisi bilangan‐bilangan yang mewakili not‐not tersebut. Semua bilangan yang diberikan adalah bilangan positif yang lebih kecil dari 1 000 000. FORMAT KELUARAN N baris, masing‐masing berisi sebuah bilangan yang mewakili not‐not yang sudah diurutkan secara zig‐zag. Seperti dijelaskan pada deskripsi soal, jika terdapat lebih dari satu kemungkinan, cukup cetak salah satu saja. CONTOH MASUKAN 8 6 1 2 Halaman 1 dari 10 Sesi 3 OSN VIII 3 4 10 8 5 CONTOH KELUARAN 3 2 4 1 10 6 8 5 PENJELASAN CONTOH Contoh keluaran di atas adalah salah satu dari banyak kemungkinan jawaban. Contoh keluaran tersebut sesuai dengan gambar yang diberikan pada deskripsi soal. Halaman 2 dari 10 Sesi 3 OSN VIII Paduan Suara Nama Program: padsu.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Setelah selesai menciptakan lagu spesial untuk acara penutupan OSN 2009, tentunya Pak Dengklek membutuhkan penyanyi untuk menyanyikannya. Untuk itu Pak Dengklek ingin melibatkan paduan suara bebek‐bebeknya. Ia menemukan bahwa bebek‐bebeknya mempunyai tinggi suara yang beraneka ragam. Ia akan membagi bebek‐bebeknya ke dalam grup‐grup berdasarkan tinggi suara mereka. Untuk memudahkan pembagian, Pak Dengklek akan memilih beberapa bilangan bulat untuk dijadikan batas pembagian. Misal Pak Dengklek memilih bilangan A untuk dijadikan batas pembagian pertama. Maka semua bebek‐bebek yang mempunyai tinggi suara kurang dari A akan masuk ke grup pertama. Lalu Pak Dengklek memilih bilangan B untuk dijadikan batas kedua. Maka semua bebek‐bebek yang tersisa yang mempunyai tinggi suara kurang dari B dimasukkan ke grup kedua. Pak Dengklek mengulang proses ini terus menerus sehingga terbentuk grup‐grup yang diinginkan. Sisa bebek‐bebek yang mempunyai tinggi suara lebih dari atau sama dengan batas pembagian terakhir otomatis akan digrupkan sendiri ke grup baru. Dengan proses ini, maka Pak Dengklek akan dapat membentuk N buah grup dengan memilih (N‐1) bilangan bulat. Masalahnya, Pak Dengklek ingin agar semua bebeknya ikut serta ke dalam salah satu dan hanya satu grup paduan suara. Lalu supaya adil, tidak boleh ada dua grup paduan suara yang selisih banyak anggotanya lebih dari satu. Pak Dengklek meminta bantuan Anda untuk memilihkan (N‐1) bilangan tersebut agar grup‐grup paduan suara yang terbentuk memenuhi syarat‐syarat di atas. FORMAT MASUKAN Baris pertama berisi bilangan bulat M (1 ≤ M ≤ 10 000), yaitu jumlah bebek. M baris berikutnya masing‐ masing berisi sebuah bilangan bulat positif yang merupakan tinggi suara bebek‐bebek. Semua bebek memiliki tinggi suara dalam jangkauan auidosonik (dari 20 sampai 20 000 Hz). Baris berikutnya berisi sebuah bilangan bulat N (2 ≤ N ≤ 20; N ≤ M), yang merupakan jumlah grup yang ingin dibentuk Pak Dengklek. FORMAT KELUARAN Sebuah baris berisi (N‐1) bilangan bulat yang dipilih untuk membentuk grup paduan suara yang memenuhi syarat‐syarat yang ada. Bilangan bulat tersebut diberikan berurutan dari kecil ke besar. Walaupun jawaban mungkin tidak unik (ada beberapa kemungkinan jawaban benar), dijamin selalu ada jawaban benar untuk tiap pertanyaan yang diajukan. CONTOH MASUKAN 1 8 26 24 22 21 26 500 Halaman 3 dari 10 Sesi 3 OSN VIII 211 28 3 CONTOH KELUARAN 1 25 210 PENJELASAN CONTOH 1 Pak Dengklek memilih bilangan 25 untuk dijadikan batas pembagian pertama. Maka bebek‐bebek dengan tinggi 21 22 24 akan masuk ke grup pertama. Lalu Pak Dengklek memilih bilangan 210 untuk dijadikan batas kedua. Maka bebek‐bebek dengan tinggi 26 26 28 akan masuk ke grup kedua. Bebek‐bebek lainnya otomatis akan digrupkan ke grup ketiga. Banyak anggota grup pertama dan kedua masing‐masing adalah 3, sedangkan banyak anggota grup ketiga adalah 2. Tidak ada dua grup yang selisih banyak anggotanya lebih dari satu. Contoh keluaran di atas adalah salah satu dari (mungkin) beberapa kemungkinan jawaban. CONTOH MASUKAN 2 8 26 24 22 21 26 500 211 28 5 CONTOH KELUARAN 2 24 26 27 499 Halaman 4 dari 10 Sesi 3 OSN VIII Tarian Nama Program: tari.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Sebagai suatu penampilan panggung yang utuh, tentu paduan suara saja tidak cukup menarik, oleh karena itu Pak Dengklek mengajari bebek‐bebeknya gerakan tarian untuk dilakukan sambil bernyanyi. Agar mudah, Pak Dengklek sudah menyusun instruksi‐instruksi sederhana untuk diikuti bebeknya, seperti "maju 5 langkah", "mundur 3 langkah", "ke samping kanan 2 langkah", dan sejenisnya. Karena keasyikan menyusun instruksi, Pak Dengklek lupa untuk memikirkan besar area yang dibutuhkan untuk tarian yang disusunnya. Untuk kenyamanan penonton, Pak Dengklek ingin tarian tersebut ditampilkan di area berbentuk persegi atau persegi panjang yang sisi‐sisinya sejajar dengan sumbu kartesian X atau Y. Diberikan instruksi‐instruksi tarian Pak Dengklek, tugas Anda adalah untuk mencari panjang dan lebar minimal dari persegi atau persegi panjang yang diperlukan agar semua instruksi tarian dapat dilakukan di dalam area persegi atau persegi panjang tersebut. Untuk menyederhanakan persoalan, bebek‐bebek dapat dianggap sebagai sebuah titik, oleh karena itu mereka dapat berdiri tepat di ujung area tarian. FORMAT MASUKAN Baris pertama berisi bilangan N (2 ≤ N ≤ 10 000), merupakan jumlah instruksi dari tarian yang disusun Pak Dengklek. N baris berikutnya masing‐masing berisi instruksi dalam bentuk "<arah><spasi><jumlah langkah>". <arah> akan berupa "maju" untuk maju ke depan, "mundur" untuk mundur ke belakang, "kanan" untuk bergerak ke samping kanan, atau "kiri" untuk bergerak ke samping kiri. <jumlah langkah> akan berupa bilangan bulat positif yang tidak lebih dari 1 000. Perhatikan bahwa selama menari bebek‐bebek akan selalu menghadap ke arah yang sama karena tidak ada instruksi untuk menghadap kanan/kiri atau berbalik badan. FORMAT KELUARAN Sebuah baris berisi dua bilangan bulat P dan L yang merupakan panjang dan lebar minimal dari persegi atau persegi panjang yang dibutuhkan untuk menari. Jika P dan L adalah bilangan yang berbeda, maka nilai P haruslah yang lebih besar (contoh: jika dibutuhkan area 5x7 maka P=7 dan L=5). Satuan dari P dan L adalah langkah bebek. Instruksi tarian Pak Dengklek dijamin menghasilkan nilai P dan L yang positif. CONTOH MASUKAN 1 5 maju 2 kanan 1 mundur 1 kiri 2 mundur 2 CONTOH KELUARAN 1 Halaman 5 dari 10 Sesi 3 3 2 PENJELASAN CONTOH 1 Gambar di bawah ini menjelaskan instruksi tarian yang diberikan pada contoh 1. CONTOH MASUKAN 2 6 maju 2 kanan 1 mundur 1 kiri 1 maju 2 kiri 2 CONTOH KELUARAN 2 3 3 Halaman 6 dari 10 OSN VIII Sesi 3 OSN VIII Sepatu Nama Program: sepatu.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 16 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Tepat sehari sebelum acara penutupan OSN 2009, Pak Dengklek menyadari bahwa sepatu bebek‐bebeknya sudah mulai jelek. Oleh karena itu Pak Dengklek hendak memberikan bebek‐bebeknya sepatu baru. Untung saja Pak Dengklek masih menyimpan stok sepatu‐sepatu baru di gudangnya. Sayangnya tidak semua sepatu‐sepatu tersebut memiliki ukuran yang sesuai dengan yang dibutuhkan sekarang. Sepatu yang dipakai seekor bebek tidak boleh terlalu kecil atau terlalu besar. Seekor bebek dengan ukuran kaki X hanya bisa memakai sepatu dengan ukuran X atau X+1. Lebih baik menggunakan sepatu lama daripada menggunakan sepatu baru yang terlalu kecil atau terlalu besar. Anda diberikan ukuran kaki bebek‐bebek dan juga ukuran sepatu‐sepatu baru yang ada di gudang Pak Dengklek. Bantulah Pak Dengklek untuk menemukan berapa maksimal banyak bebek yang dapat menggunakan sepatu baru pada acara penutupan OSN 2009. FORMAT MASUKAN Baris pertama berisi dua bilangan bulat N dan M (1 ≤ N, M ≤ 1 000), dimana N adalah banyak bebek dan M adalah banyak sepatu yang dimiliki Pak Dengklek. N baris berikutnya masing‐masing berisi ukuran kaki bebek‐bebeknya. M baris berikutnya masing‐masing berisi ukuran sepatu‐sepatu. Ukuran kaki bebek dan ukuran sepatu akan selalu berupa bilangan bulat positif yang tidak lebih dari 10 000. FORMAT KELUARAN Sebuah bilangan bulat yang menyatakan banyak bebek yang dapat menggunakan sepatu baru pada acara penutupan OSN 2009. CONTOH MASUKAN 5 5 11 10 12 10 13 11 9 10 11 13 CONTOH KELUARAN 4 Halaman 7 dari 10 Sesi 3 OSN VIII PENJELASAN CONTOH Semua bebek dapat menggunakan sepatu baru kecuali salah satu di antara bebek dengan ukuran sepatu 12 dan 13 karena hanya ada satu sepatu baru berukuran 13 dan tidak ada sepatu baru berukuran 12. Halaman 8 dari 10 Sesi 3 OSN VIII Petunjuk Kasar Nama Program: petunjuk.PAS / C / CPP Batas Run‐time: 1 detik / test‐case Batas Memori: 32 MB Nama Berkas Masukan: Standard input (keyboard) Nama Berkas Keluaran: Standard output (layar) Hari acara penutupan OSN 2009 akhirnya tiba juga. Pak Dengklek dan bebek‐bebeknya sudah bangun pagi‐ pagi dan hendak berangkat ke tempat acara. Baru saja keluar dari rumahnya, Pak Dengklek menyadari bahwa ia hanya ingat petunjuk jalan kasar dari rumahnya menuju ke tempat acara penutupan. Petunjuk tersebut adalah petunjuk kasar seperti “lurus, belok kiri, belok kanan, belok kiri, belok kanan, lurus, sampai deh…”. Karena banyaknya persimpangan di tengah kota, Pak Dengklek menyadari bahwa petunjuk ini tidaklah akurat, petunjuk ini dapat mengantarkannya ke beberapa tempat. Bantulah Pak Dengklek untuk mencapai tempat acara penutupan setidaknya dengan membantu menemukan tempat‐tempat yang mungkin dicapai dari rumah Pak Dengklek dengan petunjuk yang ada. Untuk menyederhanakan persoalan, peta kota diberikan dalam bentuk matriks berukuran R kali C, dimana R adalah banyak baris dan C adalah banyak kolom. Sebagai catatan, Pak Dengklek memulai perjalanan dari rumahnya dengan arah mula‐mula menghadap ke utara. FORMAT MASUKAN Baris pertama berisi dua buah bilangan bulat R dan C (1 ≤ R, C ≤ 200) yakni banyaknya baris dan kolom pada peta. Setiap kotak pada peta diwakilkan oleh sebuah karakter. Terdapat tiga kemungkinan karakter sebagai berikut: • • • Karakter “H” mewakili rumah Pak Dengklek (dijamin hanya ada 1 karakter “H” pada peta). Jika diperlukan, rumah Pak Dengklek ini dapat dianggap sebagai lokasi yang dapat dilalui (karakter “.”). Karakter “#” mewakili lokasi‐lokasi yang tidak dapat dilalui. Karakter “.” mewakili jalan atau lokasi‐lokasi yang dapat dilalui. Baris ke‐(R+2) berisi sebuah bilangan bulat N (1 ≤ N ≤ 20) yang merupakan banyaknya instruksi pada petunjuk kasar yang Pak Dengklek ingat. Terdapat tiga kemungkinan instruksi sebagai berikut: • • • “LURUS” menyatakan pergerakan maju dalam arah pandang sementara, setidaknya sebanyak 1 kotak “KIRI” menyatakan perpindahan arah pandang 90 derajat melawan arah jarum jam, instruksi ini tidak mengakibatkan Pak Dengklek berpindah dari satu kotak ke kotak lainnya, hanya arah pandang Pak Dengklek yang berpindah “KANAN” menyatakan perpindahan arah pandang 90 derajat searah jarum jam, instruksi ini tidak mengakibatkan Pak Dengklek berpindah dari satu kotak ke kotak lainnya, hanya arah pandang Pak Dengklek yang berpindah Ingat bahwa tentunya dalam pencarian, Anda ataupun Pak Dengklek tidak boleh keluar dari peta yang diberikan. FORMAT KELUARAN Baris pertama berisi sebuah bilangan bulat M yang merupakan banyaknya tempat yang mungkin dicapai dari rumah Pak Dengklek dengan petunjuk yang ada. M baris berikutnya masing‐masing berisi dua buah Halaman 9 dari 10 Sesi 3 OSN VIII bilangan bulat dipisahkan spasi yang merupakan posisi baris lalu posisi kolom dari tempat yang mungkin dicapai dari rumah Pak Dengklek, diurutkan berdasarkan posisi baris dahulu baru posisi kolom. Dengan urutan instruksi tertentu, walaupun cukup aneh, bisa jadi salah satu tempat yang mungkin menjadi tempat acara penutupan adalah tempat dimana rumah Pak Dengklek berada. Dan karena tugas Anda hanyalah membantu menemukan tempat‐tempat yang mungkin dicapai dari rumah Pak Dengklek dengan petunjuk yang ada, Anda tetap perlu mencetak posisi rumah Pak Dengklek jika posisi tersebut dapat dicapai dengan petunjuk yang ada. CONTOH MASUKAN 9 14 ############## ##...##.##.#.# #..#.......#.. #..#.##.##.#.# #....##....#.# #.##.##.##.#.. #.##....##.### #H##.##.##.### ############## 5 LURUS KANAN LURUS KIRI LURUS CONTOH KELUARAN 6 2 2 3 3 4 4 3 5 3 5 3 5 PENJELASAN CONTOH Gambar di bawah ini menjelaskan cara mencapai tiga dari enam kemungkinan tempat tujuan sesuai dengan petunjuk kasar yang ada. Halaman 10 dari 10 SOAL SESI 1 OLIMPIADE SAINS NASIONAL IX BIDANG INFORMATIKA 3 AGUSTUS 2010 MEDAN, SUMATERA UTARA Selamat Bekerja, Berkompetisi, Jadilah Yang Terbaik! Sesi 1 1. Gudang olah raga X memiliki aturan penyimpanan bola sebagai berikut. Hanya satu bola boleh diletakkan di satu kotak putih atau kotak hitam. Bola volley hanya boleh dimasukkan ke kotak putih saja. Bola basket boleh diletakkan di kotak manapun. Dalam deretan kotak, dua kotak putih tidak boleh diletakkan saling bersisian. Jika terdapat 4 kotak hitam, 3 kotak putih, 2 bola volley dan 2 bola basket, berapa banyak konfigurasi penyimpanan bola dan urutan kotak yang mungkin? 2. Sebuah pesta reuni dihadiri oleh 101 pasang alumni yang datang bersama, serta 100 alumni yang datang sendiri. Semua hadirin di pesta tersebut saling bersalaman dengan hadirin yang lainnya. Jika tiap alumni tidak bersalaman dengan pasangannya, berapakah jumlah salaman yang terjadi? 3. Sebuah kalkulator memiliki konfigurasi tombol sebagai berikut. 7 8 9 4 5 6 1 2 3 0 Dari satu tombol, kita hanya boleh menekan tombol yang tepat bersisian (kiri, kanan, atas, bawah) dengan tombol tersebut pada kesempatan berikutnya. Berapakah kemungkinan urutan penekanan tombol jika kita dapat menekan tombol kalkulator maksimal tiga kali? OSN IX satu butir kelapa ke dalam muatan truk. Jika pada awalnya sebuah truk mengangkut 10000 butir kelapa, berapakah jumlah kelapa yang tersisa di muatan truk ketika truk tersebut tiba di pos ke 60? 6. Berapakah banyak bilangan yang dapat dibagi 8 atau 6 di antara 1 hingga 2010? 7. Berapakah banyaknya bilangan biner berdigit tujuh yang tidak memiliki dua digit 0 yang saling bersisian? 8. Wagimin, menghabiskan 1/6 masa hidupnya sebagai seorang anak, 1/12 hidupnya sebagai pemuda, kemudian menikah setelah umurnya bertambah 1/7 hidupnya. 5 tahun kemudian, anaknya lahir. Namun sayangnya, anaknya mati muda. Umur anak Wagimin hanya setengah dari umur bapaknya. Karena depresi yang berat setelah kematian anaknya, 4 tahun kemudian, Wagimin pun meninggal. Berapakah umur Wagimin sebenarnya? 9. Perhatikan gambar peta berikut ini X Sebuah Robot diluncurkan dari bumi ke mars. Sayangnya, karena pendaratan yang tidak mulus, mesin robot rusak sehingga tidak bisa bergerak berlawanan arah setelah sekali bergerak ke satu arah. Artinya, jika robot bergerak ke utara, maka dia tidak bisa bergerak kembali ke selatan dan sebaliknya. Begitu pula jika ia bergerak ke barat, maka ia tidak akan bisa bergerak menuju timur, dan sebaliknya. Jika posisi awal robot ditandai dengan huruf X, maka berapa banyak kemungkinan rute yang diambil robot hingga ia tidak dapat bergerak lagi, berdasarkan peta tersebut? 4. Dua buah bilangan bulat jika dijumlahkan hasilnya -20. Jika dikalikan hasilnya 91. Berapakah nilai kedua bilangan tersebut? 5. Sebuah truk pengangkut kelapa mengangkut sejumlah kelapa dan mengantarkannya ke beberapa pos. Setiap kali truk berhenti di sebuah pos, truk wajib menurunkan separuh muatannya (dibulatkan ke bawah). Sebagai imbalannya, pos tersebut akan menambahkan 10. Dari 10 digit bilangan (0 hingga 9) diambil 7 digit secara acak dan tidak berulang. Jika semua kemungkinan urutan pengambilan kita urutkan Halaman 1 dari 6 Sesi 1 OSN IX Apabila panjang masing-masing jembatan seragam yaitu 250 m dan Pak Dengklek memulai perjalanan antarpulaunya dari pulau A, berapa detikkah waktu minimum yang diperlukan Pak Dengklek untuk melewati jembatan menuju pulau B (pembulatan ke bawah dalam satuan detik) ? secara ascending, dan diketahui kemungkinan ke-n adalah “4 2 7 6 3 5 1”, maka kemungkinan ke-(n+10) adalah? 11. Diberikan dua buah bilangan bulat positif (> 0), x dan y. Didefinisikan sebuah fungsi R(x, y) yang bernilai x apabila x = y, bernilai R(x-y, y) jika x > y, atau bernilai R(x, y-x) apabila x < y. Berapakah nilai dari R(36, 24)? 12. Lembaga Penerbangan dan Antariksa Nasional berencana meluncurkan 3 satelit komunikasi pada tahun 2100. Satelit pertama akan mengudara tanggal 3 Februari 2100 dan dapat mengorbit bumi dalam waktu 6 hari. Satelit kedua akan mengudara tanggal 13 Februari 2100 dan dapat mengorbit bumi dalam waktu 10 hari. Sedangkan satelit ketiga akan mengudara tanggal 18 Februari 2100 dan dapat mengorbit bumi dalam waktu 15 hari. Jika ketiga satelit tersebut diluncurkan dari lokasi yang sama dan memiliki jalur orbit yang sama, kapankah ketiga satelit tersebut akan berpapasan di angkasa? (format output: dd/mm/yyyy) 13. Lima buah pulau A, B, C, D, dan E terhubung melalui beberapa jembatan satu arah. Untuk alasan keamanan, setiap kendaraan bermotor yang melintasi jembatan-jembatan tersebut harus mengikuti batas kecepatan yang telah ditetapkan oleh dinas terkait. Karena kekuatan dan bahan tiap jembatan berbeda, batas kecepatan masing-masing jembatan pun berbeda-beda pula. Satu-satunya cara melintas dari satu pulau ke pulau lainnya adalah melewati jembatan tersebut. Diberikan batas maksimal kecepatan melintas pada masing-masing jembatan berikut: A B = 10 m/detik A C = 80 m/detik B E = 60 m/detik C B = 40 m/detik C D = 85 m/detik C E = 50 m/detik D B = 15 m/detik D E = 30 m/detik 14. Ada berapa banyak bilangan bulat di antara 1.000 dan 10.000 (termasuk 1.000 dan 10.000) yang habis dibagi 4 tetapi tidak habis dibagi 6? 15. Digit ke-4 dari belakang/kanan dari (19!) adalah… 16. Diberikan dua buah keranjang. Keranjang pertama berisi 1 bola biru, 2 bola merah, dan 3 bola hijau. Keranjang kedua berisi 2 bola biru, 3 bola merah, dan 1 bola hijau. Jika Anda mengambil 2 bola dari keranjang pertama secara acak dan 2 bola dari keranjang kedua secara acak, ada berapa kemungkinan kombinasi warna dari 4 bola yang telah Anda ambil? 17. Misalkan jumlah penduduk kota New York adalah 7 juta orang, dan setiap orang akan menyebar benih pohon untuk mendukung program penghijauan. Diketahui bahwa banyak benih pohon yang mampu disebar oleh seseorang paling sedikit 50.000 benih dan paling banyak 300.000 benih. Mereka menyepakati agar sebagian besar (Y) penduduk menyebar sebanyak X. Berapa nilai Y minimal agar penyebar benih sebanyak X maksimal? Untuk soal 18 sampai dengan 19: Ada 4 orang pemain tenis putra bernama M1, M2, M3, M4 dan 4 orang pemain tenis putri bernama F1, F2, F3, F4. Setiap pemain memiliki daftar pasangan yang kompak bermain bersama pada ganda campuran, diurutkan dari yang paling kompak sampai ke yang kurang kompak. Nama Urutan kekompakan M1 F3, F2, F1, F4 M2 F1, F3, F2, F4 M3 F2, F4, F1, F3 M4 F3, F1, F2, F4 Halaman 2 dari 6 Sesi 1 OSN IX F1 M1, M3, M2, M4 F2 M2, M3, M4, M1 F3 M3, M1, M2, M4 F4 M1, M4, M3, M2 Diketahui 4 pemuda dan 4 pemudi ini sudah ditunjuk berpasang-pasangan oleh pelatih mereka. Mx dan Fy akan mengajukan keberatan jika Mx bermain dengan Fy lebih kompak dari Mx bermain dengan pasangannya, dan Fy bermain dengan Mx lebih kompak dari Fy bermain dengan pasangannya. Misalnya, jika M1 berpasangan dengan F1 dan M2 berpasangan dengan F3, M1 dan F3 akan mengajukan keberatan. 18. Misalkan keempat pasangan yang terbentuk adalah M1-F1, M2-F2, M3-F3, M4-F4. Ada berapa pasangan pemain yang akan mengajukan keberatan? 19. Ada berapa kemungkinan konfigurasi empat pasang pemain tersebut sehingga M1 dan F1 bukan berpasangan tetapi akan mengajukan keberatan? Untuk soal 22 sampai dengan 25: Berikut ini adalah peta pipa air yang melewati ladangladang A, B, C, D, E, F. Arah panah menunjukkan arah air yang mengalir dalam pipa tersebut. Untuk pipa yang menghubungkan B-F dan pipa yang menghubungkan C-E, air dapat mengalir ke arah mana saja tapi pada satu waktu hanya pada satu arah saja. Angka-angka yang tertera menunjukkan kapasitas (debit) pipa dalam kiloliter per detik. Misalnya, pipa yang menghubungkan B dan C dapat menyalurkan maksimum 12 kiloliter per detik, dari B ke C. Tanpa adanya penimbunan air di sebuah ladang, tentu banyak air yang masuk ke sebuah ladang harus tepat sama dengan banyak air yang keluar dari ladang tersebut. Misalnya, jika 4 kiloliter/detik masuk dari A ke B dan 5 kiloliter/detik masuk dari F ke B, maka 9 kiloliter/detik air harus keluar dari B ke C. 20. Tentu banyak air yang masuk ke A per detik harus sama dengan banyak air yang keluar dari D per detik. Berapa kiloliter/detik air paling banyak yang dapat mengalir masuk ke A (atau keluar dari D) yang dapat ditampung jaringan pipa ini? 21. Jaringan di atas diubah sehingga pipa yang menghubungkan B dan F hanya memiliki kapasitas 1 kiloliter/detik? Berapa kiloliter/detik air paling banyak yang dapat mengalir masuk ke A (atau keluar dari D) yang dapat ditampung jaringan pipa ini? 22. Ladang B membutuhkan sebanyak-banyaknya air, dan Anda dapat mengatur banyaknya air yang masuk ke A (atau yang keluar dari D) dan ke arah mana dan berapa banyak air mengalir dalam setiap pipa. Berapa kiloliter/detik air paling banyak yang dapat melalui B sehingga tidak melanggar kapasitas setiap pipa dalam jaringan? 23. Jika ladang B membutuhkan minimum aliran 10 kiloliter/detik air melalui B, dan Anda dapat mengatur banyaknya air yang masuk ke A (atau yang keluar dari D) dan ke arah mana dan berapa banyak air mengalir dalam setiap pipa. Berapa kiloliter/detik air paling banyakkah yang dapat mengalir melalui E sehingga tidak melanggar kapasitas setiap pipa dalam jaringan? 24. Perhatikan algoritma di bawah ini. st berisi string “OLIMPIADESAINS” dan panjang string disimpan dalam sebuah variabel k. Variabel tab adalah array integer berukuran yang cukup (lebih kecil atau sama dengan k). k:=length(st); Halaman 3 dari 6 Sesi 1 OSN IX function P(x, y: integer): integer; begin if (x = 0) then P := y else begin P := P(x-1, y+1); end; end; Berapakah nilai writeln(P(5,10), ‘ dan ‘, P(2010,2011)); ? for i:=1 to k do tab[i]:=1; for i:=1 to k-1 do for j:=i+1 to k do if (st[i]<st[j]) and (tab[i]>=tab[j]) then tab[j]:=tab[i]+1; writeln(tab[k]); Apa output yang akan dihasilkan? 25. Perhatikan kode program di bawah ini “cek” adalah sebuah array dengan indeks mulai dari 1 s/d 100 yang setiap elemennya bernilai true atau false. Pada awal program semua elemen array “cek” diberi nilai “false”. for i:=2 to n do if not cek[i] then begin writeln('#',i); j:=i; repeat cek[j]:=true; j:=j+i; until j>n; end; Jika n berharga 50, berapa kalikah karakter ‘#’ muncul di output? 26. Perhatikan kode program di bawah ini “cek” adalah sebuah array dengan indeks mulai dari 1 s/d 1000 yang setiap elemennya bernilai true atau false. Pada awal program semua elemen array “cek” diberi nilai “false”. for i:=1 to n do begin j:=i; repeat cek[j]:=not cek[j]; j:=j+i; until j>n; end; for i:=1 to n do if cek[i] then write(i,'*'); Jika n berharga 100, maka output yang akan dihasilkan adalah ..... 27. Diberikan sebuah fungsi dalam Pseudopascal berikut: Untuk soal nomor 28 sampai dengan 30: Perhatikan potongan kode program dalam pseudopascal berikut ini: function R(n: integer; x: integer; y: integer; z: integer) : integer; begin if (n = 0) R := 1; else R := S(x - 1, y, z) + S(x, y - 1, z) + S(x, y, z - 1) + n; end; function S(x: integer; y: integer; z: integer) : integer; begin S := R(min(x,y,z), x, y, z); // min adalah fungsi menentukan // nilai minimum dari ketiga // parameternya end; 28. Berapakah nilai yang dikembalikan R(1, 2, 2, 2)? 29. Jika R(1, 1, 1, z) mengembalikan nilai 1000, berapakah z? 30. Misalkan tipe data integer dapat menyimpan bilangan bulat sebesar atau sekecil apapun. Berapakah nilai maksimum m sehingga memanggil R(m, m - 1, m - 2, m - 3) membuat fungsi R tidak pernah selesai dieksekusi? Untuk soal 31 sampai dengan 32: // isi dari array a[0..9] {2,1,6,8,9,7,5,3,4,0}; for i := 0 to n do begin for j := 0 to 9 do Halaman 4 dari 6 adalah Sesi 1 OSN IX 38. Setiap dung adalah ding. Ada lima ding yang juga dong. Tidak ada dung yang dong. Jika banyaknya ding adalah 15 dan tiga diantaranya tidak dung dan tidak dong, maka banyaknya dung adalah... begin if a[i] < a[j] then begin temp := a[i]; a[i] := a[j]; a[j] := temp; end; end; end; 31. Jika n = 0, berapakah nilai yang dicetak perintah writeln(a[4]) setelah menjalankan algoritma ini? 32. Berapakah nilai minimum n sehingga setelah menjalankan algoritma ini a[9] = 9 ? 33. Jika 4! berarti 4.3.2.1 = 24, maka digit terakhir dari 1! + 2! + 3! +...+1999! adalah.... 34. Suatu bilangan x terdiri dari dua angka. Jika bilangan itu ditambah 45, akan diperoleh bilangan yang terdiri dari dua angka itu juga dalam urutan terbalik. Jika di antara angka puluhan dan angka satuan disisipkan angka nol, maka diperoleh bilangan yang nilainya 7 2 kali 3 bilangan x. Bilangan x tersebut adalah.... 35. Pada dasar sebuah tong terdapat 3 buah keran. Dari keadaan penuh, dengan membuka keran pertama dan kedua saja, tong tersebut dapat dikosongkan dalam waktu 70 menit; jika yang dibuka keran pertama dan ketiga saja, tong tersebut kosong dalam waktu 84 menit; jika yang dibuka keran kedua dan ketiga saja, tong itu kosong dalam waktu 140 menit. Jika ketiga keran itu dibuka bersama, tong dapat dikosongkan dalam waktu....menit. 39. Matematikawan August DeMorgan hidup pada tahun 1800-an. Pada tahun terakhir dalam masa hidupnya dia menyatakan bahwa : “Dulu aku berusia x tahun pada tahun x2 ”. Pada tahun berapakah ia dilahirkan... 40. Wati menuliskan suatu bilangan yang terdiri dari angka 6 angka (6 digit) di papan tulis, tetapi kemudian Iwan menghapus 2 buah angka 1 yang terdapat pada bilangan tersebut sehingga bilangan yang terbaca menjadi 2002. Berapa banyak bilangan dengan enam digit yang dapat dituliskan Wati agar hal seperti diatas dapat terjadi? 41. Jika x dan y bilangan bulat yang memenuhi y 2 3x 2 y 2 30 x 2 517 , maka 3x 2 y 2 .... 42. Bilangan palindrom adalah bilangan yang sama jika dibaca dari kiri ke kanan atau sebaliknya. Sebagai contoh 35353 adalah bilangan palindrom, sedangkan 14242 bukan palindrom. Tentukan banyaknya bilangan bulat positif terdiri dari 5-angka bersifat palindrom yang habis dibagi 3. 43. Cari bilangan bulat positif terkecil n sehingga memberikan sisa berturut-turut 1, 2, 3, 4 dan 5 jika dibagi 2, 3, 4, 5, dan 6. 44. Tentukan bilangan yang terdiri dari 4 digit ABCD yang memenuhi 4 ABCD DCBA . 36. Jika x 2 xy 15 dan xy y 2 10 , x 0 maka nilai x sama dengan 37. Suatu kunci kombinasi terdiri dari lima angka. Ada berapa banyak cara membentuk kombinasi yang memuat paling sedikit satu angka 7? 45. Pada sebuah klub olahraga diketahui bahwa 10 orang menyukai tenis, 15 orang menyukai tenis meja, 12 orang menyukai bulutangkis, 5 orang menyukai tenis dan tenis meja, 4 orang menyukai tenis dan bulutangkis, 3 orang menyukai tenis meja dan bulutangkis dan 2 orang menyukai ketiga olahraga tersebut. Halaman 5 dari 6 Sesi 1 Berapa banyak anggota klub yang menyukai sedikitnya satu dari ketiga cabang olahraga ini? 46. Untuk menentukan usulan peraturan yang dapat disetujui oleh publik diadakan survey terhadap sejumlah responden. Peraturan yang diusulkan terdiri atas usulan I, II dan III. Setelah dihitung, 78% responden menyatakan dapat menyetujui sekurang-kurangnya satu usulan diantara usulan I, II, dan III. 50% responden menyetujui usulan I, 30% responden menyetujui usulan II dan 20% responden menyetujui usulan III. Jika 5% dari responden menyetujui ketiga usulan tersebut, maka persentase responden yang menyetujui lebih dari satu usulan diantara ketiga usulan tersebut adalah ....%. 47. Suatu susunan 10-angka 0,1,2,3,4,5,6,7,8,9 dikatakan susunan cantik jika memenuhi tiga aturan sebagai berikut: a. Jika yang dibaca dari dari kiri ke kanan hanya angka 0, 1, 2, 3, 4 membentuk barisan naik b. Jika yang dibaca dari kiri ke kanan hanya angka 5, 6, 7, 8, 9 membentuk barisan turun, dan c. Angka 0 bukan pada posisi pertama. Sebagai contoh, 9807123654 adalah susunan cantik. Berapa banyak-kah susunan cantik tersebut. OSN IX Para pemuda dan pemudi ini sedang dalam pencarian pasangannya masing-masing. 48. Misalkan ada aturan bahwa seorang pemuda yang ingin berpasangan dengan seorang pemudi harus memiliki usia minimal sama dengan usia sang pemudi. Ada berapa kemungkinan empat pasang pemuda-pemudi yang mungkin yang dapat dibentuk dari data di atas? 49. Misalkan ada aturan bahwa seorang pemuda yang ingin berpasangan dengan seorang pemudi harus memiliki usia minimal sama dengan usia sang pemudi. Ada berapa cara M1, M3, dan M4 memilih pasangan masing-masing sehingga membuat M2 tidak mempunyai pilihan yang mungkin? 50. Misalkan tidak ada batasan usia, tetapi ada aturan bahwa jika seorang pemuda Mx ingin berpasangan dengan seorang pemudi Fy, Mx harus menyukai Fy di urutan ke-1, 2, atau 3, dan Fy harus menyukai Mx di urutan ke-1, 2, atau 3. Ada berapa kemungkinan empat pasang pemuda-pemudi yang mungkin yang dapat dibentuk dari data di atas? Untuk soal 48 sampai dengan 50: Ada 4 orang pemuda bernama M1, M2, M3, M4 dan 4 orang pemudi bernama F1, F2, F3, F4. Setiap pemuda/pemudi memiliki daftar pemudi/pemuda yang disukai, diurutkan dari yang paling disukai sampai ke yang kurang disukai. Nama Usia Urutan yang disukai M1 24 F3, F2, F1, F4 M2 23 F1, F3, F2, F4 M3 28 F2, F4, F1, F3 M4 26 F3, F1, F2, F4 F1 F2 F3 F4 22 26 24 21 M1, M3, M2, M4 M2, M3, M4, M1 M3, M1, M2, M4 M1, M4, M3, M2 Halaman 6 dari 6 SOAL SESI 2 OLIMPIADE SAINS NASIONAL IX BIDANG INFORMATIKA 3 AGUSTUS 2010 MEDAN, SUMATERA UTARA Selamat Bekerja, Berkompetisi, Jadilah Yang Terbaik! Sesi 2 OSN IX Melukis Kode soal: osn1005.PAS/C/ CPP Batas Run-time: 1 detik / test-case Batas Memori: 16 MB Buatlah sebuah program yang akan menimpa nilai dari matriks berukuran W x H sebanyak N langkah. Pada setiap langkah diberikan posisi pojok kiri atas (Left, Top) dan paling kanan-bawah (Right, Bottom) dari area persegi yang akan ditimpa dengan nilai K. Keluaran adalah kondisi akhir matriks setelah langkah ke-N dijalankan. FORMAT MASUKAN Baris pertama berisi dua buah bilangan bulat, W (1 ≤ W ≤ 20) dan H (1 ≤ H ≤ 20). Baris kedua berisi sebuah bilangan bulat N (1 ≤ N ≤ 20). N baris berikutnya berisi lima buah bilangan bulat Ai, Bi, Ci, Di dan Ki (1 ≤ Ai ≤ Ci ≤ W , 1 ≤ Bi ≤ Di ≤ H) dimana (Ai, Bi) melambangkan koordinat (Left, Top), (Ci, Di) melambangkan koordinat (Right, Bottom) dan Ki nilai yang harus ditimpakan. FORMAT KELUARAN H baris yang masing-masing terdiri atas tepat W karakter tanpa dipisahkan oleh spasi yang menggambarkan kondisi akhir matriks. CONTOH MASUKAN 5 3 1 2 5 4 1 2 2 3 2 3 3 4 1 5 4 3 CONTOH KELUARAN 33003 34403 04403 00003 Halaman 1 dari 9 Sesi 2 OSN IX Pecahan Uang Kode soal: osn1006.PAS/C/ CPP Batas Run-time: 1 detik / test-case Batas Memori: 16 MB Diberikan sebuah nilai uang dalam dolar sebesar K. Buatlah sebuah program yang akan menghasilkan pecahan dolar bernilai total K dengan memakai uang pecahan terbesar. Jika uang pecahan terbesar tidak dapat dipakai (karena jumlah uang akan melebihi pecahan terbesar), maka diambil pecahan yang lebih kecil, dan seterusnya. Pecahan yang tersedia adalah 1 dolar, 2 dolar, 5 dolar, 10 dolar, 20 dolar, 50 dolar, 100 dolar, 200 dolar, 500 dolar, dan 1000 dolar. FORMAT MASUKAN Baris pertama berisi sebuah bilangan bulat K (1 ≤ K ≤ 10 000), yang merupakan jumlah uang yang harus dipecah. FORMAT KELUARAN Satu atau lebih baris dimana masing-masing baris berisi dua buah bilangan bulat yang dipisahkan oleh sebuah spasi. Bilangan pertama adalah pecahan uang dan bilangan kedua adalah banyak lembar pecahan uang tersebut. Urutkanlah baris-baris berdasarkan pecahan uang, dari besar ke kecil. Pecahan uang yang tidak digunakan tidak perlu ditulis. CONTOH MASUKAN 1 98 CONTOH KELUARAN 1 50 1 20 2 5 1 2 1 1 1 CONTOH MASUKAN 2 10000 CONTOH KELUARAN 2 1000 10 Halaman 2 dari 9 Sesi 2 OSN IX Berat Bebek Kode soal: osn1007.PAS/C/CPP Batas Run-time: 1 detik / test-case Batas Memori: 16 MB Setiap bulan, Posyanbedu (Pos Pelayanan Bebek Terpadu) unit Pak Dengklek mengadakan penimbangan badan rutin untuk mengetahui kondisi kesehatan umum bebek-bebek di suatu kandang. Bebek-bebek akan dibariskan berdasarkan lokasi kandangnya dan ditimbang satu per satu. Jumlah bebek dan kandang yang sangat banyak membuat Pak Dengklek kebingungan mendata berat teringan dan terberat bebek dari suatu lokasi kandang. Bantulah Pak Dengklek mendata bebek-bebeknya tersebut. FORMAT MASUKAN Masukan terdiri dari beberapa baris, masing-masing berisi sebuah bilangan bulat Ai (1 ≤ Ai ≤ 10 000) yang menyatakan berat bebek. Data bebek dari setiap kandang yang berbeda akan dipisahkan oleh sebuah bilangan 0. FORMAT KELUARAN Untuk setiap kandang bebek, keluarkanlah sebuah baris berisi dua buah bilangan bulat yakni data berat bebek teringan dan bebek terberat dari semua bebek di kandang tersebut dipisahkan oleh sebuah spasi. Masukan dijamin tidak lebih dari 1 000 000 baris. CONTOH MASUKAN 3 5 1 0 2 2 0 1 2 3 CONTOH KELUARAN 1 5 2 2 1 3 Halaman 3 dari 9 Sesi 2 OSN IX Keluarga Bebek Kode soal: osn1008.PAS/C/CPP Batas Run-time: 1 detik / test-case Batas Memori: 16 MB Saat memulai usaha peternakan bebeknya dulu, Pak Dengklek hanya memiliki beberapa ekor bebek saja. Sekarang, bebeknya telah beranak pinak hingga ratusan, bahkan ribuan. Sampai-sampai mereka sudah lupa dengan leluhur dan keluarga aslinya. Pak Dengklek berinisiatif membantu bebek-bebeknya untuk menemukan saudara-saudara sedarah mereka dengan mencocokkan DNA-nya. Setiap bebek memiliki kode DNA yang unik Ai (1 ≤ Ai ≤ 2 000 000 000). Dua bebek dikatakan berasal dari satu keluarga yang sama jika selisih DNA-nya kurang dari D (1 ≤ D ≤ 10 000). Jika bebek X satu keluarga dengan bebek Y, dan bebek Y satu keluarga dengan bebek Z, maka dapat dipastikan bebek X, Y dan Z ketiganya berasal dari keluarga yang sama. Bantulah Pak Dengklek menentukan banyak keluarga/leluhur yang berbeda dari semua bebek-bebeknya. FORMAT MASUKAN Baris pertama berisi dua buah bilangan bulat N (1 ≤ N ≤ 100 000) yang menyatakan banyak bebek dan D (2 ≤ D ≤ 10 000) yang menyatakan batas toleransi kesamaan DNA bebek. N baris berikutnya masing-masing berisi sebuah bilangan bulat Ai (1 ≤ Ai ≤ 2 000 000 000) yang merepresentasikan kode DNA bebek dan terurut dari kecil ke besar. FORMAT KELUARAN Sebuah bilangan bulat yang menyatakan jumlah keluarga berbeda dari bebek-bebek Pak Dengklek. CONTOH MASUKAN 7 3 1 3 5 8 13 15 16 CONTOH KELUARAN 3 Halaman 4 dari 9 Sesi 2 OSN IX Pasar Rakyat Kode soal: osn1009.PAS/C/CPP Batas Run-time: 1 detik / test-case Batas Memori: 16 MB Desa Pak Dengklek sering kedatangan para pedagang dari berbagai daerah. Pedagang-pedagang ini datang mengunjungi desa Pak Dengklek secara periodik dalam beberapa hari sekali. Setiap pedagang mempunyai perioda masing-masing (mungkin ada pedagang yang menetapkan perioda yang sama walaupun pada umumnya berbeda). Akibatnya bisa terjadi, semua pedagang datang di hari yang bersamaan. Saat itu lah sebuah pasar besar digelar dengan sebutan Pasar Rakyat. Pak Dengklek sangat suka belanja dan selalu menantikan datangnya Pasar Rakyat. Kebetulan, hari ini Pasar Rakyat kembali digelar dan hampir mencapai penghujungnya. Pak Dengklek yang tidak sabar menunggu, mulai sibuk menghitung, berapa hari lagikah Pasar Rakyat akan kembali digelar? FORMAT MASUKAN Baris pertama masukan berisi sebuah bilangan bulat N (2 ≤ N ≤ 20) yang menyatakan banyak pedagang yang mengunjungi desa Pak Dengklek. N baris berikutnya masing-masing berisi sebuah bilangan Di (1 ≤ Di ≤ 100 000) yang menyatakan periode kunjungan pedagang ke-i. FORMAT KELUARAN Sebuah bilangan bulat yang merupakan banyak hari berikutnya dimana Pasar Rakyat akan diadakan apabila hari ini adalah hari penyelenggaraan Pasar Rakyat. Keluaran dijamin tidak akan lebih dari 100 000. CONTOH MASUKAN 3 2 4 5 CONTOH KELUARAN 20 Halaman 5 dari 9 Sesi 2 OSN IX Penjumlahan Kode soal: osn1010.PAS/C/ CPP Batas Run-time: 1 detik / test-case Batas Memori: 32 MB Tipe data 32-bit integer (biasanya bernama long pada bahasa C/C++ dan longint pada Pascal) hanya mampu menyimpan angka sampai sekitar 2 milyar. Kali ini Anda ditugaskan untuk membuat operasi penjumlahan pada bilangan bulat positif yang bisa jauh lebih besar daripada 2 milyar. FORMAT MASUKAN Baris pertama berisi sebuah bilangan bulat positif dengan panjang minimal 1 digit dan panjang maksimal 100 digit. Baris kedua berisi sebuah bilangan bulat positif dengan panjang minimal 1 digit dan panjang maksimal 100 digit. Digit pertama dari bilangan bulat yang diberikan tidak mungkin 0 (nol). FORMAT KELUARAN Sebuah baris berisi hasil penjumlahan dari kedua bilangan bulat yang diberikan pada masukan. Digit pertama dari bilangan bulat yang dikeluarkan tidak boleh 0 (nol). CONTOH MASUKAN 1 100 50 CONTOH KELUARAN 1 150 CONTOH MASUKAN 2 11 1999999999 CONTOH KELUARAN 2 2000000010 Halaman 6 dari 9 Sesi 2 OSN IX Susu Cap Dengklek Kode soal: osn1011.PAS/C/CPP Batas Run-time: 1 detik / test-case Batas Memori: 16 MB Pak Dengklek menjalin kerja sama dengan sahabat jauhnya, meluncurkan produk susu kaleng impor berbentuk silinder dengan merek lokal “Susu Cap Dengklek”. Untuk menarik minat pembeli, Pak Dengklek mengadakan kuis berhadiah dengan meluncurkan beberapa susu kaleng limited edition. Susu ini memiliki label khusus dengan gambar sebuah matriks yang setelah dilekatkan pada kaleng berbentuk silinder tersebut akan membentuk matriks sirkuler berukuran M x N (1 ≤ M, N ≤ 50) yang melingkar di sekeliling kalengnya. Tujuan dari kuis ini adalah menemukan sebuah nilai maksimum yang dapat dibentuk dari penjumlahan elemen-elemen submatriks ukuran B x K dari matriks sirkuler pada label kaleng. Bisakah Anda menyelesaikan kuis Pak Dengklek ini? FORMAT MASUKAN Baris pertama berisi dua buah bilangan bulat M dan N (1 ≤ M, N ≤ 50) dimana M menyatakan banyak baris dan N menyatakan banyak kolom dari matriks ketika label kaleng dipotong. Baris kedua juga berisi dua buah bilangan bulat B dan K (1 ≤ B ≤ M, 1 ≤ K ≤ N) yang masing-masing menyatakan ukuran baris dan kolom submatriks. M baris berikutnya berisi N buah bilangan bulat Aij (-32 768 ≤ Aij ≤ 32 767) yang menyatakan elemen matriks pada baris ke-i dan kolom ke-j. Karena matriksnya sirkuler, tentu saja kolom ke-M tepat berhimpitan dengan kolom pertama ketika label belum terpotong. FORMAT KELUARAN Sebuah bilangan bulat yang menyatakan jumlah maksimum yang dapat dibentuk dari submatriks B x K dari matriks yang diberikan di masukan. CONTOH MASUKAN 4 4 2 2 -1 0 2 -1 3 -4 0 -1 -1 0 -2 5 -3 4 0 -1 CONTOH KELUARAN 14 Halaman 7 dari 9 Sesi 2 OSN IX Wildcard Kode soal: osn1012.PAS/C/ CPP Batas Run-time: 1 detik / test-case Batas Memori: 16 MB Dalam pencocokan string, karakter asterisk (*) sering dipakai sebagai karakter wildcard (karakter yang dapat dicocokan dengan nol atau lebih karakter apa saja). Misalnya, ma* dapat dicocokan dengan makan, makanan, main, ma. Namun, ma* tidak dapat dicocokkan dengan minum, mula, hama. Tanda asterisk ini dapat berada di depan, tengah, atau belakang dari pattern yang akan dicari. Buatlah program yang diberikan sebuah pattern dan daftar kata-kata yang akan dicocokkan dengan pattern tersebut, mengeluarkan kata-kata yang berhasil dicocokan. FORMAT MASUKAN Baris pertama berisi sebuah string yang panjangnya minimal 1 dan maksimal 100 karakter. Dijamin bahwa string ini tepat mengandung sebuah karakter asterisk (*) dan karakter-karakter lainnya adalah ‘a’-‘z’ (huruf kecil). String ini adalah pattern untuk dicocokkan dengan string-string berikutnya. Baris kedua berisi sebuah bilangan bulat N (1 ≤ N ≤ 100). N baris berikutnya masing-masing berisi sebuah string yang panjangnya minimal 1 dan maksimal 100 karakter. String-string ini adalah string-string yang akan dicocokkan dengan pattern. Dijamin bahwa setiap karakter adalah ‘a’-‘z’ (huruf kecil). FORMAT KELUARAN Keluaran terdiri atas nol atau lebih baris. Masing-masing baris berisi sebuah string yang berhasil dicocokkan dengan pattern pada masukan. Keluarkan string yang berhasil dicocokkan sesuai dengan urutan string pada masukan. CONTOH MASUKAN 1 ma* 5 mula makan minum main hama CONTOH KELUARAN 1 makan main CONTOH MASUKAN 2 * 3 main Halaman 8 dari 9 Sesi 2 OSN IX makan hama CONTOH KELUARAN 2 main makan hama Halaman 9 dari 9 SOAL SESI 3 OLIMPIADE SAINS NASIONAL IX BIDANG INFORMATIKA 4 AGUSTUS 2010 MEDAN, SUMATERA UTARA Selamat Bekerja, Berkompetisi, Jadilah Yang Terbaik! Sesi 3 OSN IX Shuffle Kode soal: osn1013.PAS/C/ CPP Batas Run-time: 1 detik / test-case Batas Memori: 16 MB Pak Dengklek selaku panitia Olimpiade Sains Nasional 2010, sedang berada di dalam pesawat menuju Medan. Merasa kurang kerjaan di dalam pesawat, Pak Dengklek hendak mendengarkan lagu menggunakan alat pemutar lagu, ipod shuffle, miliknya. Alat tersebut berisikan M buah lagu kesukaan Pak Dengklek yang judulnya berbeda satu sama lain. Supaya tidak membosankan, alat tersebut melakukan algoritma pengocokan urutan pemutaran lagu. Dengan algoritma tersebut, sebelum mulai memutarkan lagu, alat tersebut akan membentuk permutasi M buah lagu. Setelah permutasi tersebut terbentuk, baru lah lagu diputarkan satu persatu. Setelah M buah lagu tersebut selesai diputar, jika masih mau didengarkan, alat tersebut akan membentuk permutasi M buah lagu lagi lalu memainkannya satu persatu. Dasar Pak Dengklek yang unik, mendengarkan lagu saja kurang mengasyikkan bagi dia. Kali ini ia tertarik untuk membuktikan apakah algoritma pengocokan alat pemutar lagunya berjalan dengan benar. Definisi benar dalam hal ini adalah bahwa jika M buah lagu pertama yang Pak Dengklek dengar mencakup semua lagu yang ada (tidak ada lagu yang tidak diputarkan). Begitu pula dengan M buah lagu berikutnya (setelah M buah lagu pertama), harus mencakup semua lagu yang ada, dan seterusnya. Untuk itu, Pak Dengklek telah mencatat N buah lagu yang sudah ia dengarkan dari awal ia menggunakan alat tersebut. Pak Dengklek tahu bahwa agar pembuktiannya menjadi sederhana, N harus merupakan kelipatan M. Bantulah Pak Dengklek untuk melakukan pembuktian akan ipod shuffle-nya. FORMAT MASUKAN Baris pertama berisi sebuah bilangan bulat M (1 ≤ M ≤ 100) dan N (M ≤ N ≤ 1000, N merupakan kelipatan M), banyaknya lagu yang terdapat dalam ipod shuffle milik Pak Dengklek dan banyaknya lagu yang didengarkan oleh Pak Dengklek dari awal secara berturutan. N baris berikutnya berisi judul lagu yang didengarkan oleh Pak Dengklek berurutan dari yang pertama ia dengarkan. Setiap judul lagu diwakilkan oleh 4 karakter huruf kecil ('a' sampai 'z'), tidak ada spasi di awal judul atau akhir judul. FORMAT KELUARAN Baris pertama berisi kata "BENAR" tanpa tanda kutip jika dari catatan Pak Dengklek dapat disimpulkan bahwa algoritma pengocokan yang dilakukan oleh ipod shuffle miliknya berjalan dengan benar atau berisi kata-kata "BELI BARU" tanpa tanda kutip jika sebaliknya. Jika baris pertama berisi "BENAR", maka tidak perlu ada baris kedua. Namun jika baris pertama berisi "BELI BARU", maka baris kedua berisi sebuah bilangan bulat yang menyatakan urutan lagu yang sampai situ saja sebenarnya sudah dapat membuat Pak Dengklek menyatakan bahwa ipod shuffle miliknya tidak berjalan dengan benar. Halaman 1 dari 11 Sesi 3 CONTOH MASUKAN 1 OSN IX 3 9 kgrc kcgr bsms kgrc bsms kcgr kgrc kcgr bsms CONTOH KELUARAN 1 BENAR CONTOH MASUKAN 2 4 8 bgmn idry bgmn idry bgmn idry bgmn idry CONTOH KELUARAN 2 BELI BARU 3 CONTOH MASUKAN 3 2 2 nkpg plpl CONTOH KELUARAN 3 BENAR PENJELASAN Pada contoh pertama, lagu Keong Racun (berkode kgrc), lagu Kucing Garong (kcgr), dan lagu Bang SMS (bsms), masing-masing diputarkan tepat satu kali dalam urutan 1 sampai 3, 4 sampai 6, dan 7 sampai 9. Pada contoh kedua, seharusnya ada 4 lagu, namun Bagimu Negeri (berkode bgmn) sudah diputarkan untuk kedua kalinya pada urutan ke-3. Pada contoh ketiga, terdapat 2 lagu, dan sejauh ini 2 lagu tersebut sudah diputarkan masing-masing satu kali. Halaman 2 dari 11 Sesi 3 OSN IX Magic Kode soal: osn1014.PAS/C/ CPP Batas Run-time: 1 detik / test-case Batas Memori: 16 MB Sambil menemani peserta menunggu waktu untuk masuk ruang kompetisi Olimpiade Sains Nasional 2010, Pak Dengklek sebagai panitia yang baik mencoba berinteraksi dengan para peserta. Kali ini, Pak Dengklek mencoba menunjukkan kemampuan sulapnya. Ia meminta salah seorang peserta untuk menuliskan N buah bilangan bulat (x1, x2, x3, ... xN) masing-masing bernilai antara 1 sampai dengan 10 (termasuk mungkin 1 atau 10 itu sendiri). Pak Dengklek berkata bahwa ia dapat menebak N buah bilangan bulat tersebut tanpa ia lihat langsung. Pak Dengklek hanya meminta peserta untuk mengikuti perintahnya sebagai berikut. Pertama-tama, setelah menuliskan N buah bilangan bulat, peserta diminta untuk menuliskan N-1 buah bilangan bulat lain dengan cara menjumlahkan setiap bilangan bulat yang bersebelahan, xi' = xi + xi+1. Jika awalnya, peserta tersebut menuliskan x1, x2, x3, ... xN, maka berikutnya ia akan menulis N-1 buah bilangan bulat (x1', x2', x3', ... xN-1'). Dan proses tersebut terus dilakukan sampai hanya tersisa sebuah bilangan bulat. Setelah hanya tersisa sebuah bilangan bulat, Pak Dengklek meminta peserta untuk memberitahunya x1, x1', sampai x1 dengan tanda petik sebanyak N. Sebagai contoh, jika peserta menuliskan 5 buah bilangan bulat pada mulanya, 3 1 5 4 2, maka berikut ini adalah proses yang akan dilakukan oleh peserta. 3 4 1 5 6 10 4 9 15 25 30 55 2 6 15 Kemudian peserta hanya perlu memberitahukan 3 4 10 25 55 kepada Pak Dengklek agar Pak Dengklek dapat menebak 5 bilangan bulat yang ditulis mula-mula (3 1 5 4 2). Sebagai keterangan tambahan, bilangan 4 di baris kedua pada segitiga bilangan di atas didapatkan dari penjumlahan bilangan 3 dan bilangan 1 di baris pertama. Bantulah Pak Dengklek untuk melakukan sulapnya. FORMAT MASUKAN Baris pertama berisi sebuah bilangan bulat N (1 ≤ N ≤ 10). Baris kedua berisi N buah bilangan bulat yang merupakan x1, x1', sampai x1 dengan tanda petik sebanyak N. FORMAT KELUARAN Sebuah baris berisi N buah bilangan bulat yang merupakan x1, x2, x3, ... xN. Halaman 3 dari 11 Sesi 3 CONTOH MASUKAN 1 OSN IX 5 3 4 10 25 55 CONTOH KELUARAN 1 3 1 5 4 2 CONTOH MASUKAN 2 2 4 8 CONTOH KELUARAN 2 4 4 CONTOH MASUKAN 3 3 1 3 8 CONTOH KELUARAN 3 1 2 3 PENJELASAN Contoh pertama sama seperti contoh yang diberikan pada deskripsi soal. Halaman 4 dari 11 Sesi 3 OSN IX Missile Kode soal: osn1015.PAS/C/CPP Batas Run-time: 1 detik / test-case Batas Memori: 16 MB Ramainya kasus terorisme saat ini, membuat Pak Dengklek mendapatkan ide berikut ini untuk salah satu soal Olimpiade Sains Nasional 2010. Diberikan informasi lokasi N buah rumah yang terletak di sepanjang jalan yang diberi nomor antara 1 sampai dengan 100 000 (termasuk mungkin 1 atau 100 000 itu sendiri) yang menyatakan posisi rumah tersebut (termasuk mungkin 1 dan 100 000 tersebut) dan informasi jangkauan M buah misil yang dapat digunakan untuk menghancurkan salah satu rumah. Sebuah misil hanya dapat menghancurkan sebuah rumah yang diberikan informasi nomornya dan berada dalam jangkauan misil tersebut. Tugasnya cukup sederhana yakni untuk menghitung berapa banyak rumah maksimal yang dapat dihancurkan dengan menggunakan maksimal M buah misil tersebut. Bantulah Pak Dengklek untuk menguji seberapa sulit ide soal tersebut dengan membuat contoh solusinya. FORMAT MASUKAN Baris pertama berisi dua buah bilangan bulat N (1 ≤ N ≤ 1 000) dan M (1 ≤ M ≤ 1 000). Baris kedua berisi N buah bilangan bulat dipisahkan spasi yang merupakan informasi nomor rumah-rumah. Tidak ada dua rumah yang bernomor sama. M baris berikutnya masing-masing berisi dua buah bilangan bulat A dan B (1 ≤ A, B ≤ 100 000) yang menyatakan jangkauan awal dan akhir misil tersebut. Pada lima puluh persen masukan, tidak akan terdapat dua buah misil dimana jangkauan misil pertama adalah subset dari jangkauan misil kedua. Dengan kata lain, tidak akan terdapat dua buah misil dimana jangkauan kiri misil pertama lebih kecil dari jangkauan misil kedua sedangkan jangkauan kanan misil pertama lebih besar dari jangkauan misil kedua. FORMAT KELUARAN Sebuah bilangan bulat yang menyatakan banyak rumah maksimal yang dapat dihancurkan. CONTOH MASUKAN 1 3 1 1 9 8 3 5 10 2 12 11 CONTOH KELUARAN 1 2 Halaman 5 dari 11 Sesi 3 CONTOH MASUKAN 2 3 1 4 1 2 OSN IX 3 2 5 5 5 4 CONTOH KELUARAN 2 3 CONTOH MASUKAN 3 3 1 1 1 2 3 4 5 2 5 4 CONTOH KELUARAN 3 3 PENJELASAN Pada contoh pertama, misil pertama (dengan jangkauan 1 2) dapat dipakai untuk menghancurkan rumah bernomor 1, sedangkan rumah bernomor 5 tidak mungkin dihancurkan oleh misil kedua (dengan jangkauan 9 12) maupun ketiga (dengan jangkauan 8 11) karena nomornya tidak ada di dalam jangkauan kedua misil tersebut; namun salah satu dari misil kedua atau ketiga dapat digunakan untuk menghancurkan rumah bernomor 10. Pada contoh kedua, misil pertama dapat dipakai untuk menghancurkan rumah bernomor 5, misil kedua untuk rumah bernomor 1, dan misil ketiga untuk rumah bernomor 2. Sedangkan pada contoh ketiga, misil pertama dapat dipakai untuk menghancurkan rumah bernomor 1, misil kedua untuk rumah bernomor 5, dan misil ketiga untuk rumah bernomor 2. Halaman 6 dari 11 Sesi 3 OSN IX Waterfall Kode soal: osn1016.PAS/C/CPP Batas Run-time: 1 detik / test-case Batas Memori: 32 MB Sehari sebelum pembagian medali pada Olimpiade Sains Nasional 2010, adalah hari wisata edukasi. Di salah satu lokasi wisata edukasi, Pak Dengklek melihat suatu air terjun buatan. Air terjun itu mengalir sepanjang tebing yang dapat digambarkan sebagai peta berbentuk matriks dengan ukuran V (secara vertikal) kali H (secara horisontal). Pada tebing tersebut ditempelkan beberapa batu buatan pula (karena air terjunnya pun buatan). Batu buatan tersebut masing-masing berbentuk kotak yang dinyatakan dengan kotak kiri atas dan kanan bawahnya pada peta tebing. Perhatikan ilustrasi di bawah ini yang menggambarkan sebuah air terjun pada tebing berukuran 5 kali 5 dari kotak (1,1) sampai dengan kotak (5,5). Terdapat tiga batu buatan di posisi (2,3)-(2,4), (4,2)-(5,2), (5,5)(5,6). Air terjun tentu tidak lengkap tanpa air itu sendiri, maka air pun perlu diteteskan dari suatu titik pangkal di bagian tebing. Secara spesifik, air akan mulai diteteskan dari sebuah kotak (-1,X). Air tersebut kemudian mungkin menabrak suatu batu. Jika tabrakan itu terjadi, tetesan air akan pecah menjadi dua (dan kedua tetesan tersebut sejak itu dianggap sebagai dua tetes air terpisah; walau suatu saat mereka mungkin bertemu, mereka tetap dianggap dua tetes air yang terpisah). Salah satu satu tetesan air kemudian lanjut menetes dari sisi kiri batu dan satunya lagi lanjut menetes dari sisi kanan batu. Hal tersebut bisa terjadi berulang-ulang sampai tetesan air mencapai dasar air terjun. Setiap kali air menabrak suatu batu, timbullah suara bergemericik. Pak Dengklek yang merasa bahwa air terjun akan semakin indah jika semakin lebat suara gemericiknya, mengharapkan tabrakan antara air dan batu terjadi sebanyak mungkin. Bantulah Pak Dengklek menentukan di kotak mana air harus mulai diteteskan agar terjadi sebanyak mungkin tabrakan antara air dan batu. Seperti dapat dilihat pada ilustrasi di atas, jika Pak Dengklek meneteskan air dari kotak (-1, 3) akan terjadi 3 tabrakan, sedangkan jika dari kotak (-1, 2) hanya akan terjadi 1 tabrakan. Tabrakan dengan dasar air terjun tidak dihitung. FORMAT MASUKAN Halaman 7 dari 11 Sesi 3 OSN IX Baris pertama berisi tiga buah bilangan bulat, V, H, dan N (1 ≤ V, H ≤ 500) yang merupakan ukuran peta air terjun secara vertikal, ukuran peta air terjun secara horisontal, dan banyaknya batu. N baris berikutnya masing-masing berisi empat buah bilangan bulat v1, h1, v2, h2 (semua berada di dalam jangkauan peta) yang menyatakan kotak kiri atas dan kanan bawah dari batu tersebut. Dijamin tidak ada dua buah batu yang menempel atau bersentuhan satu sama lain sehingga air selalu bisa mengalir. FORMAT KELUARAN Sebuah bilangan bulat yang menyatakan banyaknya tabrakan maksimal yang dapat terjadi antara air dan batu jika mulainya tetesan air diatur sedemikian rupa. Bilangan bulat tersebut dijamin tidak lebih besar dari 1015 dan untuk lima puluh persen keluaran bilangan bulat tersebut dijamin tidak lebih besar dari 5000. CONTOH MASUKAN 6 2 4 5 6 3 2 5 3 2 4 5 2 5 6 CONTOH KELUARAN 3 PENJELASAN Contoh kasus sesuai dengan ilustrasi pada deskripsi soal, tidak ada titik penetesan lain yang dapat menghasilkan tabrakan lebih dari 3 kali. Halaman 8 dari 11 Sesi 3 OSN IX Password Kode soal: osn1017.PAS/C/CPP Batas Run-time: 1 detik / test-case Batas Memori: 16 MB Olimpiade Sains Nasional 2010 pun berakhir, Pak Dengklek hendak pulang. Sayangnya, ia lupa password pintu kamarnya. Sebagai informasi, pintu kamar panitia diberi password khusus untuk alasan keamanan berkas soal dan hasil. Dan lebih uniknya, bukan hanya untuk masuk, untuk keluar pun pintu kamar tersebut meminta password. Password dalam hal ini terdiri dari tepat 4 buah digit, dan setiap digit adalah bilangan bulat antara 0 sampai dengan 9 (termasuk mungkin 0 atau 9 itu sendiri). Jika seseorang salah menebak password tersebut, maka secara otomatis password tersebut akan mengubah diri menjadi selisih mutlak antara password sebelumnya dengan tebakan yang baru diberikan. Perhitungan selisih mutlak ini dilakukan dengan menganggap setiap password adalah sebuah bilangan bulat. Contoh: password semula adalah 0010 dan password tebakan adalah 0104, maka password pintu kamar Pak Dengklek selanjutnya berubah menjadi 0094; perubahan yang sama akan diperoleh jika password semula adalah 0104 dan sebaliknya tebakan adalah 0010 (ingat selisih mutlak). Bantulah Pak Dengklek untuk keluar dari kamarnya sehingga ia dapat pulang. INFORMASI TIPE SOAL Tipe soal seperti ini biasa disebut "interaktif". Pada soal ini Anda akan berinteraksi dengan program penguji melalui standard input dan standard output. Perhatikan format masukan dan keluaran di bawah ini dengan seksama. FORMAT MASUKAN DAN KELUARAN Pada saat program Anda dimulai, mulailah menebak dengan mencetak sebuah password yang terdiri dari empat buah digit bilangan bulat. Selanjutnya, bacalah sebuah kata yang antara lain "terkunci" atau "pulang". Jika kalimat yang Anda baca adalah "pulang", tidak perlu ada kelanjutan dari program Anda (dengan kata lain, program Anda harus berakhir dan tentunya program Anda mendapatkan nilai untuk kasus tersebut). Sedangkan jika kalimat yang Anda baca adalah "terkunci", Anda perlu menebak lagi dan seterusnya. Jika sampai 15 kali Anda menebak belum pernah ada kata "pulang", program Anda akan dihentikan secara paksa oleh program penguji dan tentunya program Anda tidak mendapatkan nilai (atau mendapatkan nilai nol) untuk kasus tersebut. Petunjuk "bacalah" dan "mencetak" yang dijelaskan di atas dapat Anda lakukan dengan menggunakan perintah standard seperti write, writeln, scanf, printf, dll selayaknya Anda mengerjakan soal biasa. Yang perlu diperhatikan adalah bahwa untuk tipe soal interaktif seperti ini, Anda harus selalu memberikan perintah "fflush(stdout);" (bagi pengguna C/C++) atau "flush(output);" (bagi pengguna PASCAL) setiap kali Anda mencetak keluaran (dengan kata lain, setiap kali ada perintah write/writeln/scanf/printf/dll, tepat di bawahnya harus ada perintah fflush/flush). Halaman 9 dari 11 Sesi 3 OSN IX Berikut ini adalah contoh kode program dalam bahasa PASCAL yang akan selalu menebak password 2500 sampai mendapatkan kata "pulang": var hasil:string; begin hasil:=''; while (hasil<>'pulang') do begin writeln('2500'); flush(output); readln(hasil); end; end. Dan berikut ini dalam bahasa C/C++: char hasil[20]; int main(){ strcpy(hasil,""); while (strcmp(hasil,"pulang")<>0){ printf("2500\n"); fflush(stdout); gets(hasil); } return 0; } CONTOH INTERAKSI 1 KELUARAN ANDA - KELUARAN PENGUJI 2500 terkunci 2500 terkunci 2500 pulang CONTOH INTERAKSI 2 KELUARAN ANDA - KELUARAN PENGUJI 2500 terkunci 2500 terkunci 2500 terkunci 2500 terkunci 2500 terkunci 2500 terkunci 2500 terkunci Halaman 10 dari 11 Sesi 3 OSN IX 2500 terkunci 2500 terkunci 2500 terkunci 2500 terkunci 2500 terkunci 2500 terkunci 2500 terkunci 2500 terkunci program dihentikan secara paksa di titik ini karena telah mencoba menebak sebanyak 15 kali PENJELASAN Pada contoh pertama, password mula-mula adalah 7500, berikutnya berubah menjadi 5000 (7500 - 2500), berikutnya berubah menjadi (5000 - 2500), dan akhirnya terjawab dengan benar. Sedangkan pada contoh kedua, password mula-mula adalah 1500, berikutnya berubah menjadi 1000 (2500-1500), berikutnya berubah menjadi 1500 lagi (2500-1000), dan seterusnya. Halaman 11 dari 11 Bundel Soal Sesi 1 Bidang Informatika Olimpiade Sains Nasional X Manado - Sulawesi Utara - 13 September 2011 Anda dilarang membuka dan membaca isi bundel soal ini sebelum dipersilakan oleh juri. Bundel soal ini berisi 36 (tiga puluh enam) soal yang terdiri dari 8 (delapan) paket (tiap paket tidak memiliki keterkaitan dengan paket lain) dari halaman 1 sampai dengan halaman 12. Bundel Soal Sesi 1 OSN X Bidang Informatika Ikan Dek Makrit Dek Makrit adalah keponakan dari Pak Dengklek. Karena melihat hobi Pak Dengklek yang memelihara bebek, bulan September 2011 tahun ini Dek Makrit mulai memelihara ikan dengan membeli 26 ekor ikan yang berwarna biru, merah, atau hijau. Ikan Dek Makrit memiliki keunikan, yaitu hanya bertambah tiba-tiba menjadi dua kali lipat pada salah satu hari tahun kabisat. Selain itu, tepat di setiap awal tahun, 10% ikan yang dimiliki olehnya akan mati. Sebagai catatan, tahun kabisat adalah tahun berbilangan kelipatan 4. Pengecualian diberikan kepada tahun berbilangan kelipatan 100, mereka harus habis dibagi 400 baru disebut tahun kabisat. Jadi, 2000 dan 2004 adalah tahun kabisat sedangkan 2100 bukan. Banyaknya hari di tahun kabisat ada 366, bukan 365. Gunakan pembulatan ke bawah jika diperlukan dalam perhitungan. 1. Berapakah banyak ikan Dek Makrit pada akhir tahun 2017? Jawab: ... 2. Pada tahun 2015 Dek Makrit berencana ingin menjual ikannya. Saat itu rasio warna ikannya 25% biru, 40% merah, dan sisanya hijau. Dek Makrit kemudian mengambil 50% dari keseluruhan ikan saat itu secara acak untuk dijual. Berapa banyaknya kombinasi ikan yang dijual agar ikan berwarna biru jumlahnya paling sedikit dibandingkan dengan ikan yang berwarna merah atau berwarna hijau? Jawab: ... 3. Setelah mencari informasi lebih lanjut mengenai pertambahan populasi ikannya di mesin pencari Google, Dek Makrit kemudian mengetahui bahwa ikannya akan bertambah pada hari yang kemunculannya paling banyak dibanding hari lainnya di tahun kabisat. Berapakah peluang ikan akan berkembang biak pada hari Selasa? Jawab: ... 4. Dek Makrit memelihara ikannya dalam sebuah akuarium. Pada akuarium tersebut ternyata muncul bakteri yang berkembang biak dengan menghasilkan sebuah tunas setiap satu jam. Tunas tersebut kemudian tumbuh menjadi bakteri dewasa dalam waktu satu jam juga, menghasilkan tunas satu jam kemudian, dan begitu seterusnya siklus tersebut berulang. Jika pada awalnya terdapat sebuah tunas bakteri dan tidak ada bakteri yang mati selama siklus perkembang-biakan, berapa banyak tunas bakteri yang ada setelah 15 jam? Jawab: ... 5. Agar ikannya tetap sehat, Dek Makrit membuat rencana untuk membersihkan akuarium jika jumlah bakteri yang ada sudah lebih dari atau sama dengan 10000 bakteri. Tapi sekeras apapun usaha Dek Makrit untuk membersihkan akuarium, tetap akan selalu tersisa 1 tunas Halaman 1 Bundel Soal Sesi 1 OSN X Bidang Informatika bakteri setelah akuarium dibersihkan. Setiap berapa jam-kah Dek Makrit harus membersihkan akuarium? Jawab: ... Halaman 2 Bundel Soal Sesi 1 OSN X Bidang Informatika Kantong Makanan Ternyata ikan Dek Makrit sangat kreatif dan pandai bermain pada saat lapar. Oleh karena itu Dek Marit memberi hadiah berupa makanan berbentuk butiran saat ikannya bermain dan diberikan dalam kantong. Permainan ini akan dimainkan oleh beberapa ikan dengan membentuk lingkaran. Permainan dimulai dengan memberikan kantong makanan yang terdiri dari N makanan kepada ikan pertama. Ikan pertama kemudian dapat mengambil 1, 2, atau 3 butir makanan dari kantong makanan, kemudian menyerahkannya ke teman di tepat sebelahnya searah jarum jam. Hal ini berlangsung terus untuk ikan yang selanjutnya hingga makanan dalam kantong makanan habis. Agar permainan ini lebih seru, Dek Makrit membuat aturan bahwa ikan yang mengambil makanan terakhir dari kantong makanan, harus keluar dari lingkaran, mengambil sebuah kantong makanan baru, menyerahkan ke kelompok ikan sisanya dan tidak bermain lagi. Kelompok yang baru akan memulai permainan yang sama dengan kantong makanan yang baru. Ikan yang tepat berada di sebelah kanan ikan yang keluar menjadi pemegang kantong makanan pertama untuk putaran selanjutnya. Ikan terakhir yang berhasil bertahan akan mendapat hadiah spesial dari Dek Makrit. Ternyata ikan yang berani bermain hanya ada tiga ekor. Ketiga ikan ini tentu ingin berjuang sebaikbaiknya agar mereka mendapatkan hadiah spesial. Karena mereka telah bermain berkali-kali, mereka semua telah menemukan cara untuk dapat bermain optimal. Apabila mereka memiliki kesempatan untuk mengeluarkan teman setelahnya, maka mereka akan mengambil kesempatan itu. Dek Makrit kemudian membuat aturan tambahan bahwa yang tidak mungkin menang pada satu permainan, hanya boleh mengambil satu buah makanan. Dek Makrit jago matematika, jadi dia tahu kalau ikannya curang. Ikan diberi nomor 1 hingga 3 searah jarum jam, dan ikan nomor 1 akan menerima menerima kantong makanan pertama kali. 6. Jika saat awal permainan jumlah makanan adalah 3 dan pada putaran kedua jumlah makanan adalah 5, maka ikan manakah yang akan menang? A. B. C. D. E. 1 2 3 Tidak dapat dipastikan Tidak ada jawaban yang benar Halaman 3 Bundel Soal Sesi 1 OSN X Bidang Informatika 7. Apabila pada saat awal permainan jumlah makanan adalah 6 dan pada putaran kedua jumlah makanan adalah 6, maka ikan manakah yang akan menang? A. B. C. D. E. 1 2 3 Tidak dapat dipastikan Tidak ada jawaban yang benar 8. Manakah kombinasi jumlah makanan di bawah yang dapat membuat ikan nomor 3 menang? A. B. C. D. E. 5,4 6,5 6,7 Tidak dapat dipastikan Tidak ada jawaban yang benar 9. Apabila jumlah makanan di kantong pertama adalah 5925 dan jumlah makanan di kantong kedua adalah 4381, maka ikan nomor berapa yang akan menang? A. B. C. D. E. 1 2 3 Tidak dapat dipastikan Tidak ada jawaban yang benar Halaman 4 Bundel Soal Sesi 1 OSN X Bidang Informatika Menghias Akuarium Dek Makrit ingin menghias akuariumnya dengan batu yang beragam ukuran (tidak ada dua batu dengan ukuran yang sama) yang diatur dengan susunan tertentu. Pada baris terdepan, hanya boleh ada satu batu di tengah-tengah. Menurutnya, akuariumnya akan semakin indah jika setiap batu memiliki satu atau dua batu yang disusun di posisi kiri belakang atau kanan belakang, Gambaran batu dan akuarium tampak atas dalam dua dimensi adalah sebagai berikut : depan kiri kanan bawah Sebuah rancangan susunan batu dapat dinyatakan dalam pola A, B atau C. Misal, pada contoh gambar satu, rancangan dapat dinyatakan dalam ketiga pola sebagai berikut : Jenis Pola Pola A 12,5,2,9,18,15,13,17,19 B 2,5,9,12,13,15,17,18,19 C 2,9,5,13,17,15,19,18,12 *cara menulis susunan batu dengan pola A, B, atau C ini penting anda pahami untuk menjawab soal Pak Dengklek kemudian memberi tantangan kepada Dek Makrit agar menyusun sesuai kriteria tertentu, sehingga apabila Dek Makrit berhasil menyusun sesuai kriteria tersebut, Pak Dengklek akan memberi hadiah lain untuk akuarium Dek Makrit. Berikut adalah kriteria yang diberikan oleh Pak Dengklek: Sebuah batu akan berada di kiri belakang batu lain, jika dan hanya jika ukurannya lebih kecil daripada ukuran batu yang didepannya. Dan sebuah batu akan berada di kanan belakang jika ukurannya lebih besar Halaman 5 Bundel Soal Sesi 1 OSN X Bidang Informatika Jika menambahkan batu ke susunan yang telah ada, harus menyusuri dari barisan depan, dan menyesuaikan dengan kriteria pertama. Pada gambar berikut adalah proses penambahan batu berukuran 13 ke susunan yang sudah ada. mbar 1, Ga Untuk mengeluarkan batu dari susunan yang telah ada, berlaku aturan berikut: o Keluarkan langsung batu tersebut jika tidak memliki batu lain di belakangnya (a) o Jika hanya ada 1 batu tepat di belakang batu yang akan dikeluarkan, keluarkan batu tersebut. Batu-batu dibelakangnya dimajukan ke satu barisan didepannya. (b) o Jika ada dua batu yang berada dibelakang batu yang akan diambil. Ambil batu yang berada di susunan bagian kanan belakang paling kiri dan tidak punya batu di kiri belakangnya sebagai pengganti batu yang diambil. Batu lain yang berada di belakang batu pengganti dimajukan ke satu barisan didepannya. (c) (a) (b) Halaman 6 Bundel Soal Sesi 1 OSN X Bidang Informatika (c) 10. Dek Makrit mengambil 10 batu sembarang yang berturut-turut memiliki ukuran 8, 4, 3, 5, 9, 17, 14, 1, 2, 10. Bagaimanakah susunan batu yang terbentuk agar Dek Makrit mendapat hadiah dari pak Dengklek jika dinyatakan dengan pola A? Jawab: ..., ..., ..., ... 11. Dek Makrit kemudian mengeluarkan batu satu per satu secara berturut-turut yang berukuran 17, 9 dan 3. Bagaimanakah susunan batu sekarang jika dinyatakan dengan pola C? Jawab: ..., ..., ..., ... 12. Dek Makrit kemudian menambahkan batu berukuran 15, 6, 11, dan 7. Ternyata Dek Makrit menemukan sebuah batu yang posisinya jauh paling belakang. Sebutkan urutan batu jika disusuri dari paling depan hingga ke batu paling belakang tersebut (dipisahkan oleh koma). Jawab: ..., ..., ..., ... 13. Dek Makrit kemudian menyadari bahwa susunan ini dapat menjadi susunan yang sangat jelek, yaitu saat seluruh batu membentuk susunan yang berupa garis lurus. Berikan salah satu contoh pengambilan batu yang membentuk susunan yang sangat jelek dengan batu yang berukuran 1 hingga 5 (dipisahkan oleh koma). Jawab: ..., ..., ..., ... Halaman 7 Bundel Soal Sesi 1 OSN X Bidang Informatika Hash Table Dek Makrit sedang belajar mengenai Hash Table. Hash Table adalah sebuah struktur data yang dapat melakukan operasi insert (peletakan data) dan search (pencarian data) dengan sangat cepat. Hash Table diimplementasi dengan tabel, namun berbeda dengan menggunakan tabel saja, dengan hash table Dek Makrit tidak harus menelusuri seluruh tabel untuk mencari sebuah bilangan. Dek Makrit mengimplementasi hash table dengan cara sebagai berikut: - Dek Makrit membuat sebuah tabel yang memiliki K buah elemen, yang diberi indeks 0 sampai dengan K – 1. - Dek Makrit kemudian membuat sebuah fungsi hash f(x) = y, yang memetakan nilai x ke y. Nilai y haruslah berada dalam range 0 sampai dengan K – 1, inklusif. - Setiap kali Dek Makrit meng-insert data x, Dek Makrit akan menghitung f(x), lalu memasukkan x ke dalam tabel pada indeks ke-f(x). - Setiap kali Dek Makrit mau mencari apakah data x ada atau tidak di dalam hash table, ia akan menghitung f(x), lalu melihat apakah indeks ke-f(x) berisi data yang ingin dicarinya. Misalnya Dek Makrit ingin membuat hash table untuk menyimpan integer. Ia memilih K = 6 dan fungsi hash f(x) = x mod 6. Pada mulanya semua elemen tabel masih kosong. Setelah Dek Makrit meng-insert 14, 33, dan 60, isi tabel menjadi seperti berikut. Gambar 2 Dek Makrit melihat bahwa mudah sekali terjadi konflik. Misalnya, jika ia meng-insert 42, f(42) = 0, sehingga jika ia meletakkan 42 di posisi 0, 60 akan terhapus. Agar satu indeks dapat menyimpan lebih dari satu nilai, ia menambahkan sebuah daftar di setiap indeks elemen agar dapat menyimpan Halaman 8 Bundel Soal Sesi 1 OSN X Bidang Informatika lebih dari satu nilai. Misalnya, setelah peletakan 42, tabel menjadi seperti gambar 3 (ke kanan adalah daftar yang ditambahkan pada indeks sebuah elemen) dan panjang daftar di indeks 0 adalah 2. Catatan: urutan angka yang dimasukkan dalam daftar tidak menjadi masalah. Gambar 3. 14. Misalkan setelah itu, Dek Makrit memasukkan angka-angka 70, 80, 90, …, 600. Setelah selesai, berapakah banyak nilai pada daftar dari indeks ke-2? Jawab: ... 15. Tetap pada kondisi yang sama, berapakah banyaknya nilai tersimpan pada daftar indeks ke1? Jawab: ... Menurut Dek Makrit, menyimpan terlalu banyak angka di dalam hash table yang kecil adalah ide yang buruk, karena semakin panjang daftar yang ada, semakin lambat pula operasi pencarian. Dek Makrit mendapat saran dari seorang pakar untuk memilih K yang cukup besar agar panjang daftar per indeks tidak lebih dari satu atau dua. 16. Dek Makrit kemudian mengosongkan hash tablenya, dan sekarang ia memilih K = 600 dan f(x) = x mod 600. Lalu ia memasukkan angka-angka 10, 20, 30, dst, yang selalu lebih besar 10 dari bilangan sebelumnya. Ada berapa bilangan yang harus dimasukkan agar panjang daftar di indeks ke-470 mencapai 3? Jawab: ... 17. Ternyata memilih f(x) = x mod 600 untuk tabel berukuran K = 600 bukan ide yang bagus, karena seperti contoh di atas, panjang daftar di indeks yang berbeda-beda sangat tidak merata untuk masukan 10, 20, 30, …. Dek Makrit kemudian mengubah fungsi hash-nya menjadi f(x) = (x mod 601) mod 600 dan ia kemudian mengosongkan hash table dan mulai memasukkan 10, 20, 30, dst. Ada berapa bilangan yang harus dimasukkan sehingga panjang daftar di indeks ke-470 mencapai 3? Jawab: ... 18. Pada saat tersebut, berapakah selisih antara panjang daftar yang terpanjang dan panjang daftar yang terpendek? Jawab: ... Halaman 9 Bundel Soal Sesi 1 OSN X Bidang Informatika 19. Misalkan Dek Makrit tidak lagi menyimpan angka di hash table, tetapi menyimpan string. Ia mencoba untuk K = 5 dan f(x) = banyaknya karakter ‘a’ di dalam string tersebut, mod 5. Ada berapa banyak kemungkinan string yang terdiri atas tujuh huruf yang tersusun atas karakter ‘a’-‘c’ yang akan dimasukkan ke indeks ke-0? Jawab: ... 20. Jika Dek Makrit mengubah f(x) = (banyaknya ‘a’ x banyaknya ‘b’ x banyaknya ‘c’), mod 5, dari antara semua string tujuh huruf yang tersusun atas karakter ‘a’-‘c’, ada berapa banyak kemungkinan string yang akan dimasukkan ke indeks ke-0? Jawab: ... Halaman 10 Bundel Soal Sesi 1 OSN X Bidang Informatika Prime Number Dek Makrit sedang belajar matematika dengan ikan-ikannya. Mereka sedang belajar tentang bilangan prima. Bilangan prima adalah bilangan yang hanya memiliki dua faktor pembagi, yaitu 1 dan bilangan itu sendiri. Salah satu teknik untuk menentukan bilangan prima dikenal dengan nama teknik Shieve of Eratos. Teknik ini menentukan bilangan prima dengan mendaftar semua bilangan antara 2 hingga N, kemudian menghilangkan bilangan-bilangan yang habis dibagi oleh bilangan prima berikutnya, yaitu bilangan yang tidak terhapus pada tahap sebelumnya. Dek Makrit mencoba metode ini pada daftar bilangan antara 2 hingga 100. 21. Sejauh ini Dek Makrit telah menghapus semua bilangan kelipatan 2, 3 dan 5. Berapakah bilangan yang masih tersisa pada daftar saat ini? Jawab: ... 22. Dek Makrit kemudian mencari bilangan prima terbesar antara 2 sampai 100. Bilangan yang ia temukan adalah ... 23. Karena ingin mengerjakan soal yang lebih menantang, Dek Makrit kemudian mencari bilangan terbesar yang memiliki faktor prima terbanyak. Bilangan yang dia temukan adalah? Jawab: ... Halaman 11 Bundel Soal Sesi 1 OSN X Bidang Informatika Road Network Sebuah kota digambarkan dengan sebuah graph sebagai berikut Kota digambarkan oleh lingkaran/simpul dan garis/jalur menggambarkan jalan dua arah menghubungkan dua kota beserta jaraknya. yang 24. Berapakah banyak jalur yang dapat ditempuh dari kota A ke kota E tanpa melalui kota yang sama dua kali? Jawab: ... 25. Berapakah jarak terpendek yang dapat ditempuh dari kota A ke kota E? Jawab: ... 26. Jika panjang jarak antara dua kota juga melambangkan jumlah moda transportasi antara dua kota tersebut, berapakah jumlah kemungkinan kombinasi moda transportasi yang dapat digunakan dalam perjalanan dari A menuju E tanpa melalui kota yang sama dua kali? Jawab: ... 27. Pada perayaan 17 Agustus 2015, beberapa jalan akan dipilih untuk dibangun menjadi jaringan jalan tol sehingga setiap orang dapat berpergian dari dan ke kota manapun melalui jalan tol tersebut dan tepat hanya ada satu rute jalan tol yang menghubungkan antara dua kota. Berapakah total panjang jalan tol minimal yang dapat dibangun? Jawab: ... 28. Setelah jalan tol selesai dibangun pada tahun 2016, beberapa jalan baru kemudian dibangun untuk menghubungkan dua kota yang sebelumnya tidak saling terhubung langsung oleh sebuah jalan. Ternyata, jaringan jalan tol yang sebelumnya telah dibuat tetap yang paling minimal meskipun ada jalan baru yang terbentuk. Bila panjang jalan selalu bilangan bulat positif, berapakah total panjang jalan baru terkecil yang mungkin dibangun? Jawab: ... Halaman 12 Bundel Soal Sesi 1 OSN X Bidang Informatika Memisahkan Ikan Dek Makrit baru selesai belajar logika. Pada pelajaran tersebut, dia mengenal operator logika AND dan OR. Operator tersebut membutuhkan dua operan, yang menghasilkan nilai benar atau salah. Ekspresi yang diberi tanda kurung akan dikerjakan lebih dahulu. Hasil operasi dengan kedua operator tersebut adalah sebagai berikut: P (operan) Q (operan) P AND Q P OR Q Benar Benar Benar Benar Benar Salah Salah Benar Salah Benar Salah Benar Salah Salah Salah Salah Kebetulan dia akan membersihkan akuarium tempat ikan-ikannya. Untuk itu dia perlu memindahkan ikan-ikannya ke tempat sementara. Sambil mengulang pelajaran, dia ingin membuat kalimat logika yang akan menentukan ikan yang mana akan masuk ke baskom yang mana (baskom 1 atau 2). Variabel yang digunakan: Variable Pernyataan X Ikan dengan umur lebih dari 16 bulan Y Ikan dengan umur lebih dari 12 bulan Z Ikan yang diawasi orang tua W Ikan yang beratnya kurang dari 1 kg H Ikan yang hidup Tentukan kalimat logika yang dibuat oleh Dek Makrit. : 29. Ikan berumur lebih dari 16 bulan atau ikan yang berumur lebih dari 12 bulan dan diawasi orang tuanya. Jawab: ... ... ... Halaman 13 Bundel Soal Sesi 1 OSN X Bidang Informatika 30. Kalimat di soal sebelumnya juga dapat dinyatakan sebagai berikut: (Ikan yang berumur lebih dari 16 bulan atau lebih dari 12 bulan), dan, (ikan yang berumur lebih dari 16 bulan atau diawasi orang tuanya). Jawab: ... ... ... Keesokan harinya, Dek Makrit melanjutkan belajar dan mengenal operator NOT yang membutuhkan satu operan dan memiliki hasil operasi sebagai berikut. P (operan) NOT P Benar Salah Salah Benar 31. Ikan dengan berat kurang dari 1 kg dan mati atau ikan dengan berat lebih dari atau sama dengan 1 kg tetapi hidup. Jawab: ... ... ... 32. Seluruh ikan yang tersisa dari pernyataan pada soal nomor 29 s/d 31. Jawab: ... ... ... Halaman 14 Bundel Soal Sesi 1 OSN X Bidang Informatika Kesukaan Ikan Ikan Dek Makrit saat ini berjumlah 120 ekor yang dinomorinya 1 sampai 120. Seluruh ikan dek Makrit yang bernomor genap suka makanan rasa bayam, ikan yang nomornya habis dibagi 5 suka makanan rasa pisang, dan ikan yang nomornya habis dibagi 7 suka makanan rasa kangkung. 33. Berapa banyak ikan yang menyukai rasa kangkung tapi tidak menyukai rasa bayam? Jawab: ... 34. Berapa banyak ikan yang yang tidak menyukai ketiga rasa? Jawab: ... Dek Makrit kemudian membeli 80 ekor ikan lagi, sehingga sekarang jumlahnya 200 ekor. Ternyata Nek Dengklek, ibunya Pak Dengklek, hobby mewarnai makanan ikan sehingga selain beragam rasa, makanan juga berwarna warni. Dengan makanan yang berwarna warni, ikan-ikan Dek Makrit semakin suka makan. Dari 200 ekor itu, 100 ekor menyukai makanan berwarna kuning, 70 ekor menyukai makanan berwarna biru, dan 140 menyukai makanan berwarna merah. 40 diantaranya menyukai makanan berwarna kuning dan juga menyukai yang berwarna biru, 30 menyukai makanan berwarna biru dan juga menyukai yang berwarna merah, dan 60 menyukai makanan berwarna kuning dan juga menyukai yang berwarna merah. Ada 10 ekor yang menyukai ketiganya. 35. Berapakah jumlah ikan yang tidak menyukai semua warna? Jawab: ... 36. Berapakah jumlah ikan yang hanya menyukai satu warna? Jawab: ... Halaman 15 Bundel Soal Sesi 2 Bidang Informatika Olimpiade Sains Nasional X Manado - Sulawesi Utara - 13 September 2011 Anda dilarang membuka dan membaca isi bundel soal ini sebelum dipersilakan oleh juri. Bundel soal ini berisi 6 (enam) soal dari halaman 1 sampai dengan halaman 12. Bundel Soal Sesi 2 OSN X Bidang Informatika 1. Menggambar Pola Cerita Pengantar Pak Dengklek memiliki hobi menggambar pola unik. Ia memiliki sebuah kertas yang dibagi menjadi petak-petak sebanyak N baris dan M kolom. Baris-baris dinomori dari 1 sampai dengan N sedangkan kolom-kolom dinomori dari 1 sampai dengan M. Petak (a, b) menyatakan petak yang berada pada baris ke-a dan kolom ke-b. Kemudian ia menggambar simbol-simbol pada kertas tersebut dengan pola unik berikut. Petak (a, b) diberi simbol '#', jika a dan b keduanya genap, Petak (a, b) diberi simbol '*', jika a dan b keduanya ganjil, Petak (a, b) diberi simbol '$', jika hanya salah satu di antara a dan b yang genap. Sayangnya, setelah menggambar pola unik, kertas gambar tersebut hilang. Tugas Anda Bantulah Pak Dengklek untuk menggambar kembali pola unik yang ia buat. Format Masukan Format Keluaran Sebuah baris berisi dua buah bilangan bulat N buah baris masing-masing berisi M buah N dan Mdipisahkan oleh sebuah spasi. karakter yang menyatakan simbol yang Pak Dengklek gambar. Contoh Masukan 1 Contoh Masukan 2 1 3 4 5 Contoh Keluaran 1 Contoh Keluaran 2 *$* *$*$* $#$#$ *$*$* $#$#$ Batasan dan Penilaian Halaman 1 Bundel Soal Sesi 2 OSN X Bidang Informatika Soal ini memiliki 10 kasus uji, masing-masing memiliki bobot yang sama persis. Untuk setiap kasus uji, berlaku batasan sebagai berikut. Batasan runtime: 1 detik, Batasan memori: 16 MB, Batasan masukan: 1 ≤ N ≤ 100, 1 ≤ M ≤ 100. Halaman 2 Bundel Soal Sesi 2 OSN X Bidang Informatika 2. Kandang Segitiga Cerita Pengantar Pak Dengklek ingin membuat sebuah kandang baru untuk bebek-bebeknya. Dengan alasan estetika, Pak Dengklek ingin kandang baru tersebut berbentuk segitiga. Untungnya, di halaman rumah Pak Dengklek sudah terpasang N buah pasak pada lokasi-lokasi tertentu. Pasak-pasak tersebut dinomori dari 1 sampai dengan N. Halaman rumah Pak Dengklek dapat dianalogikan sebagai koordinat kartesius. Pasak ke-i terdapat pada lokasi (xi, yi). Titik-titik sudut dari kandang harus dibentuk dari tiga pasak di antara pasak-pasak yang sudah terpasang tersebut. Pak Dengklek bingung menentukan tiga buah pasak mana yang harus ia pilih karena terdapat banyak sekali cara. Tugas Anda Bantulah Pak Dengklek untuk menghitung banyaknya cara memilih tiga pasak untuk membuat kandang baru. Dua buah cara dianggap berbeda jika terdapat setidaknya satu pasak yang lokasinya berbeda di antara kedua cara tersebut. Format Masukan Format Keluaran Baris pertama berisi sebuah bilangan bulat Sebuah baris berisi sebuah bilangan bulat N. N baris berikutnya masing-masing berisi yaitu banyaknya cara Pak Dengklek dapat dua buah bilangan bulat xi dan yidipisahkan membuat kandang baru dari pasak yang oleh sebuah spasi yang menyatakan lokasi tersedia. pasak ke-i. Halaman 3 Bundel Soal Sesi 2 OSN X Bidang Informatika Contoh Masukan 2 Contoh Masukan 1 2 1 1 4 2 4 -1 4 Contoh Keluaran 2 3 7 3 4 0 1 9 Contoh Keluaran 1 4 Batasan dan Penilaian Soal ini memiliki 10 kasus uji, masing-masing memiliki bobot yang sama persis. Untuk setiap kasus uji, berlaku batasan sebagai berikut. Batasan runtime: 1 detik, Batasan memori: 16 MB, Batasan masukan: 1 ≤ N ≤ 16, -1000 ≤ xi ≤ 1000, -1000 ≤ yi ≤ 1000, dijamin tidak ada dua pasak yang berada pada posisi yang sama dan tidak ada tiga pasak yang dapat membentuk sebuah garis lurus. Halaman 4 Bundel Soal Sesi 2 OSN X Bidang Informatika 3. Karantina Bebek Cerita Pengantar Sudah menjadi rahasia umum bahwa Pak Dengklek sukses memiliki peternakan bebek. Ia mempunyai N ekor bebek yang terdapat pada M buah kandang. Dalam satu kandang mungkin saja terdapat lebih dari satu bebek. Bebek-bebek dinomori dari 1 sampai dengan N sedangkan kandang-kandang dinomori dari 1 sampai dengan M. Bebek ke-i terdapat pada kandang ke-Ki. Suatu hari, Pak Dengklek mendapatkan seekor bebek baru. Akan tetapi, bebek tersebut memiliki penyakit menular. Oleh karena itu, Pak Dengklek ingin menaruh bebek tersebut dalam sebuah kandang yang kosong. Terlebih lagi, karena Pak Dengklek tidak ingin agar bebek-bebek lain tertular, ia ingin agar total jarak dari bebek baru tersebut ke bebek-bebek lainnya adalah sebesar mungkin. Tugas Anda Bantulah Pak Dengklek untuk menentukan kandang kosong yang sesuai untuk menaruh bebek baru tersebut. Jarak dari bebek pada kandang ke-a ke bebek pada kandang ke-b adalah |a-b|, selisih antara a dan b. Format Masukan Format Keluaran Baris pertama berisi dua buah bilangan Apabila semua kandang penuh keluarkan bulat N dan M dipisahkan oleh sebuah spasi. sebuah baris berisi -1. Apabila tidak, Baris berikutnya berisi N buah bilangan keluarkan sebuah bulat Kimasing-masing dipisahkan oleh kandang tempat menaruh bebek baru sebuah spasi. Bilangan ke-i menunjukkan tersebut. Apabila terdapat banyak kandang nomor kandang bebek ke-i. yang sesuai pilih kandang dengan nomor yang paling kecil. Halaman 5 baris berisi nomor Bundel Soal Sesi 2 OSN X Contoh Masukan 2 Contoh Masukan 1 Bidang Informatika 3 2 2 1 1 4 7 4 1 4 7 Contoh Keluaran 3 2 3 4 Contoh Keluaran 2 -1 Contoh Keluaran 1 2 1 Contoh Masukan 3 3 5 Penjelasan Contoh Pada contoh pertama, bebek baru dapat ditempatkan di kandang ke-1 atau kandang ke-5, keduanya akan memberikan total jarak 6. Pada contoh kedua, total jaraknya adalah (4-2) + (2-1) + (4-2) + (7-2) = 10. Pada contoh ketiga, semua kandang penuh. Batasan dan Penilaian Soal ini memiliki 10 kasus uji, masing-masing memiliki bobot yang sama persis. Untuk setiap kasus uji, berlaku batasan sebagai berikut. Batasan runtime: 1 detik, Batasan memori: 16 MB, Batasan masukan: 1 ≤ N ≤ 100000, 1 ≤ M ≤ 1000000, 1 ≤ Ki ≤ M. Halaman 6 Bundel Soal Sesi 2 OSN X Bidang Informatika 4. Menyelidiki Pesan Cerita Pengantar Pak Dengklek senang berkirim pesan dengan Pak Ganesh. Pak Dengklek selalu menulis pesan tersebut dalam secarik kertas dan meminta seseorang untuk menyampaikannya kepada Pak Ganesh. Pesan Pak Dengklek adalah sebuah untaian N buah huruf antara 'A' sampai 'Z'. Agar pesan tersebut tidak dapat dibaca oleh pengantar kertas, maka Pak Dengklek menuliskan pesan tersebut setelah diubah dengan aturan berikut. Pak Dengklek mengubah setiap huruf menjadi sebuah huruf lainnya. Misalnya, setiap huruf 'A' diubah menjadi huruf 'N', setiap huruf 'G' diubah menjadi huruf 'T', dan seterusnya. Bisa saja sebuah huruf diubah menjadi dirinya sendiri, misalnya 'D' diubah menjadi huruf 'D' lagi. Pak Dengklek tidak pernah mengubah dua huruf berbeda menjadi sebuah huruf yang sama. Pak Dengklek sangat merahasiakan aturan perubahan antar huruf yang ia lakukan. Tugas Anda Suatu hari, Pak Dengklek meminta bantuan Anda untuk menyampaikan dua buah pesan kepada Pak Ganesh yang sudah diproses melalui sebuah aturan yang sama. Sayangnya Pak Dengklek ceroboh sehingga ia juga menuliskan pesan asli dari pesan pertama. Selidikilah ketiga pesan yang diberikan Pak Dengklek kepada Anda untuk menentukan pesan asli dari pesan kedua Pak Dengklek. Namun, apabila terdapat huruf yang belum dapat ditentukan, ubah huruf tersebut menjadi karakter '?'. Halaman 7 Bundel Soal Sesi 2 OSN X Bidang Informatika Format Keluaran Format Masukan Apabila ternyata Pak Dengklek sedang Baris pertama berisi sebuah bulat N. Tiga bingung buah baris berikutnya masing-masing berisi aturannya sendiri seperti dijelaskan di atas, pesan-pesan yang diberikan Pak Dengklek keluarkan kepada Anda: pesan asli pertama, pesan Dengklek bingung". Apabila pesan-pesan pertama setelah diubah, dan pesan kedua yang Anda terima sesuai dengan aturan di setelah diubah. atas, keluarkan sebuah baris berisi pesan sehingga sebuah tidak baris mematuhi berisi "Pak asli kedua. Contoh Masukan 1 Contoh Masukan 2 4 3 TOKI IOI KITA OSN BISA PJJ Contoh Keluaran 1 Contoh Keluaran 2 ?O?I Pak Dengklek bingung Penjelasan Contoh Pada contoh pertama, huruf T diubah menjadi K, huruf O menjadi I, huruf K menjadi T, dan huruf I menjadi A. Pada contoh kedua, huruf I diubah menjadi O dan N, melanggar aturan dasar pengubahan pesan. Batasan dan Penilaian Soal ini memiliki 10 kasus uji, masing-masing memiliki bobot yang sama persis. Untuk setiap kasus uji, berlaku batasan sebagai berikut. Batasan runtime: 1 detik, Batasan memori: 16 MB, Batasan masukan: 1 ≤ N ≤ 500. Halaman 8 Bundel Soal Sesi 2 OSN X Bidang Informatika 5. Kursi Konser Cerita Pengantar Pak Dengklek menyelenggarakan sebuah konser amal untuk membantu bebek-bebek yang kelaparan. Konser tersebut memiliki N kali M buah kursi penonton yang diatur dalam N baris dan M kolom. Baris-baris dinomori dari 1 sampai dengan N sedangkan kolom-kolom dinomori dari 1 sampai dengan M. Pada konser ini, para penonton yang datang akan menduduki kursi satu-persatu. Pak Dengklek sendirilah yang akan menentukan kursi dari setiap penonton. Untuk setiap penonton yang datang, Pak Dengklek akan menempatkannya pada kursi kosong yang memiliki jarak terkecil terhadap panggung. Jarak sebuah kursi (a, b) terhadap kursi (c, d) adalah |a-c| + |b-d|. Jika terdapat banyak kursi dengan jarak terkecil yang sama, Pak Dengklek akan memilih kursi dengan nomor baris paling kecil. Panggung dapat dianggap sebagai kursi (0, 0). Tugas Anda Anda, sebagai penggemar setia konser Pak Dengklek, datang pada urutan ke-K. Tentukan pada kursi mana Anda akan duduk. Kursi (a, b) menyatakan kursi pada baris ke-a dan kolom ke-b. Format Masukan Format Keluaran Baris pertama berisi tiga buah bilangan Sebuah baris berisi dua buah bilangan bulat bulat dipisahkan oleh sebuah spasi yaitu nomor N, M, dan K, masing-masing dipisahkan oleh sebuah spasi. baris dan nomor kolom kursi yang akan Anda tempati. Contoh Masukan 1 Contoh Masukan 2 2 2 2 2 3 5 Contoh Keluaran 1 Contoh Keluaran 2 1 2 2 2 Halaman 9 Bundel Soal Sesi 2 OSN X Bidang Informatika Penjelasan Contoh Pada contoh masukan pertama, para penonton akan menduduki kursi-kursi dengan urutan: (1, 1), (1, 2), (2, 1), (2, 2). Pada contoh masukan kedua, para penonton akan menduduki kursi-kursi dengan urutan: (1, 1), (1, 2), (2, 1), (1, 3), (2, 2), (2, 3). Batasan dan Penilaian Soal ini memiliki 10 kasus uji, masing-masing memiliki bobot yang sama persis. Untuk setiap kasus uji, berlaku batasan sebagai berikut. Batasan runtime: 1 detik, Batasan memori: 16 MB, Batasan masukan: 1 ≤ N ≤ 100, 1 ≤ M ≤ 100, 1 ≤ K ≤ N x M. Halaman 10 Bundel Soal Sesi 2 OSN X Bidang Informatika 6. Hiasan Kelereng Cerita Pengantar Pak Dengklek memiliki N buah kelereng yang berwarna-warni. Setiap warna dinyatakan dengan huruf 'A' sampai 'Z'. Kemudian, ia ingin membuat sebuah hiasan berupa barisan kelereng. Hiasan yang diinginkannya harus memenuhi aturan berikut. Barisan hiasan terdiri atas setidaknya tiga buah kelereng. Tiga kelereng pertama (bernomor 1, 2, dan 3) memiliki warna yang berbeda satu sama lain. Untuk setiap i > 3, warna kelereng ke-i sama dengan warna kelereng ke-(i-3). Dengan aturan di atas, bisa saja ada kelereng yang tidak dipakai. Tugas Anda Tentukan hiasan dengan banyak kelereng maksimal yang dapat dibuat oleh Pak Dengklek. Format Masukan Format Keluaran Baris pertama berisi sebuah bilangan bulat Sebuah baris berisi sebuah bilangan bulat N. Baris berikutnya berisi N buah karakter yang 'A' sampai 'Z' yang menyatakan warna dari maksimal yang dapat dibuat. Apabila tidak kelereng-kelereng Pak Dengklek. mungkin dibuat hiasan dengan aturan di menyatakan banyak kelereng atas, keluarkan sebuah baris berisi -1. Contoh Masukan 1 Contoh Masukan 2 Contoh Masukan 3 9 3 10 OSKOSPOSN PJJ ABCABCABCA Contoh Keluaran 1 Contoh Keluaran 2 Contoh Keluaran 3 5 -1 10 Halaman 11 Bundel Soal Sesi 2 OSN X Bidang Informatika Penjelasan Contoh Pada contoh pertama, salah satu hiasan yang mungkin adalah 'OSNOS'. Pada contoh kedua, tidak ada hiasan yang dapat dibuat karena hanya terdapat dua warna. Batasan dan Penilaian Soal ini memiliki 10 kasus uji, masing-masing memiliki bobot yang sama persis. Untuk setiap kasus uji, berlaku batasan sebagai berikut. Batasan runtime: 1 detik, Batasan memori: 16 MB, Batasan masukan: 1 ≤ N ≤ 500. Halaman 12 Bundel Soal Sesi 3 Bidang Informatika Olimpiade Sains Nasional X Manado - Sulawesi Utara - 14 September 2011 Anda dilarang membuka dan membaca isi bundel soal ini sebelum dipersilakan oleh juri. Bundel soal ini berisi 4 (empat) soal dari halaman 1 sampai dengan halaman 13. Bundel Soal Sesi 3 OSN X Bidang Informatika 1. Memasang Pemancar Cerita Pengantar Pak Dengklek kini mengambil pekerjaan sampingan sebagai teknisi di suatu stasiun televisi ternama. Dan oleh sebab itu, Pak Dengklek mendapatkan tugas untuk memasang tiga tiang pemancar perdana di suatu daerah yang baru berkembang. Untuk membantunya menyelesaikan tugas tersebut, Pak Dengklek telah mendapatkan informasi koordinat titik-titik di mana tiang pemancar boleh didirikan. Berdasarkan pengalaman Pak Dengklek, diketahui juga bahwa tiga tiang pemancar tersebut sebaiknya dibangun sedemikian rupa sehingga membentuk pola segitiga siku-siku. Yakni, salah satu dari tiga sisi segitiga yang terbentuk dari tiga tiang pemancar tersebut harus sejajar dengan sumbu vertikal (sumbu y). Sama halnya, salah satu sisi lainnya harus sejajar dengan sumbu horisontal (sumbu x). Untuk setiap skenario penempatan pemancar yang mungkin dilakukan, Pak Dengklek perlu memperhitungkan beberapa hal seperti dampaknya terhadap anggaran dana, kualitas siaran, dan lain-lain. Tentu setiap perhitungan membutuhkan waktu, semakin banyak kemungkinan skenario, semakin banyak pula waktu yang Pak Dengklek perlukan. Tugas Anda Anda akan diberikan informasi koordinat N buah titik di mana tiang pemancar boleh dibangun. Bantulah Pak Dengklek untuk menentukan berapa banyak kemungkinan segitiga siku-siku yang dapat dibentuk oleh tiga pemancar. Dua buah skenario disebut berbeda jika terdapat setidaknya satu tiang yang lokasinya berbeda di antara kedua skenario tersebut. Format Masukan Format Keluaran Baris pertama berisi sebuah bilangan bulat Satu baris berisi sebuah bilangan bulat yang N yang menyatakan banyaknya titik. N baris menyatakan berikutnya masing-masing berisi dua buah penempatan pemancar yang perlu Pak bilangan bulat Xi dan Yi dipisahkan oleh Dengklek perhitungkan. sebuah spasi yang menyatakan posisi horisontal dan vertikal dari suatu titik. Halaman 1 banyaknya skenario Bundel Soal Sesi 3 OSN X Bidang Informatika Contoh Masukan 1 Contoh Masukan 2 Contoh Masukan 3 3 4 5 -1 -1 0 0 0 0 0 0 1 0 2 0 1 1 1 1 2 2 0 1 0 2 Contoh Keluaran 1 1 1 Contoh Keluaran 2 0 Contoh Keluaran 3 4 4 Penjelasan Contoh Pada contoh pertama, ketiga titik berada pada sebuah garis lurus, sehingga tidak mungkin pola segitiga siku-siku terbentuk. Pada contoh kedua, empat titik membentuk persegi sempurna, oleh karena itu tiga pola segitiga siku-siku dapat terbentuk. Batasan dan Penilaian Terdapat 3 subsoal pada soal ini. Untuk setiap kasus uji pada semua subsoal, batasan runtime adalah 1 detik dan batasan memori adalah 16 MB. Batasan khusus untuk subsoal 1 (bernilai 20 poin): 1 <= N <= 50. Batasan khusus untuk subsoal 2 (bernilai 40 poin): 1 <= N <= 5000. Batasan khusus untuk subsoal 3 (bernilai 40 poin): 1 <= N <= 500000. Batasan lainnya untuk semua subsoal: -5000 <= Xi <= 5000, -5000 <= Yi <= 5000, dan tidak ada dua titik yang memiliki posisi yang sama. Setiap subsoal dapat memiliki lebih dari satu kasus uji. Untuk mendapatkan poin dari suatu subsoal, program Anda harus berhasil menjawab dengan benar semua kasus uji pada subsoal tersebut tanpa melanggar Halaman 2 batasan atau aturan. Bundel Soal Sesi 3 OSN X Bidang Informatika 2. Memasang Radar Cerita Pengantar Pak Dengklek kini mengambil pekerjaan sampingan sebagai teknisi di suatu stasiun televisi ternama. Dalam rangka ulang tahun stasiun televisi tersebut, festival pesawat mainan akan diadakan di halaman kantor yang dapat dianalogikan sebagai koordinat kartesius. Festival yang dimaksud terdiri dari N buah pesawat mainan berukuran mungil. Setiap pesawat memiliki warna yang berbeda sehingga nampak elok. Mula-mula, setiap pesawat dinomori dari 1 sampai dengan N dan diletakkan secara berurutan pada suatu garis start pada y=0. Lebih rincinya, pesawat pertama berada di koordinat (1, 0), pesawat kedua berada di (2, 0), dan seterusnya sampai pesawat terakhir berada di (N, 0). Kemudian, setiap pesawat akan diprogram untuk berangkat pada waktu tertentu dengan kecepatan tertentu. Arah semua pesawat adalah sama yakni mulai dari garis start menuju garis finish pada y=1000000. Pola penerbangan ini akan diulang-ulang selama satu hari penuh di halaman kantor. Untuk memastikan bahwa setiap pesawat masih hidup pada setiap putaran penerbangan (tidak hilang, tidak terbentur gedung, tidak kehabisan baterai, dll), beberapa radar akan diletakkan di halaman kantor. Radar tersebut dapat diletakkan di posisi manapun, bahkan pada koordinat yang tidak bulat (misalnya x=1.12 dan y=1.35) dan bertugas menerima laporan sinyal dari setiap pesawat. Radar yang telah dipasang di koordinat (a, b) akan dapat menerima sinyal dari semua pesawat yang melalui y=b. Dengan kata lain, jika pada suatu saat, suatu radar dan suatu pesawat berada pada satu garis horisontal, pesawat dapat mengirimkan sinyal kepada radar dan dengan demikian dinggap sudah melaporkan kondisinya. Tentunya hal ini hanya dapat dilakukan jika tidak ada halangan, misalnya pesawat lainnya, di antara mereka berdua. Harga radar canggih tersebut tentunya tidak murah, maka Pak Dengklek sebagai teknisi, diberikan tugas untuk merancang penempatan radar sedemikian sehingga sesedikit mungkin radar diperlukan. Halaman 3 Bundel Soal Sesi 3 OSN X Bidang Informatika Tugas Anda Anda akan diberikan informasi waktu keberangkatan dan kecepatan dari setiap pesawat. Bantulah Pak Dengklek untuk menentukan berapa minimal banyak radar yang perlu ditempatkan agar semua pesawat dapat melaporkan statusnya di tengah-tengah perjalanannya dari garis start ke garis finish. Format Masukan Format Keluaran Baris pertama berisi sebuah bilangan Sebuah baris berisi sebuah bilangan bulat bulat N. N baris berikutnya masing-masing yang menyatakan banyaknya radar yang berisi perlu ditempatkan Pak Dengklek. dua buah bilangan bulat Ti dan Vidipisahkan oleh sebuah spasi. Contoh Masukan 1 Contoh Masukan 2 Contoh Masukan 3 2 4 5 1 1 1 1 1 1 2 2 1 1 1 1 1 1 1 1 1 1 2 2 Contoh Keluaran 1 1 Contoh Keluaran 2 2 2 Contoh Keluaran 3 2 2 Penjelasan Contoh Pada contoh pertama, satu radar cukup karena kedua pesawat akan terbang di waktu yang berbeda. Pada contoh kedua, Pak Dengklek cukup memasang dua buah radar misalnya pada koordinat (1.5, 4) dan (3.5, 6). Pada contoh kedua, Pak Dengklek cukup memasang dua buah radar misalnya pada koordinat (1.5, 2.5) dan (4.5, 7). Halaman 4 Bundel Soal Sesi 3 OSN X Bidang Informatika Batasan dan Penilaian Terdapat 5 subsoal pada soal ini. Untuk setiap kasus uji pada semua subsoal, batasan runtime adalah 1 detik dan batasan memori adalah 16 MB. Batasan khusus untuk subsoal 1 (bernilai 15 poin): 1 ≤ N ≤ 10, semua pesawat berangkat pada waktu yang berbeda-beda dan memiliki kecepatan yang berbeda-beda. Batasan khusus untuk subsoal 2 (bernilai 15 poin): 1 ≤ N ≤ 10, semua pesawat berangkat pada waktu yang sama dan memiliki kecepatan yang sama. Batasan khusus untuk subsoal 3 (bernilai 40 poin): 1 ≤ N ≤ 10. Batasan khusus untuk subsoal 4 (bernilai 15 poin): 1 ≤ N ≤ 1000. Batasan khusus untuk subsoal 5 (bernilai 15 poin): 1 ≤ N ≤ 100000. Batasan lainnya untuk semua subsoal: 1 ≤ Ti ≤ 100000, 1 ≤ Vi ≤ 100000. Setiap subsoal dapat memiliki lebih dari satu kasus uji. Untuk mendapatkan poin dari suatu subsoal, program Anda harus berhasil menjawab dengan benar semua kasus uji pada subsoal tersebut tanpa melanggar batasan runtime, batasan memori, atau aturan dasar lainnya. Halaman 5 Bundel Soal Sesi 3 OSN X Bidang Informatika 3. Menentukan Strategi Cerita Pengantar Pak Dengklek kini mengambil pekerjaan sampingan di suatu stasiun televisi ternama. Mulamula ia menempati posisi teknisi, namun setelah beberapa lama ia menyadari bahwa posisi tersebut kurang cocok baginya. Maka ia pun berpindah posisi menjadi pembawa acara kuis di statiun televisi yang sama. Acara kuis yang Pak Dengklek bawakan berhubungan dengan tebak menebak hadiah pada kotak tertutup. Terdapat N kotak bernomor 1 sampai dengan N. Terdapat satu cek bernilai 1 milyar rupiah di dalam salah satu kotak tersebut. Peserta kuis diberikan M kesempatan membuka kotak. Pada setiap kesempatan tersebut, peserta dapat memilih tepat satu kotak di antara 1 sampai dengan N untuk dibuka. Jika pada saat itu, cek berada di kotak yang dibuka, maka peserta mendapatkan cek tersebut dan permainan selesai. Namun, Pak Dengklek yang cerdik, ingin melakukan trik agar peserta kuis tidak akan pernah mendapatkan cek tersebut. Untuk itu, Pak Dengklek meminta bantuan rekannya, seorang tukang sulap, untuk memprediksikan kotak-kotak yang akan dibuka oleh peserta kuis secara berurutan dari kesempatan pertama hingga kesempatan ke-M. Tugas Anda Anda akan diberikan informasi prediksi kotak-kotak yang akan dibuka oleh peserta kuis secara berurutan dari awal hingga akhir.. Bantulah Pak Dengklek untuk menentukan pergerakan cek dari awal hingga akhir, sedemikian rupa sehingga peserta tidak akan menemukan cek tersebut hingga akhir acara kuis.. Format Masukan menyatakan nomor kotak yang akan dibuka Baris pertama berisi dua buah bilangan oleh peserta secara berurutan. bulat dipisahkan spasi, N dan M. Baris kedua berisi M buah bilangan bulat yang Halaman 6 Bundel Soal Sesi 3 OSN X Format Keluaran “menyerah”. Jika sebaliknya, keluarkan Apabila tidak ada skenario yang memenuhi keinginan Pak Bidang Informatika Dengklek, keluarkan sebuah baris berisi M buah bilangan bulat yang menyatakan posisi cek setiap saat peserta akan menebak. Contoh Masukan 1 Contoh Masukan 2 2 2 3 3 1 1 1 3 Contoh Keluaran 1 2 menyerah Contoh Keluaran 2 3 2 1 Batasan dan Penilaian Terdapat 4 subsoal pada soal ini. Untuk setiap kasus uji pada semua subsoal, batasan runtime adalah 1 detik dan batasan memori adalah 16 MB. Batasan khusus untuk subsoal 1 (bernilai 20 poin): 1 <= N <= 3 dan 1 <= M <= 10. Batasan khusus untuk subsoal 2 (bernilai 20 poin): 1 <= N <= 10 dan 1 <= M <= 10. Batasan khusus untuk subsoal 3 (bernilai 40 poin): 1 <= N <= 2000 dan 1 <= M <= 1000. Batasan khusus untuk subsoal 4 (bernilai 20 poin): 2000 < N <= 200000 dan 1 <= M <= 1000. Batasan lainnya untuk semua subsoal: 5000 <= Xi, Yi <= -5000. Setiap subsoal dapat memiliki lebih dari satu kasus uji. Untuk mendapatkan poin dari suatu subsoal, program Anda harus berhasil menjawab dengan benar semua kasus uji pada subsoal tersebut tanpa melanggar batasan runtime, batasan memori, atau aturan dasar lainnya. Halaman 7 Bundel Soal Sesi 3 OSN X Bidang Informatika 4. Memilih Nama Cerita Pengantar Pak Dengklek kini mengambil pekerjaan sampingan di suatu stasiun televisi ternama. Tak disangka ternyata teman dekatnya bernama Steven juga bekerja di sana. Di sela-sela waktu istirahat makan siang, mereka sering berbincang-bincang. Suatu hari, Steven bercerita kepada Pak Dengklek mengenai Grace (istrinya) yang sedang mengandung buah hati pertama mereka. Yang lebih mernarik, Steven bercerita kepada Pak Dengklek mengenai betapa sulitnya memilih nama bayi. Steven menerima banyak masukan dari orang tuanya sendiri, dari orang tua istrinya, dan tentunya Steven dan Grace sendiri memiliki sederetan ide nama. Pak Dengklek yang memiliki sedikit latar belakang pendidikan di bidang informatika mengetahui betul bahwa dilema semacam ini dapat dibantu diselesaikan menggunakan program komputer. Tugas Anda Anda akan diberikan daftar berisi N ide nama bayi beserta kecocokannya untuk suatu gender tertentu, bantu Pak Dengklek dan Steven untuk menghitung berapa banyak nama bayi yang berada di antara string S1 dan S2. Lebih spesifiknya, suatu nama bayi dianggap berada di antara string S1 dan S2 jika nama tersebut berada tepat pada atau setelah S1 dan sebelum S2 berdasarkan pengurutan ala kamus. Format Masukan Baris pertama berisi sebuah bilangan bulat N. N baris berikutnya masing-masing berisi sebuah string yang merupakan suatu ide nama bayi, diikuti sebuah spasi, lalu sebuah karakter ‘1’ atau ‘2’. Karakter 1 menandakan bahwa nama tersebut cocok untuk bayi laki-laki sedangkan karakter 2 berarti perempuan. Baris berikutnya berisi sebuah bilangan bulat M. M baris berikutnya masing-masing berisi sebuah pertanyaan. Setiap pertanyaan dinyatakan dengan S1, S2, sebuah karakter antara ‘1’, ‘2’, atau ‘0’, masing-masing dipisahkan sebuah spasi. Pertanyaan tersebut berarti “Berapa banyak nama bayi yang berada di antara string S1 dan S2 yang cocok Halaman 8 Bundel Soal Sesi 3 OSN X Bidang Informatika untuk bayi (laki-laki jika karakter terakhir adalah ‘1’, perempuan jika karakter terakhir adalah ‘2’, bebas laki-laki atau perempuan jika karakter terakhir adalah ‘0’). Format Keluaran M baris, masing-masing berisi sebuah bilangan bulat yang menyatakan jawaban dari pertanyaan pada masukan secara berurutan. Contoh Masukan 1 Contoh Masukan 2 4 4 ROBERT 1 ROBERT 1 JANE 2 JANE 2 MARIA 2 MARIA 2 PETER 1 PETER 1 2 4 PET STE 1 JA PETA 0 PET STE 2 PET ROB 2 Contoh Keluaran 1 JANE MARIA 2 2 JANE MARIANA 2 0 Contoh Keluaran 2 2 1 1 2 Batasan dan Penilaian Terdapat 4 subsoal pada soal ini. Untuk setiap kasus uji pada semua subsoal, batasan runtime adalah 1 detik dan batasan memori adalah 16 MB. Batasan khusus untuk subsoal 1 (bernilai 20 poin): 1 <= M <= 10, 1 <= N <= 26, semua ide nama bayi memiliki karakter pertama yang berbeda, setiap pertanyaan memiliki S1 dan S2 yang hanya berisi 1 karakter, S2 adalah tepat satu karakter setelah S1. Halaman 9 Bundel Soal Sesi 3 OSN X Bidang Informatika Batasan khusus untuk subsoal 2 (bernilai 20 poin): 1 <= M <= 10, 1 <= N <= 26, semua ide nama bayi memiliki karakter pertama yang berbeda, setiap pertanyaan memiliki S1 dan S2 yang hanya berisi 1 karakter. Batasan khusus untuk subsoal 3 (bernilai 40 poin): 1 <= M, N <= 10000, selisih antara S1 dan S2 didesain minimalis (misalnya SA – STR, PE – PO, dll). Batasan khusus untuk subsoal 4 (bernilai 20 poin): 1 <= M, N <= 10000. Batasan lainnya untuk semua subsoal: S1 pasti muncul lebih awal daripada S2 berdasarkan pengurutan kamus. Setiap subsoal hanya memiliki satu kasus uji. Untuk mendapatkan poin dari suatu subsoal, program Anda harus berhasil menjawab dengan benar kasus penguji berkaitan dengan subsoal tersebut tanpa melanggar batasan runtime, batasan memori, atau aturan dasar lainnya. Halaman 10 Bundel Soal Sesi 3 OSN X Bidang Informatika Membongkar Sandi Cerita Pengantar Pak Dengklek kini mengambil pekerjaan sampingan di suatu stasiun televisi ternama. Tak disangka ternyata teman dekatnya bernama Steven juga bekerja di sana. Di sela-sela waktu istirahat makan siang, mereka sering berbincang-bincang. Suatu hari, Steven bercerita kepada Pak Dengklek mengenai Grace (istrinya) yang sedang mengandung buah hati pertama mereka. Steven bercerita kepada Pak Dengklek tentang bagaimana orang-orang di sekelilingnya turut berbahagia dan memberikan banyak usulan nama bayi. Steven telah menyimpan semua usulan nama bayi tersebut dalam sebuah berkas teks yang dilengkapi dengan sandi. Sayangnya, terbebani banyak pikiran tentang pekerjaan di kantor, Steven lupa akan sandi berkas teks di mana ia menyimpan semua usulan nama bayi yang telah ia terima. Untungnya, berkas teks tersebut dilengkapi dengan fitur pengingat sandi juga. Cara kerja dari fitur tersebut adalah dengan memberitahukan berapa banyak digit dari enam digit sandi yang sudah benar nilai dan posisinya. Tugas Anda Anda akan dipersilakan mencoba menebak sandi berkas teks Steven. Namun, tentunya dengan jumlah tebakan yang cukup sedikit karena buah hati Steven akan lahir dalam waktu dekat dan nama harus segera dipilih. Format Interaksi Setiap kali Anda ingin mencoba menebak sandi, keluarkan tanda tanya diikuti sebuah spasi lalu enam digit yang merupakan tebakan Anda. Segera setelah Anda mengeluarkan tebakan tersebut, Anda dapat membaca kembalian dari fitur pengingat sandi sebuah bilangan bulat yang menyatakan berapa banyak digit yang sudah benar nilai dan posisinya. Jika setelah beberapa kali mencoba menebak, Anda yakin akan sandi sesungguhnya, keluarkan tanda seru diikuti sebuah spasi lalu enam digit sandi. Halaman 11 Bundel Soal Sesi 3 OSN X Bidang Informatika Contoh Interaksi Program Anda Fitur Pengingat Sandi ? 000000 1 ? 000001 2 ? 000021 3 ? 010021 4 ? 012021 5 ! 012321 Penjelasan Contoh Jika Anda diberikan kesempatan untuk 5 kali bertanya dan sandi sebenarnya adalah 012321 maka Anda dianggap berhasil. Namun, jika sandi sebenarnya adalah 012221 maka Anda dianggap tidak berhasil. Untuk kasus lain, jika ternyata Anda hanya diberikan kesempatan untuk 4 kali bertanya, maka terlepas dari sandi sebenarnya apa, karena Anda mengeluarkan 5 pertanyaan, Anda dianggap tidak berhasil. Batasan dan Penilaian Terdapat 10 subsoal pada soal ini. Untuk setiap kasus uji pada semua subsoal, batasan runtime adalah 1 detik dan batasan memori adalah 16 MB. Batasan khusus untuk subsoal 1 (bernilai 30 poin): sandi hanya terdiri dari dua digit (bukan enam digit), maksimal pertanyaan adalah 100. Batasan khusus untuk subsoal 2 (bernilai 20 poin): maksimal pertanyaan adalah 50. Batasan khusus untuk subsoal 3 (bernilai 15 poin): maksimal pertanyaan adalah 25. Halaman 12 Bundel Soal Sesi 3 OSN X Bidang Informatika Batasan khusus untuk subsoal 4 sampai dengan subsoal 10 (masing-masing bernilai 5 poin): maksimal pertanyaan adalah 28-nomorsubsoal (misalnya jika nomor subsoal adalah 7 berarti maksimal pertanyaan adalah 21), Batasan lainnya untuk semua subsoal: tanda seru hanya dilakukan satu kali, setelah itu baik program Anda maupun fitur pengingaat password seharusnya berhenti. Setiap subsoal dapat memiliki lebih dari satu kasus uji. Untuk mendapatkan poin dari suatu subsoal, program Anda harus berhasil menjawab dengan benar semua kasus uji pada subsoal tersebut tanpa melanggar batasan runtime, batasan memori, atau aturan dasar lainnya. Halaman 13 Berkas Kompetisi Soal Hari 1 Olimpiade Sains Nasional XI Bidang Komputer/Informatika 2-7 September 2012, Jakarta www.tokilearning.org www.siswapsma.org Bundel Soal Hari 1 OSN XI Bidang Informatika SEGITIGA Batas Waktu 1 detik Batas Memori 64 MB Anda mungkin pernah mendengar soal ini. Diberikan sebuah segitiga angka-angka seperti di bawah ini: 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 Kemudian, Anda mulai dari angka paling atas, lalu secara bertahap turun ke bawah. Setiap kali turun, Anda hanya boleh turun ke salah satu dari dua angka yang langsung bersebelahan sisi dengan angka sebelumnya. Anda ingin mengunjungi angka-angka sedemikian sehingga totalnya adalah semaksimum mungkin. Banyak orang berpikir bahwa solusi optimal didapat dengan memilih bilangan yang lebih besar di antara dua bilangan yang mungkin pada setiap langkah (solusi greedy). Apabila kedua bilangan tersebut sama, ia memilih yang lebih kiri. Akan tetapi, solusi ini ternyata tidak selalu merupakan yang paling optimal. Tahukah Anda, membuat testcase soal tidak semudah yang Anda bayangkan. Oleh karena itu, problem setter ingin berbagi kesedihan dengan Anda. Pada soal ini, Anda diminta untuk membuat testcase soal segitiga tersebut sedemikian sehingga selisih dari solusi optimal dan solusi greedy adalah maksimum. Tentu saja, agar Anda lebih repot, bilangan-bilangan yang boleh Anda gunakan sudah diberikan (Anda harus menggunakan semua bilangan pada masukan masing-masing tepat sekali). Format Masukan Masukan diawali dengan sebuah baris berupa sebuah string dengan format "Kasus #X" (tanpa tanda kutip), di mana X adalah nomor subtask. Baris kedua masukan terdiri dari tepat sebuah bilangan bulat N, yang menyatakan tinggi segitiga. Baris ketiga berisi N * (N + 1) / 2 bilangan bulat yang masing-masing terpisah tepat sebuah spasi, yakni bilangan-bilangan yang harus Anda gunakan pada segitiga. Tentu bisa ada dua atau lebih bilangan yang sama. Halaman 1 Bundel Soal Hari 1 OSN XI Bidang Informatika Format Keluaran Baris ke-i pada keluaran berisi tepat i buah bilangan, tanpa diawali maupun diakhir spasi dan masing-masing angka bersebelahan terpisah tepat sebuah spasi, yang menyatakan baris ke-i dari segitiga pada solusi. Apabila ada lebih dari satu kemungkinan, keluarkan yang mana saja. Contoh Masukan 1 Contoh Masukan 2 Kasus #101 Kasus #102 3 3 1 2 3 4 5 6 1 1 1 1 1 1 Contoh Keluaran 1 Contoh Keluaran 2 3 1 5 4 1 1 2 1 6 1 1 1 Penjelasan Contoh Pada contoh masukan 1, perhatikan bahwa segitiga dibawah ini juga optimal. 5 4 3 2 1 6 Pada contoh kasus ini, solusi greedy menghasilkan jawaban 5 + 4 + 2 = 11, sedangkan solusi optimal menghasilkan jawaban 5 + 3 + 6 = 14. Selisih mereka adalah 14 - 11 = 3, dan tidak ada solusi lain yang lebih baik. Pada contoh kasus kedua, perhatikan bahwa seperti yang tertulis di deskripsi, apabila kedua bilangan yang tepat di bawah dan bersisian dengan bilangan yang dikunjungi sebelumnya adalah sama, maka solusi greedy akan memilih mengunjungi bilangan yang lebih kiri. Pada kasus ini, bilangan-bilangan yang dikunjungi pada solusi greedy adalah bilangan-bilangan paling kiri pada setiap baris. Pada solusi ini, solusi optimal dan solusi greedy sama-sama optimal sehingga memiliki selisih total bilangan 0. Halaman 2 Bundel Soal Hari 1 OSN XI Bidang Informatika Penjelasan Subsoal Subsoal 1 (15 poin) : download kasus uji Subsoal 2 (15 poin) : download kasus uji Subsoal 3 (15 poin) : bilangan-bilangan masukan pasti adalah N * (N + 1) / 2 bilangan asli pertama, yakni 1, 2, ..., N * (N + 1) / 2. Masukan tidak diberikan dalam urutan apapun (bisa acak). 1 ≤ N ≤ 300 Subsoal 4 (10 poin) : 1 ≤ N ≤ 4, bilangan-bilangan ada di antara 0 dan 1 milyar, inklusif. Subsoal 5 (15 poin) : 1 ≤ N ≤ 10, bilangan-bilangan ada di antara 0 dan 1 milyar, inklusif. Subsoal 6 (15 poin) : 1 ≤ N ≤ 40, bilangan-bilangan ada di antara 0 dan 1 milyar, inklusif. Subsoal 7 (15 poin) : 1 ≤ N ≤ 300, bilangan-bilangan ada di antara 0 dan 1 milyar, inklusif. Halaman 3 Bundel Soal Hari 1 OSN XI Bidang Informatika INVERSI MATRIKS Batas Waktu 1 detik Batas Memori 32 MB Diberikan sebuah matriks S yang berukuran N x N berisi 0 atau 1. Anda dapat melakukan sebuah inversi, sebagai berikut: 1. Pilihlah satu buah baris atau kolom. 2. Lakukan operasi XOR terhadap baris atau kolom tersebut dan matriks X. Matriks ini akan menjadi matriks S yang baru. Matriks X dijamin berukuran 1 x N (jika yang dipilih adalah baris) atau berukuran N × 1 (jika yang dipilih adalah kolom, dan matriks yang digunakan adalah XT atau X transpose). 0 1 Contoh, misalkan matriks 𝐒 = [1 0 1 0 1 1] dan matriks 𝐗 = [0 1 0 0 Jika anda memilih baris kedua, maka matriks 𝐒 akan menjadi [1 1 0 1] (maka X T = [1]). 1 1 1 1 0] 0 0 Jika anda memilih kolom pertama (sehingga operasi inversi akan dilakukan antara S dan XT),, 0 maka matriks 𝐒 akan menjadi [0 0 1 1 0 1] 0 0 Tugas anda adalah melakukan inversi sesedikit mungkin agar semua elemen pada matriks 𝐒 berisi 0. Outputkan berapa banyak inversi minimal yang dibutuhkan. Format Masukan Baris pertama berisi string "Kasus #X" dengan X menyatakan nomor kasus uji. Baris kedua berisi bilangan bulat N. Baris ketiga berisi N bilangan (0 atau 1) yang menyatakan matriks X. N baris berikutnya masing-masing berisi N bilangan (0 atau 1) yang menyatakan matriks S mula-mula. Format Keluaran Halaman 4 Bundel Soal Hari 1 OSN XI Bidang Informatika Satu baris berisi bilangan bulat yang menyatakan inversi minimal yang dibutuhkan agar matriks S berisi 0 saja. Jika anda tidak mungkin membuat matriks S berisi 0 saja, outputkan “-1” (tanpa tanda kutip). Contoh Masukan Contoh Keluaran Kasus #0 3 0 1 1 0 0 0 1 0 1 1 1 0 Penjelasan Matriks X pada contoh masukan sama dengan yang ada pada deskripsi soal. Langkah invers yang anda bisa lakukan: 0 0 [1 0 1 1 0 0 1] → [0 0 0 0 0 0 0 1] → [0 1 0 0 0 0 0 0 0 0] → [ 0 0 1 1 0 0 0 0] 0 Operasi logika XOR adalah operasi antara dua nilai kebenaran dan menghasilkan nilai true jika kedua nilai kebenaran tersebut tidak sama. Perhatikan tabel di bawah ini! A B A XOR B 0 (FALSE) 0 (FALSE) 0 (FALSE) 0 (FALSE) 1 (TRUE) 1 (TRUE) 1 (TRUE) 0 (FALSE) 1 (TRUE) 1 (TRUE) 1 (TRUE) 0 (FALSE) Jika A adalah matriks berukuran M × N dan B adalah AT (atau A transpose), maka B adalah matriks berukuran N × M dengan B[i,j] = A[j,i] untuk i ≤ N dan j ≤ M (B[i,j] adalah elemen pada matriks B pada baris ke-i dan kolom ke-j). Penjelasan Subsoal Subsoal 1 (10 poin) : download kasus uji Subsoal 2 (10 poin) : download kasus uji Halaman 5 Bundel Soal Hari 1 OSN XI Bidang Informatika Subsoal 3 (7 poin) :1≤N≤5 Subsoal 4 (10 poin) : 1 ≤ N ≤ 15 Subsoal 5 (7 poin) : 1 ≤ N ≤ 100, semua elemen pada matriks X berisi 1. Subsoal 6 (20 poin) : 1 ≤ N ≤ 100 Subsoal 7 (36 poin) : 1 ≤ N ≤ 1000 Halaman 6 Bundel Soal Hari 1 OSN XI Bidang Informatika SUNGAI BINER Batas Waktu 1 detik Batas Memori 64 MB Di peternakan Pak Dengklek terdapat sungai yang mengalir. Pada sungai itu terdapat pula batu-batu. Setelah diamati, sungai tersebut beserta batu-batunya dari ujung awal ke ujung akhirnya membentuk barisan biner dari 1 hingga 260-1 dengan lebar 60 bit, di mana bit 1 merupakan batu dan bit 0 merupakan air. Untuk memudahkan, kita anggap sungai ini sebagai matriks dengan 260-1 baris dan 60 kolom sehingga baris ke-i pada matriks ini merupakan representasi biner dari bilangan i dan kolom ke-j pada matriks ini adalah kolom ke-j dari paling kiri. Untuk lebih jelasnya, perhatikan ilustrasi berikut ini. 1 2 3 4 5 6 123456789012345678901234567890123456789012345678901234567890 1 000000000000000000000000000000000000000000000000000000000001 2 000000000000000000000000000000000000000000000000000000000010 3 000000000000000000000000000000000000000000000000000000000011 4 000000000000000000000000000000000000000000000000000000000100 5 000000000000000000000000000000000000000000000000000000000101 ... NyanCoder, kucing Pak Dengklek yang nakal, ingin mengunjungi semua batu yang ada di antara baris ke-r1 hingga baris ke-r2 dan antara kolom ke-c1 hingga kolom ke-c2 dari matriks sungai tersebut. Setiap batu harus dikunjungi setidaknya sekali, dan tentu boleh beberapa kali. Tentu saja, ia tidak bisa berpijak di atas air karena ia takut dengan air. Selain itu, ia tidak boleh berpijak di batu-batu lain selain yang ada di antara baris ke-r1 hingga baris ke-r2 dan antara kolom ke-c1 hingga kolom ke-c2. NyanCoder tidak perlu melompat ketika berpindah dari suatu batu ke batu lain yang bersisian dengannya baik di utara, selatan, timur, maupun barat. Pada ilustrasi matriks di atas, atas menunjukkan arah utara. Akan tetapi, ia akan melompat tepat satu kali ketika berpindah ke batu lain manapun yang tidak bersisian dengan batu yang sedang ia pijak. Perlu diketahui bahwa NyanCoder sangat atletis dan bisa melompat sejauh apapun. Di awal, NyanCoder berada pada tepi sungai di sebelah kanan matriks tersebut. Pada mulanya, ia harus melompat sekali menuju salah satu batu terlebih dahulu. Hitunglah banyak lompatan minimum yang dibutuhkan NyanCoder untuk dapat mengunjungi semua batu. Halaman 7 Bundel Soal Hari 1 OSN XI Bidang Informatika Format Masukan Baris pertama berisi string "Kasus #X" (tanpa tanda kutip) dengan X menyatakan nomor kasus uji. Baris kedua terdiri dari tepat empat buah bilangan bulat r1, c1, r2, dan c2 sesuai deskripsi soal, di mana masing-masing bilangan bersebelahan terpisah tepat sebuah spasi. Format Keluaran Keluaran terdiri dari tepat sebuah baris berisi sebuah bilangan bulat yang merupakan banyak loncatan minimum yang dibutuhkan NyanCoder untuk mengunjungi semua batu pada sungai itu setidaknya sekali. Contoh Masukan Kasus #0 167 50 174 59 Contoh Keluaran 5 Penjelasan Contoh Untuk contoh masukan, perhatikan ilustrasi di bawah ini yang menunjukkan bagian matriks antara baris r1 hingga baris r2 dan kolom c1 hingga kolom c2. 50 51 52 53 54 55 56 57 58 59 167 0 0 0 1 0 1 0 0 1 1 168 0 0 0 1 0 1 0 1 0 0 169 0 0 0 1 0 1 0 1 0 0 170 0 0 0 1 0 1 0 1 0 1 171 0 0 0 1 0 1 0 1 0 1 172 0 0 0 1 0 1 0 1 1 0 173 0 0 0 1 0 1 0 1 1 0 174 0 0 0 1 0 1 0 1 1 1 Salah cara melompat untuk mendapatkan banyak lompatan minimum adalah sebagai berikut. Halaman 8 Bundel Soal Hari 1 OSN XI Bidang Informatika Pertama-tama, lompat ke batu di pojok kanan atas matriks di atas (terkanan pada baris 167). Kemudian, telusuri semua batu yang bisa ditelusuri tanpa melompat (semua batu berwarna merah). Lalu lompat untuk kedua kalinya ke batu pada baris 170 dan kolom 59 (semua batu berwarna oranye). Kemudian lompat ketiga kalinya ke batu pada baris 174 dan kolom 59 lalu telusuri semua batu yang bisa ia telusuri tanpa melompat (semua batu berwarna ungu). Lalu lompat keempat kalinya ke salah satu batu pada kolom ke-55 dan telusuri semua batu yang bisa ia telusuri tanpa melompat (semua batu berwarna biru). Terakhir, lompat untuk kelima kalinya ke salah satu batu pada kolom 53 dan telusuri semua batu yang tersisa tanpa melompat (semua batu berwarna hijau). Penjelasan Subsoal Subsoal 1 (15 poin): download kasus uji Subsoal 2 (15 poin): download kasus uji Subsoal 3 (10 poin): 1 ≤ r1 ≤ r2 ≤ 100, c1 = 1, dan c2 = 60. Subsoal 4 (10 poin): r1 = 1, 1 ≤ r2 ≤ 260-1, c1 = 1, dan c2 = 60. Subsoal 5 (10 poin): r1 = 1, 1 ≤ r2 ≤ 260-1, 1 ≤ c1 ≤ 60, dan c2 = 60. Subsoal 6 (10 poin): r1 = 1, 1 ≤ r2 ≤ 260-1, c1 = 1, dan 1 ≤ c2 ≤ 60. Subsoal 7 (10 poin): r1 = 1, 1 ≤ r2 ≤ 260-1, dan 1 ≤ c1 ≤ c2 ≤ 60. Subsoal 8 (10 poin): 1 ≤ r1 ≤ r2 ≤ 260-1, c1 = 1, dan c2 = 60. Subsoal 9 (10 poin): 1 ≤ r1 ≤ r2 ≤ 260-1, dan 1 ≤ c1 ≤ c2 ≤ 60. Halaman 9 Bundel Soal Hari 1 OSN XI Bidang Informatika MALING Batas Waktu 1 detik Batas Memori 32 MB “Maliiiiing!!!!!” terdengar suara dari kamar paling atas di Hotel Dengklek. Pencurinya diketahui kabur melalui jendela di kamar tersebut. Hotel Dengklek memang unik, di mana terdapat semacam perosotan di luar jendela kamar sebagai jalan keluar darurat jika terjadi kebakaran. Sayangnya kali ini, perosotan tersebut malah dipakai oleh pencuri untuk kabur. Perosotan darurat tersebut terdiri dari segmen-segmen lurus. Tiap segmen akan selalu miring (tidak akan ada segmen yang tepat mendatar atau tepat vertikal). Jika Anda berada di tengah suatu segmen, Anda akan otomatis merosot ke arah yang lebih rendah. Segmensegmen tersebut juga tidak selalu berhubungan, dan jika Anda berada di ujung segmen, Anda akan jatuh ke bawah hingga mengenai segmen yang lebih bawah, atau hingga Anda mencapai tanah, manapun yang lebih dulu terjadi. Dalam ilustrasi di atas, segmen perosotan diwarnai biru, sementara warna merah menunjukkan rute meluncurnya maling dari jendela kamar (titik A) hingga mencapai tanah. Saat maling kabur dari jendela di titik A, ia terjatuh hingga mendarat di segmen perosotan di titik B. Maling tersebut meluncur ke arah yang lebih rendah hingga ujung segmen di titik C. Dari situ, ia terjatuh hingga mendarat di segmen berikutnya di titik D. Hal ini terus terjadi hingga maling menyentuh tanah (ditandai dengan koordinat y = 0). Perlu diperhatikan Halaman 10 Bundel Soal Hari 1 OSN XI Bidang Informatika bahwa saat maling terjatuh dari titik E, ia terjatuh langsung ke titik F walaupun ia menyentuh dua segmen di bawahnya. Ini disebabkan karena ia hanya menyentuh ujung dari segmen-segmen tersebut dan bukan mendarat di tengah-tengah segmen. Nah, persoalannya tidak selesai di situ. Mendengar teriakan tadi, N orang polisi bergegas mengejar maling tersebut. Namun, karena reaksi mereka agak lambat, mereka baru mulai mengejar maling T detik setelah maling melompat dari jendela kamar. Lalu, N orang polisi tersebut juga mulai mengejar dari jendela yang berbeda-beda (tetapi tidak menutup kemungkinan mereka mulai dari jendela yang sama). Baik maling maupun polisi akan merosot atau terjatuh dengan kecepatan V unit/detik. Untuk mempermudah, dianggap kecepatan terjatuh adalah tetap dan tidak dipengaruhi oleh efek gravitasi atau gesekan. Karena polisi dan maling dapat mulai dari jendela yang berbeda-beda, mereka dapat mencapai tanah pada lokasi yang berbeda-beda pula. Begitu polisi mencapai tanah, ia dapat berlari dengan kecepatan R petak/detik. Berapa kecepatan lari maling minimal sehingga ia tidak tertangkap oleh polisi? Untuk soal ini, definisi tertangkap adalah jika maling bertemu dengan polisi di lokasi yang sama setelah maling mencapai tanah (polisi tidak dapat menangkap maling saat mereka masih merosot/terjatuh). Ingat, maling dapat kabur baik ke arah kanan (sumbu x positif) maupun kiri (sumbu x negatif). Format Masukan Baris pertama berisi string "Kasus #X" (tanpa tanda kutip) dengan X menyatakan nomor kasus uji. Baris kedua berisi bilangan-bilangan S, N, T, R, dan V (0 ≤ S, T ≤ 1000, 0 ≤ N ≤ 20, 0 < R, V ≤ 1000), masing-masing dipisahkan spasi. Nilai S adalah jumlah segmen perosotan yang ada di Hotel Dengklek. Nilai S dan N akan selalu berupa bilangan bulat. Baris ketiga berisi dua buah bilangan bulat X0 dan Y0 yang merupakan koordinat jendela tempat maling kabur. N baris berikutnya masing-masing berisi dua buah bilangan bulat Xi dan Yi yang merupakan koordinat jendela tempat polisi ke-i mulai mengejar. S baris berikutnya masing-masing berisi empat buah bilangan bulat A, B, C, D yang menyatakan segmen perosotan dengan ujung di koordinat (A, B) dan (C, D). Setiap segmen akan mempunyai panjang positif. Tidak ada dua segmen yang ujung-ujungnya bersentuhan, dan juga tidak ada dua segmen yang bersinggungan atau menyilang. Tidak ada ujung segmen yang menyentuh tanah. Semua nilai koordinat di masukan akan berupa bilangan bulat non-negatif yang tidak lebih dari 1000. Halaman 11 Bundel Soal Hari 1 OSN XI Bidang Informatika Format Keluaran Baris pertama berisi bilangan P yang merupakan koordinat sumbu x dari tempat maling menjejak tanah pertama kali (koordinat sumbu y nya tentu saja 0). Isi baris kedua tergantung apakah maling bisa kabur dari kejaran polisi atau tidak. Jika maling mungkin dapat kabur dari kejaran polisi, tuliskan “KABUR” (tanpa tanda kutip) diikuti dengan kecepatan minimum lari maling dipisahkan dengan sebuah spasi. Jika maling tidak mungkin kabur dari kejaran polisi, tuliskan “TERTANGKAP” (tanpa tanda kutip). Contoh Masukan Kasus #0 5 2 7.0 2.0 1.0 3 10 3 5 7 5 4 2 8 1 2 2 4 3 7 7 4 4 2 7 5 6 4 8 1 9 Contoh Keluaran 4 KABUR 2.62363215 Penjelasan Contoh di atas adalah sesuai dengan ilustrasi yang digambarkan (lokasi polisi tidak ada di ilustrasi). Perbedaan perhitungan absolut di bawah 10-6 akan diterima. Penjelasan Subsoal Subsoal 1 (15 poin) : download kasus uji. Halaman 12 Bundel Soal Hari 1 OSN XI Bidang Informatika Subsoal 2 (15 poin) : download kasus uji. Subsoal 3 (20 poin) : Semua masukan (S, N, T, R, V, Xi, Yi) dan keluaran dijamin bilangan bulat. Subsoal 4 (20 poin) : Semua masukan (S, N, T, R, V, Xi, Yi) dan keluaran dijamin bilangan bulat. Subsoal 5 (30 poin) : Masukan T, R, V dan angka dapat berupa bilangan pecahan Halaman 13 Berkas Kompetisi Soal Hari 2 Olimpiade Sains Nasional XI Bidang Komputer/Informatika 2-7 September 2012, Jakarta www.tokilearning.org www.siswapsma.org Bundel Soal Hari 2 OSN XI Bidang Informatika BARISAN BILANGAN Batas Waktu 1 detik Batas Memori 32 MB Diberikan sebuah barisan bilangan yang terdiri dari N buah bilangan bulat: a1, a2, ..., aN. Sebanyak tepat K kali, Pak Dengklek akan mengambil dua bilangan bersebelahan, menghapus mereka, kemudian mengganti keduanya dengan bilangan baru yang merupakan hasil penjumlahan kedua bilangan tersebut. Sebagai contoh, pada barisan bilangan 1, 2, 3, 4, 5, Pak Dengklek dapat mengambil bilangan bulat ke-2 dan 3 dan menggantinya menjadi: 1, 5, 4, 5. Bantulah Pak Dengklek agar barisan bilangan yang dihasilkan memiliki selisih nilai maksimum dan nilai minimum sekecil mungkin! Format Masukan Baris pertama berisi string "Kasus #X" (tanpa tanda kutip) dengan X menyatakan nomor kasus uji. Baris kedua terdiri dari tepat dua buah bilangan N dan K yang dipisahkan sebuah spasi. Baris ketiga dan sekaligus baris terakhir masukan terdiri dari N buah bilangan bulat yang masing-masing terpisah tepat sebuah spasi yang menyatakan barisan Pak Dengklek, sesuai urutannya. Format Keluaran Baris pertama dan satu-satunya keluaran berisi selisih terkecil yang mungkin dari maksimum dan minimum. Contoh Masukan Kasus #101 6 3 5 1 1 1 3 2 Halaman 1 Bundel Soal Hari 2 OSN XI Bidang Informatika Contoh Keluaran 2 Penjelasan Contoh Pada contoh di atas, solusi optimal didapat sebagai berikut: Gabungkan bilangan kedua dan ketiga menjadi: 5 2 1 3 2. Gabungkan bilangan kedua dan ketiga menjadi: 5 3 3 2. Gabungkan kedua bilangan terakhir menjadi: 5 3 5. Nilai maksimumnya adalah 5, nilai minimumnya adalah 3, dan selisihnya adalah 2. Sehingga keluaran untuk masukan ini adalah 2. Penjelasan Subsoal Subsoal 1 (X poin): download kasus uji Subsoal 2 (X poin): download kasus uji Subsoal 3 (X poin): 1 ≤ K < N ≤ 10, K ≤ 5, 1 ≤ ai ≤ 106. Subsoal 4 (X poin): 1 ≤ K < N ≤ 20, 1 ≤ ai ≤ 106. Subsoal 5 (X poin): 1 ≤ K < N ≤ 40, 1 ≤ ai ≤ 2. Subsoal 6 (X poin): 1 ≤ K < N ≤ 40, 1 ≤ ai ≤ 106. Halaman 2 Bundel Soal Hari 2 OSN XI Bidang Informatika BATAS NILAI Batas Waktu 1 detik Batas Memori 64 MB Pada sebuah olimpiade, panitia ingin memilih N dari M peserta tingkat provinsi untuk berpartisipasi di tingkat nasional. Terdapat Q provinsi di negara tersebut, dinomori dari 1 hingga Q. Misalkan K adalah maksimal banyak peserta tingkat nasional yang berasal dari suatu provinsi. Koordinator olimpiade ini, Pak Dengklek, ingin memilih K buah bilangan bulat a1, a2, ..., aK sebagai passing grade sedemikian sehingga: 1. Seluruh peserta dengan peringkat provinsi i, akan lolos jika dan hanya jika nilainya tidak kurang dari ai. 2. Apabila pada provinsi X peserta dengan peringkat i lolos, maka semua peserta dengan peringkat j < i harus lolos. Dengan kata lain, apabila nilai peserta dengan peringkat i tidak kurang dari ai, nilai peserta dengan peringkat j < i tidak boleh kurang dari aj. 3. Untuk memastikan kualitas, passing grade juga harus dipilih sedemikian sehingga T peserta terbaik secara nasional lolos. 4. Banyak peserta yang lolos ke tingkat nasional tepat N. Tidak kurang, tidak lebih. Dan tentu saja, N peserta ini belum tentu merupakan N peserta terbaik secara nasional (perhatikan kriteria lain untuk pemilihan passing grade). 5. Selisih antara banyak peserta yang lolos di provinsi yang memiliki peserta lolos terbanyak dengan banyak peserta yang lolos di provinsi yang memiliki peserta lolos tersedikit harus sekecil mungkin. Tentu saja, peserta yang mendapatkan peringkat lebih tinggi (peringkat dengan bilangan lebih kecil) adalah peserta dengan nilai lebih besar. Bantulah panitia olimpiade tersebut untuk menentukan passing grade yang memenuhi semua batasan di atas. Format Masukan Baris pertama berisi string "Kasus #X" (tanpa tanda kutip) dengan X menyatakan nomor kasus uji. Halaman 3 Bundel Soal Hari 2 OSN XI Bidang Informatika Baris kedua berisi empat buah bilangan bulat dipisahkan spasi N, M, Q, dan T (T ≤ N ≤ M) sesuai deskripsi soal. Baris ke-i dari M baris berikutnya berisi dua buah bilangan bulat dipisahkan spasi, Si (0 ≤ Si ≤ 100000) dan Pi (1 ≤ Pi ≤ Q) yang masing-masing menyatakan nilai peserta ke-i dan provinsi asal peserta tersebut. Dipastikan tidak ada dua peserta yang memiliki nilai yang persis sama. Selain itu, masingmasing provinsi pasti memiliki setidaknya seorang peserta. Format Keluaran Sebanyak K buah bilangan bulat pada sebuah baris yang masing-masing dipisahkan tepat sebuah spasi, yang merupakan a1, a2, ..., aK secara berturut-turut. Masing-masing ai harus berada di antara 0 dan 100001, inklusif. Apabila ada lebih dari satu kemungkinan keluaran, keluarkan yang mana saja. Contoh Masukan Kasus #0 6 8 3 5 30 2 70 1 50 1 60 3 80 3 10 1 40 3 20 2 Contoh Keluaran 30 25 30 Halaman 4 Bundel Soal Hari 2 OSN XI Bidang Informatika Penjelasan Perhatikan bahwa data pada contoh kasus di atas sama dengan data di bawah ini. Provinsi 1: 70, 50, 10 Provinsi 2: 30, 20 Provinsi 3: 80, 60, 40 Angka yang dicetak tebal adalah nilai peserta yang masuk T terbaik secara nasional. Untuk masing-masing provinsi, nilai diurutkan berdasarkan peringkat, dari peringkat 1, 2, 3, hingga seterusnya. Pada contoh di atas, K = 3, yakni banyaknya peserta pada provinsi 1 ataupun 3. Pada solusi contoh masukan, karena a1 = 30, maka peringkat pertama di semua provinsi lolos. Karena a2 = 25, hanya peringkat 2 pada provinsi 2 dan provinsi 3 yang lolos. Karena a3 = 30, hanya peringkat 3 pada provinsi 3 yang lolos. Perhatikan bahwa solusi ini memenuhi semua ketentuan soal. Selisih antara banyak peserta yang lolos di provinsi yang memiliki peserta lolos terbanyak (provinsi 3, yang memiliki 3 peserta lolos) dengan banyak peserta yang lolos di provinsi yang memiliki peserta lolos tersedikit (provinsi 2, yang hanya memiliki 1 peserta lolos) adalah 3 - 1 = 2, yakni nilai terkecil yang mungkin. Penjelasan Subsoal Subsoal 1 (10 poin): download kasus uji. Subsoal 2 (10 poin): download kasus uji. Subsoal 3 (15 poin): 1 ≤ N ≤ M ≤ 100, 1 ≤ Q ≤ 100, T = 0. Subsoal 4 (15 poin): 1 ≤ T ≤ N ≤ M ≤ 50, 1 ≤ Q ≤ 5, 1 ≤ K ≤ min(10, M). Subsoal 5 (15 poin): 1 ≤ T ≤ N ≤ M ≤ 100, 1 ≤ Q ≤ 100, 1 ≤ K ≤ M. Subsoal 6 (35 poin): 1 ≤ T ≤ N ≤ M ≤ 10000, 1 ≤ Q ≤ 100, 1 ≤ K ≤ M. Halaman 5 Bundel Soal Hari 2 OSN XI Bidang Informatika MENGGAMBAR Batas Waktu Interaktif (1 detik) Batas Memori 16 MB Pak Dengklek sedang belajar menggambar bersama M ekor bebeknya. Gambar Pak Dengklek sangatlah unik, dia menggambar menggunakan titik pada bidang N x N (dimana N adalah kelipatan pangkat 2 [2y = N, y bil bulat positif], N ≤ 256). Warna pada gambar Pak Dengklek hanya ada 2 (angka 0 dan angka 1). Pak Dengklek menggambar dengan salah satu dari tiga cara sebagai berikut: 1. Mewarnai seluruh bidang gambar dengan 0. 2. Mewarnai seluruh bidang gambar dengan 1. 3. Membagi menjadi empat bagian gambar sama luas, dimana satu bagian diwarnai dengan 0, satu bagian lagi diwarnai dengan 1, dan kedua bagian sisanya dianggap sebagai bidang baru untuk digambar. Catatan: langkah no.3 hanya berlaku untuk bagian dengan jumlah titik lebih dari 1 Karena para bebek tidak mengetahui gambar Pak Dengklek, mereka berusaha menebak gambar aslinya. Untuk setiap tebakan Pak Dengklek akan memberitahu banyak titik dengan warna yang berbeda. Karena menggambar sangatlah melelahkan, maka seekor bebek hanya bisa menggambar 1 kali saja. Bantulah para bebek mengatur strategi untuk menebak gambar yang dibuat Pak Dengklek. Format Interaksi Pada awalnya grader memberikan nilai N. Untuk setiap jawaban yang diberikan, grader akan mengeluarkan selisihnya. Jika program anda menebak lebih dari jumlah bebek, program akan langsung diberhentikan. Halaman 6 Bundel Soal Hari 2 OSN XI Contoh Interaksi Penjelasan Subsoal Subsoal 1..3: [masing-masing 7 poin] 1 ≤ N ≤ 8 M = 1000000 <subsoal 1>, <subsoal 2>, <subsoal 3> Subsoal 4: [15 poin] 1 ≤ N ≤ 8 M = 7000 Subsoal 5: [15 poin] 1 ≤ N ≤ 256 M = 70000 Halaman 7 Bidang Informatika Bundel Soal Hari 2 OSN XI Bidang Informatika Subsoal 6: [24 poin] 1 ≤ N ≤ 256 M = 4100 Subsoal 7: [25 poin] 1 ≤ N ≤ 256 M = 1100 Peringatan Jika program anda menebak lebih dari M kali, program anda akan langsung dihentikan Halaman 8 Bundel Soal Hari 2 OSN XI Bidang Informatika MEMBACA Batas Waktu 1 detik Batas Memori 32 MB Pak Dengklek sedang mengajarkan bebeknya membaca huruf-huruf. Begitu cintanya Pak Dengklek akan Tim Olimpiade Komputer Indonesia, huruf-huruf pertama yang ia ajarkan pada bebeknya adalah T, O, K, dan I. Walau tampak mudah, bebek Pak Dengklek mengalami kesulitan untuk memahami beberapa bentuk yang serupa tapi tak sama yang menyatakan suatu huruf yang sama. Sebagai contoh, beberapa bentuk yang serupa tapi tak sama berikut ini sama-sama menyatakan “TOKI”. Pada persoalan ini, satu huruf dinyatakan oleh satu matriks berukuran N x N. Masing-masing sel pada matriks bernilai 1 atau 0. Setiap sel bernilai 1 adalah bagian dari huruf yang bersangkutan, sedangkan setiap sel bernilai 0 adalah background atau latar dimana huruf dituliskan. Sebagai contoh, matriks berukuran 10 x 10 berikut ini menyatakan huruf T. 1111111111 1111111111 0000110000 0000110000 0000110000 0000110000 0000110000 0000110000 0000110000 0000110000 Jika setiap sel pada matriks diubah menjadi piksel pada gambar, maka gambar berikut ekuivalen dengan matriks di atas. Bantulah bebek Pak Dengklek mengenali huruf T, O, K, dan I dengan membaca matriks seperti yang dijelaskan di atas dan menebak huruf yang dinyatakan. Untuk setiap kasus, dijamin bahwa: Huruf T pada dasarnya terdiri dari satu garis vertikal dan satu garis horizontal pada bagian paling atas, Huruf O pada dasarnya terdiri dari titik-titik yang membentuk satu garis melingkar, Halaman 9 Bundel Soal Hari 2 OSN XI Bidang Informatika Huruf K pada dasarnya terdiri dari satu garis vertikal, satu garis diagonal dari tengah garis vertikal ke kanan atas, satu garis diagonal dari tengah garis vertikal ke kanan bawah, Huruf I pada dasarnya terdiri dari satu garis vertikal saja, Matriks pada masukan selalu menyatakan suatu huruf di antara T, O, K, atau I (tidak mungkin menyatakan huruf lain atau tidak menyatakan suatu huruf apapun sama sekali), Dengan definisi a adalah indeks baris paling atas yang memiliki digit 1, b adalah indeks baris paling bawah yang memiliki digit 1, c adalah indeks kolom paling kiri yang memiliki digit 1, d adalah indeks baris paling kanan yang memiliki digit 1, (abs(a-b)*abs(c-d))/(N*N) ≥ 25%, Jika setiap sel pada matriks diubah menjadi piksel pada gambar, maka gambar yang ekuivalen dengan matriks tersebut akan dapat dikenali dengan mudah oleh manusia. Format Masukan Baris pertama berisi string "Kasus #X" (tanpa tanda kutip) dengan X menyatakan nomor kasus uji. Baris kedua berisi sebuah bilangan bulat N (20 ≤ N ≤ 200) yang menyatakan ukuran dari matriks. N baris berikutnya masing-masing berisi karakter ‘1’ atau ‘0’ (tanpa tanda kutip). Format Keluaran Sebuah karakter, salah satu di antara ‘T’, ‘O’, ‘K’, ‘I’ (tanpa tanda kutip). Halaman 10 Bundel Soal Hari 2 OSN XI Contoh Masukan Kasus #0 20 00111111111111111100 01111111111111111110 11100000000000000111 11000000000000000011 11000000000000000011 11000000000000000011 11000000000000000011 11000000000000000011 11000000000000000011 11000000000000000011 11000000000000000011 11000000000000000011 11000000000000000011 11000000000000000011 11000000000000000011 11000000000000000011 11000000000000000011 11100000000000000111 01111111111111111110 00111111111111111100 Contoh Keluaran O Halaman 11 Bidang Informatika Bundel Soal Hari 2 OSN XI Bidang Informatika Penjelasan Subsoal Subsoal 1 (18 poin) : download kasus uji. Subsoal 2 (19 poin) : Seluruh sel bernilai 1 membentuk suatu bentuk tanpa potongan. Ada sel bernilai 1 pada baris pertama, baris terakhir, kolom pertama, dan kolom terakhir. Subsoal 3 (20 poin) : Seluruh sel bernilai 1 membentuk suatu bentuk tanpa potongan. Subsoal 4 (21 poin) : Ada sel bernilai 1 pada baris pertama, baris terakhir, kolom pertama, dan kolom terakhir. Subsoal 5 (22 poin) : Tidak ada tambahan batasan selain yang dijelaskan di atas. Halaman 12 Hak Cipta Dilindungi Undang-undang SOAL UJIAN OLIMPIADE SAINS NASIONAL 2013 CALON PESERTA INTERNATIONAL OLYMPIAD IN INFORMATICS (IOI) 2014 HARI KE-1 INFORMATIKA Waktu : 5 jam KEMENTERIAN PENDIDIKAN DAN KEBUDAYAAN DIREKTORAT JENDERAL PENDIDIKAN MENENGAH DIREKTORAT PEMBINAAN SEKOLAH MENENGAH ATAS TAHUN 2013 Tebak Himpunan Batas Waktu 1 detik Batas Memori 32 MB Deskripsi Pak Dengklek kini sudah pensiun dan memiliki banyak cucu. Untuk mengisi waktu luangnya, Pak Dengklek sering membuat permainan yang bisa dimainkan saat cucu-cucunya datang. Saat liburan sekolah, cucu kesayangan Pak Dengklek berlibur ke rumahnya. Ternyata, ia telah menyiapkan permainan baru untuk cucu kesayangannya tersebut! Permainannya adalah sebagai berikut. Pak Dengklek mengumumkan sebuah bilangan bulat positif N. Setelah itu, ia memilih subhimpunan S dari {1, 2, ..., N}. Tugas sang cucu adalah menebak S dengan paling banyak Q buah tebakan kepada Pak Dengklek. Setiap tebakan berupa sebuah subhimpunan T dari {1, 2, ..., N} yang harus memiliki setidaknya K anggota. Untuk setiap tebakan, Pak Dengklek akan menjawab salah satu dari ketiga jawaban berikut: YA, apabila S sama persis dengan T. BISA JADI, apabila S tidak sama dengan T namun ada minimal satu anggota S yang juga merupakan anggota T. TIDAK, apabila tidak ada satupun anggota S yang juga merupakan anggota T. Sebagai contoh, apabila N = 10, S = {2, 3, 5, 7}, dan K = 2: Jika T = {2, 3, 5, 7}, maka Pak Dengklek menjawab YA. Jika T = {2, 3, 7}, maka Pak Dengklek menjawab BISA JADI. Jika T = {1, 2, 3, 5, 7}, maka Pak Dengklek menjawab BISA JADI. Jika T = {2, 8}, maka Pak Dengklek menjawab BISA JADI. Jika T = {1, 8, 9}, maka Pak Dengklek menjawab TIDAK. Jika T = {4, 10}, maka Pak Dengklek menjawab TIDAK. T = {5} tidak diperbolehkan karena banyak anggotanya kurang dari K. Sekarang, Anda diminta membuat sebuah program interaktif yang dapat membantu cucu Pak Dengklek memenangkan permainan ini. Format Interaksi Awalnya, program Anda harus membaca sebuah baris berisi string "Subsoal X", dengan X adalah nomor subsoal. Kemudian, program Anda harus membaca tiga buah bilangan bulat N, K, dan Q, dipisahkan oleh spasi. Setelah itu, program Anda dapat mengeluarkan paling banyak Q buah tebakan dalam format: M T1 T2 T3 ... TM yakni, sebuah bilangan bulat M diikuti dengan M buah bilangan bulat dipisahkan spasi, yang berarti Anda memberi tebakan T = {T1, T2, ... TM}, dengan syarat: K≤M≤N T1 < T2 < ... < TM Setiap kali program Anda selesai mengeluarkan tebakan, program Anda membaca sebuah 1 string yang mendeskripsikan jawaban Pak Dengklek. String tersebut dijamin selalu merupakan salah satu dari: "ya", artinya Pak Dengklek menjawab YA. Anda langsung dianggap benar dalam kasus uji yang bersangkutan dan program Anda tidak perlu melakukan apa-apa lagi. "bisajadi", artinya Pak Dengklek menjawab BISA JADI. "tidak", artinya Pak Dengklek menjawab TIDAK. Pastikan program Anda berhenti melakukan interaksi setelah menerima jawaban "ya". Contoh Interaksi Berikut adalah contoh interaksi program, dengan subhimpunan S yang dimiliki grader adalah S = {2, 5, 6}. Keluaran Program Peserta Umpan Balik Grader Subsoal 0 7 3 10 3 1 2 6 bisajadi 4 1 3 4 7 tidak 7 1 2 3 4 5 6 7 bisajadi 3 2 5 7 bisajadi 3 2 5 6 ya (interaksi selesai) Pembagian Subsoal Pada semua subsoal, berlaku: S memiliki setidaknya K buah anggota. Subsoal 1 (6 poin) N=5 K=1 Q = 32 Subsoal 2 (12 poin) N=6 2 K=2 Q = 100 Khusus untuk subsoal 1 dan subsoal 2: Hanya terdapat sebuah kasus uji (satu subsoal dinyatakan oleh satu kasus uji), yang dapat dimainkan di sini. Dalam permainan tersebut, banyaknya tebakan yang dapat diajukan tidak dibatasi. Jika Anda sudah memenangkan permainan untuk subsoal tertentu, Anda dapat memilih pilihan pada permainan untuk mengeluarkan source code yang dapat langsung Anda kirimkan ke grader dan menjawab dengan benar pada subsoal yang telah Anda menangkan. Subsoal 3 (5 poin) 1 ≤ N ≤ 10 K=1 Q = 2N Subsoal 4 (8 poin) 1 ≤ N ≤ 100 K=1 Q=N+1 Subsoal 5 (33 poin) 1 ≤ N ≤ 1.000 K=1 Q = 2 × ceil(log2 N) + 1 S selalu berupa {1, 2, ..., R} dengan R ≤ N Subsoal 6 (36 poin) 2 ≤ N ≤ 100 K=2 Q = N2 Catatan ceil(x) adalah bilangan bulat terkecil yang lebih besar dari atau sama dengan x. 3 Sebuah himpunan V dikatakan merupakan subhimpunan dari himpunan S apabila setiap anggota V juga merupakan anggota S. Yang perlu diperhatikan adalah bahwa untuk tipe soal interaktif seperti ini, Anda harus selalu memberikan perintah "fflush(stdout);" (bagi pengguna C/C++) atau "flush(output);" (bagi pengguna PASCAL) setiap kali Anda mencetak keluaran (dengan kata lain, setiap kali ada perintah mencetak keluaran misalnya write, writeln, printf, cout, atau puts, tepat di bawahnya harus ada perintah fflush/flush). Sebagai contoh, berikut adalah contoh source code dalam bahasa Pascal yang akan selalu menebak semua N barang tanpa mempedulikan nilai N, K, dan Q yang diberikan. var subsoal: string; N, K, Q, i: longint; begin readln(subsoal); readln(N, K, Q); write(N); for i := 1 to N do write(' ', i); writeln; flush(output); end. Dan berikut adalah contoh source code dalam bahasa C++. #include <cstdio> #include <cstring> char subsoal[100]; int nomor; int N, K, Q, i; int main() { scanf("%s %d", subsoal, &nomor); scanf("%d %d %d", &N, &K, &Q); printf("%d", N); 4 for(i = 1; i <= N; i++) printf(" %d", i); printf("\n"); fflush(stdout); return 0; } Peringatan Apabila program Anda melakukan salah satu dari hal-hal di bawah ini: mengeluarkan tebakan atau menjawab tidak sesuai format sehingga tidak dikenali oleh grader, atau menebak lebih dari Q kali, maka program Anda akan dihentikan secara otomatis dan Anda tidak memperoleh nilai pada kasus uji yang bersangkutan. Perhatikan bahwa untuk soal ini, jika solusi Anda dapat menyelesaikan subsoal X, tidak dijamin bahwa solusi tersebut juga dapat menyelesaikan subsoal-subsoal Y dengan Y < X. 5 Berbaris Sebelum Masuk Batas Waktu 1 detik Batas Memori 32 MB Deskripsi Pak Dengklek adalah seorang wali murid di SD TOKI. Setiap pagi, para siswa diharuskan untuk berbaris di depan pintu kelas sebelum masuk. Namun, Pak Dengklek memiliki sedikit kesulitan karena tiap siswa memiliki keinginan tersendiri dalam berbaris. Terdapat N orang siswa di SD tersebut, dinomori dari 1 sampai dengan N. Siswa nomor 1 berada di paling depan dan siswa nomor N berada di paling belakang barisan. Siswa ke-i memiliki tinggi badan sebesar Ti satuan. Setiap siswa ke-i ingin agar saat ia berbaris, banyaknya siswa di depannya yang memiliki tinggi badan kurang dari atau sama dengan tinggi badannya, berada di antara Ai dan Bi orang siswa, inklusif. Bantulah Pak Dengklek membariskan siswa-siswanya dalam satu baris sedemikian sehingga semua keinginan siswanya terpenuhi. Format Masukan Baris pertama pada berkas masukan berisi string "Subsoal X" dengan X menyatakan nomor subsoal. Baris kedua berisi sebuah bilangan bulat N. N baris berikutnya masing-masing berisi 3 buah bilangan bulat Ti, Ai, dan Bi. Format Keluaran Keluarkan salah satu barisan yang memenuhi, dalam format S1 S2 S3 ... SN dengan Si adalah nomor siswa yang berada pada posisi ke-i dari depan. Contoh Masukan Subsoal 0 3 150 1 3 160 2 2 140 0 2 Contoh Keluaran 3 1 2 Pembagian Subsoal Pada semua subsoal, berlaku: 1 ≤ Ti ≤ 1.000 6 0 ≤ Ai ≤ Bi ≤ N Semua nilai Ti berbeda-beda Dijamin ada setidaknya sebuah barisan yang memenuhi syarat Subsoal 1 (9 poin) Hanya terdapat sebuah kasus uji, yang dapat diunduh di sini. Subsoal 2 (20 poin) Hanya terdapat sebuah kasus uji, yang dapat diunduh di sini. Subsoal 3 (21 poin) 1≤N≤8 Subsoal 4 (50 poin) 1 ≤ N ≤ 1.000 7 Lipat Kertas Batas Waktu 0,2 detik Batas Memori 32 MB Deskripsi Pak Dengklek sekarang sedang sibuk memainkan kertas origami buatan Pak Ganesh yang berbentuk persegi panjang dengan ukuran 1 × N petak berwarna-warni. Petak warna paling kiri disebut petak 1, di kanannya disebut petak 2, dan seterusnya. Kertas origami ini unik, karena bagian yang dapat dilipat hanyalah sisi persinggungan 2 buah petak saja. Dengan demikian, terdapat N − 1 lekukan yang dapat dilipat. Pak Ganesh sebelumnya telah melipat-lipat kertasnya menjadi berukuran 1 × 1 (tentu hasilnya sangatlah tebal!). Kemudian, Pak Ganesh membuka lipatan-lipatan kertas tersebut. Hasilnya, kertas tersebut memiliki bekas lekukan-lekukan pada bagian yang dilipat dan lekukan-lekukan tersebut menjadi cekungan ke atas ataupun cekungan ke bawah. Gambar di atas merupakan kondisi kertas yang dibuka dari lipatannya dan dilihat dari sisi samping ketika permukaan kertas menghadap ke atas dan petak nomor 1 berada di paling kiri. Kali ini Pak Ganesh tidak lagi memberikan Pak Dengklek kertas yang dibuka dari lipatannya, melainkan Pak Ganesh memberikan urutan petak warna hasil akhir lipatan apabila dilihat dari samping kertas ketika permukaan kertas menghadap ke atas dan petak nomor 1 berada di paling kiri. Pak Dengklek diminta untuk mencari tahu bagaimana kondisi lekukan kertas tersebut apabila dibuka dari lipatannya! 8 Format Masukan Baris pertama pada berkas masukan berisi string "Subsoal X" (tanpa tanda kutip) dengan X menyatakan nomor subsoal. Baris kedua berisi sebuah bilangan bulat N, yaitu banyaknya petak warna-warni pada kertas. Baris ketiga berisi N buah bilangan bulat dipisahkan spasi, yaitu urutan petak warna hasil akhir lipatan apabila dilihat dari sisi samping kertas ketika permukaan kertas menghadap ke atas dan petak nomor 1 berada di paling kiri.. Format Keluaran Keluaran terdiri dari 1 baris yang berisi string S. String S memiliki panjang N − 1 karakter yang menunjukkan kondisi kertas setelah dibuka dari lipatannya. Karakter ke-i pada S menunjukkan lekukan di antara petak i dan petak i + 1. Karakter 'A' menunjukkan lekukan tersebut berupa cekungan ke atas, dan karakter 'B' menunjukkan lekukan tersebut berupa cekungan ke bawah. Apabila tidak ada kemungkinan solusi, S berisi string “INVALID” (tanpa tanda kutip). Apabila terdapat lebih dari satu kemungkinan solusi, keluarkan yang mana saja. Contoh Masukan 1 Subsoal 0 8 1 8 5 4 3 6 7 2 Contoh Keluaran 1 BBABBAA Contoh Masukan 2 Subsoal 0 4 4 1 3 2 Contoh Keluaran 2 INVALID Penjelasan Contoh Kasus Uji Gambar berikut adalah kondisi kertas yang ditunjukkan oleh string S pada contoh keluaran 1. Kemudian cobalah lipat pada bagian di antara petak 4 dan petak 5. 9 Selanjutnya, lipatlah bagian antara petak 2 dan petak 3 maupun bagian antara petak 7 dan petak 6. Terakhir, lipatlah lipatan bagian yang tersisa. Didapat hasil akhir lipatan dengan urutan petak warna : 1 8 5 4 3 6 7 2 (dilihat dari bagian atas ke bawah), yang merupakan urutan petak warna yang ditanyakan oleh Pak Ganesh pada contoh masukan 1. Perhatikan bahwa apabila kertas tersebut dibuka kembali, maka kondisi lekukan kertas tidak berbeda dengan kondisi lekukan kertas sebelum dilipat. Sehingga, lekukan kertas tersebut merupakan salah satu solusi yang mungkin. Pembagian Subsoal Subsoal 1 (9 poin) Hanya terdapat sebuah kasus uji, yang dapat diunduh di sini. Subsoal 2 (9 poin) Hanya terdapat sebuah kasus uji, yang dapat diunduh di sini. 10 Subsoal 3 (30 poin) 2 ≤ N ≤ 1.000 Tidak ada masukan dengan keluaran INVALID Subsoal 4 (7 poin) 2≤N≤4 Subsoal 5 (28 poin) 2 ≤ N ≤ 1.000 Subsoal 6 (17 poin) 2 ≤ N ≤ 100.000 11 Menggelindingkan Kubus Batas Waktu 1 detik Batas Memori 32 MB Deskripsi Diberikan sebuah kubus yang masing-masing muka sisinya dinomori antara 1 hingga 6, inklusif. Kubus itu diletakkan pada bidang datar yang luasnya tidak terbatas. Pada mulanya, masing-masing sisi kubus itu menghadap ke arah atas, bawah, utara, timur, selatan, dan barat yang secara berturut-turut dinomori dengan P1, P2, P3, P4, P5, dan P6. Anda diperbolehkan menggelindingkan kubus itu ke arah utara, timur, barat, atau selatan. Akibat dari menggelindingkan kubus sekali adalah perubahan konfigurasi nomor pada muka sisinya yang tergantung pada arah kubus digelindingkan. Berikut ini adalah contoh sebuah kubus yang kebetulan dibuat mirip dengan dadu. Setiap langkah dilakukan sekali dan merupakan lanjutan dari langkah sebelumnya. Muka Kubus Awal Digelindingkan Kemudian ke Utara ke Timur Kemudian ke Selatan Kemudian ke Barat P1 (atas) 1 5 3 1 5 P2 (bawah) 6 2 4 6 2 P3 (utara) 2 1 1 4 4 P4 (timur) 4 4 5 5 6 P5 (selatan) 5 6 6 3 3 P6 (barat) 3 3 2 2 1 Tugas Anda adalah menggelindingkan kubus dengan sesedikit mungkin langkah sedemikian sehingga konfigurasi nomor-nomor pada muka sisi atas, bawah, utara, timur, selatan, dan barat secara berturut-turut menjadi Q1, Q2, Q3, Q4, Q5, dan Q6. Format Masukan Baris pertama pada berkas masukan berisi string "Subsoal X" dengan X menyatakan nomor subsoal. Baris kedua berisi 6 buah bilangan bulat dipisahkan spasi yang secara berturut-turut menyatakan P1, P2, P3, P4, P5, dan P6. Baris ketiga berisi 6 buah bilangan bulat dipisahkan spasi yang secara berturut-turut menyatakan Q1, Q2, Q3, Q4, Q5, dan Q6. Format Keluaran Sebuah baris berisi sebuah bilangan bulat yang menyatakan banyaknya langkah penggelindingan yang diperlukan agar tujuan seperti pada deskripsi soal tercapai dan banyaknya langkah penggelindingan tersebut minimal. Contoh Masukan Subsoal 0 1 4 3 2 3 4 12 3 3 4 4 2 1 Contoh Keluaran 2 Penjelasan Contoh Kasus Uji Pada contoh masukan, salah satu cara untuk mendapatkan konfigurasi akhir dalam dua langkah adalah gelindingkan kubus ke barat, kemudian ke selatan. Setelah langkah pertama, konfigurasi kubus adalah 2 4 3 4 3 1. Pembagian Subsoal Pada semua subsoal, berlaku: Nilai-nilai Q1,Q2, Q3, Q4, Q5, dan Q6 adalah sedemikian sehingga terdapat cara untuk mencapai konfigurasi akhir. Subsoal 1 (8 poin) Hanya terdapat sebuah kasus uji, dan dapat diunduh di sini. Subsoal 2 (10 poin) Hanya terdapat sebuah kasus uji, dan dapat diunduh di sini. Subsoal 3 (16 poin) P1 = 2 P2 = 2 P3 = 1 P4 = 1 P5 = 1 P6 = 1 Subsoal 4 (24 poin) P1 = 2 P2 = 1 P3 = 1 P4 = 1 P5 = 1 13 P6 = 1 Subsoal 5 (42 poin) Untuk setiap i, 1 ≤ Pi ≤ 6. Mungkin ada dua atau lebih muka sisi dengan nomor yang sama. 14 Hak Cipta Dilindungi Undang-undang SOAL UJIAN OLIMPIADE SAINS NASIONAL 2013 CALON PESERTA INTERNATIONAL OLYMPIAD IN INFORMATICS (IOI) 2014 HARI KE-2 INFORMATIKA Waktu : 5 jam KEMENTERIAN PENDIDIKAN DAN KEBUDAYAAN DIREKTORAT JENDERAL PENDIDIKAN MENENGAH DIREKTORAT PEMBINAAN SEKOLAH MENENGAH ATAS TAHUN 2013 Mengosongkan Matriks Batas Waktu 1 detik Batas Memori 32 MB Deskripsi Di sela-sela waktu santai sore, Pak Dengklek memberikan sebuah tantangan bagi bebekbebeknya. Pak Dengklek akan memberikan sebuah matriks berukuran N × M (N baris × M kolom) berisi bilangan-bilangan. Baris-baris dinomori dari 1 sampai dengan N dari atas ke bawah. Kolom-kolom dinomori dari 1 sampai dengan M dari kiri ke kanan. Kemudian, pada setiap langkah, para bebek dapat melakukan salah satu dari 3 operasi di bawah ini pada matriks tersebut. 1. Memilih sebuah bilangan bulat a kemudian menambahkan semua bilangan pada salah satu kolom dengan a. 2. Memilih sebuah bilangan bulat b kemudian mengurangi semua bilangan pada salah satu kolom dengan b. 3. Memilih sebuah bilangan bulat k kemudian mengalikan semua bilangan pada salah satu baris dengan 2k. Kemudian setiap bilangan hasil operasi tersebut akan dimodulo dengan 1.000.000.007 (109 + 7) . Yang harus dilakukan oleh para bebek adalah menerapkan serangkaian operasi di atas sedemikian sehingga pada akhirnya semua bilangan dalam matriks tersebut bernilai 0. Sebagai contoh, perhatikan matriks yang diberikan Pak Dengklek di bawah ini. Salah satu rangkaian operasi yang dapat diterapkan oleh para bebek adalah sebagai berikut. No Operasi Hasil Matriks 1 Mengalikan bilangan pada baris 2 dengan 2 (k = 1) 2 Mengurangi bilangan pada kolom 1 dengan 1 3 Mengalikan bilangan pada baris 2 dengan 2 (k = 1) 4 Mengurangi bilangan pada kolom 1 dengan 2 1 No Operasi Hasil Matriks 5 Menambahkan bilangan pada kolom 2 dengan 1 6 Mengalikan bilangan pada baris 2 dengan 2 (k = 1) 7 Mengurangi bilangan pada kolom 2 dengan 1 8 Mengalikan bilangan pada baris 2 dengan 2 (k = 1) 9 Mengurangi bilangan pada kolom 2 dengan 2 Karena Pak Dengklek menyediakan bonus makanan ringan bagi yang berhasil memecahkan tantangan ini, para bebek pun berlomba-lomba untuk mencari jawabannya. Agar para bebek tidak terlalu lama dalam memikirkan solusi tantangan ini, Pak Dengklek membatasi banyaknya operasi yang dapat dilakukan maksimum sebesar 100.000 operasi. Rupa-rupanya, Kwek si bebek nakal bermaksud curang dengan meminta bantuan kepada Anda. Walaupun Anda tidak bermaksud membantunya, Anda sendiri akhirnya juga merasa penasaran dengan tantangan pak Dengklek dan ingin memecahkannya. Format Masukan Baris pertama pada berkas masukan berisi string “Subsoal X” dengan X menyatakan nomor subsoal dari berkas masukan saat ini. Kemudian di baris kedua terdapat 2 buah bilangan bulat yang dipisahkan oleh tepat sebuah spasi, yaitu N dan M . N buah baris berikutnya mendeskripsikan matriks yang diberikan oleh Pak Dengklek dan pada masing-masing baris terdapat tepat M buah bilangan bulat dipisahkan spasi. Format Keluaran Untuk masukan yang diberikan, pada baris pertama cetak sebuah bilangan S, yang menyatakan banyaknya operasi yang Anda perlukan untuk mengubah semua bilangan matriks pada berkas masukan menjadi 0. Kemudian cetak S baris. Masing-masing baris menyatakan operasi yang dilakukan terhadap matriks yang diberikan (sesuai urutan operasi tersebut diterapkan kepada matriks), dengan format: 1. Jika operasi tersebut adalah menambahkan semua bilangan pada suatu kolom dengan suatu bilangan, cetak "1 c a" (tanpa tanda kutip) dengan c menyatakan nomor kolom yang ditambah dan a menyatakan besar bilangan yang ditambahkan. 2. Jika operasi tersebut adalah mengurangi semua bilangan pada suatu kolom tertentu 2 dengan suatu bilangan, cetak "2 c b" (tanpa tanda kutip) dengan c menyatakan nomor kolom yang dikurangi dan b menyatakan besar bilangan yang dikurangkan. 3. Jika operasi tersebut adalah mengalikan semua bilangan pada suatu baris tertentu dengan 2k, cetak "3 r k" (tanpa tanda kutip) dengan r menyatakan nomor baris yang dikali dan k menyatakan besaran pangkat dari 2. Untuk setiap operasi, harus berlaku 0 ≤ a, b, k < 1.000.000.007. Contoh Masukan Subsoal 0 2 2 3 2 1 0 Contoh Keluaran 9 3 2 3 2 1 3 2 3 2 2 1 2 1 2 2 2 2 2 1 1 1 2 1 1 1 1 2 Pembagian Subsoal Pada semua subsoal, berlaku: Setiap anggota matriks berupa bilangan bulat nonnegatif kurang dari 1.000.000.007. Subsoal 1 (11 poin) Hanya terdapat sebuah kasus uji, yang dapat diunduh di sini. Subsoal 2 (13 poin) Hanya terdapat sebuah kasus uji, yang dapat diunduh di sini. Subsoal 3 (7 poin) N=1 1 ≤ M ≤ 20 Subsoal 4 (41 poin) 1 ≤ N ≤ 20 M=1 3 Subsoal 5 (28 poin) 1 ≤ N, M ≤ 20 4 Kontes Menari Batas Waktu 2 detik Batas Memori 32 MB Deskripsi Kwek, salah satu bebek Pak Dengklek, sedang berlatih tari tradisional yaitu Tari Bebek. Tujuan Kwek berlatih tak lain dan tak bukan adalah untuk mengikuti kontes tahunan Tari Bebek. Dalam lomba, setiap peserta menampilkan beberapa macam gerakan Tari Bebek untuk memikat para juri dengan keindahannya. Kwek sendiri sudah menguasai N macam gerakan yang dinomori dari 1 sampai dengan N. Tiap gerakan memiliki nilai dasar keindahan. Gerakan ke-i memiliki nilai dasar keindahan Di. Terdapat empat jenis gerakan dalam Tari Bebek, yaitu gerakan biasa, gerakan memukau, gerakan melelahkan, dan gerakan meyakinkan. Dijamin hanya terdapat sebuah gerakan meyakinkan dalam Tari Bebek. Dalam kontes Tari Bebek, setiap peserta harus memilih tepat R buah gerakan yang berbedabeda untuk ditampilkan, yang masing-masing dilakukan selama 1 menit. Nomor dari gerakan yang dilakukan pada menit ke-t (untuk 1 ≤ t ≤ R) dinyatakan oleh Gt. Setelah menampilkan gerakan Gt peserta akan mendapatkan skor Kt yang besarnya dipengaruhi oleh DGt dan gerakan-gerakan sebelumnya, yang selengkapnya dihitung menurut aturan berikut. 1. Mula-mula, nilai Kt adalah DGt (yakni, nilai dasar keindahan gerakan nomor Gj). 2. a. Jika t > 1 dan gerakan Gt-1 adalah gerakan memukau, maka nilai Kt dikalikan dua. b. Jika t > 1 dan gerakan Gt-1 adalah gerakan melelahkan, maka nilai Kt dibagi dua (dibulatkan ke bawah). 3. Jika untuk suatu m < t, gerakan Gm adalah gerakan meyakinkan, maka nilai Kt ditambah sebesar Y. Untuk kontes Tari Bebek tahun ini, telah diundang J orang juri yang dinomori dari 1 sampai dengan J. Masing-masing juri menetapkan nilai batas keindahan. Juri ke-i menetapkan nilai batas keindahan sebesar Hi. Juri ke-i akan terkesima dengan tarian peserta jika K1 + K2 + ... + K R > H i. Berikut ini adalah contoh rangkaian gerakan beserta simulasi perhitungan nilai keindahan dari setiap gerakan tersebut, dengan R = 6. t DGt Jenis Gerakan Gt Kt 1 10 biasa 2 10 5 meyakinkan (Y = 3) 5 3 12 biasa 12 + 3 = 15 4 5 memukau 5+3=8 5 7 melelahkan (7 × 2) + 3 = 17 6 9 biasa (9 / 2) + 3 = 4 + 3 = 7 5 t DGt Jenis Gerakan Gt Kt K1 + K2 + ... + K6 62 Diberikan daftar gerakan yang dikuasai oleh Kwek, dan juga batas nilai keindahan masingmasing juri yang hadir. Tentukan banyaknya kemungkinan rangkaian gerakan Tari Bebek berbeda yang dapat ditampilkan oleh Kwek untuk membuat masing-masing juri terkesima. Format Masukan Baris pertama pada berkas masukan berisi string "Subsoal X" dengan X menyatakan nomor subsoal. Baris kedua masukan berisi empat buah bilangan bulat N, R, Y, dan J, masing-masing dipisahkan oleh spasi. N baris berikutnya masing-masing berisi informasi gerakan yang dikuasai Kwek. Tiap baris terdiri dari sebuah buah bilangan bulat Di dan sebuah karakter Ti dipisahkan oleh spasi, yang menyatakan nilai keindahan dari gerakan ke-i dan jenis dari gerakan tersebut. Ti selalu merupakan salah satu dari 'B', 'P', 'L', dan 'Y', yang secara berurutan menyatakan gerakan biasa, memukau, melelahkan, dan meyakinkan. J baris berikutnya masing-masing berisi sebuah bilangan bulat Hi yang menyatakan nilai batas keindahan dari juri ke-i. Format Keluaran Keluarkan J buah baris. Baris ke-i harus berisi banyaknya kemungkinan rangkaian gerakan Tari Bebek yang dapat dibawakan oleh Kwek agar dapat membuat juri ke-i terkesima. Contoh Masukan Subsoal 0 5 2 5 3 10 B 15 B 5 P 300 L 7 B 1 1000 600 Contoh Keluaran 20 0 1 Penjelasan Contoh Kasus Uji Untuk juri pertama, karena batas nilai keindahannya hanya 1, semua permutasi dari dua gerakan yang ada dapat membuatnya terkesima. Untuk juri kedua, tidak ada satupun rangkaian gerakan yang dapat membuat juri tersebut 6 terkesima. Untuk juri ketiga, hanya ada satu cara yang dapat membuat juri tersebut terkesima yaitu menampilkan gerakan 3 kemudian dilanjutkan gerakan 4. Total keindahannya adalah 5 + (2 × 300) = 605. Pembagian Subsoal Pada semua subsoal, berlaku: 1 ≤ N ≤ 10 0<R≤N 0 ≤ Y ≤ 100 1 ≤ Hi ≤ 100.000 1 ≤ Di ≤ 1.000 Dijamin bahwa hanya terdapat paling banyak satu buah gerakan meyakinkan pada masukan. Subsoal 1 (9 poin) Hanya terdapat sebuah kasus uji, yang dapat diunduh di sini. Subsoal 2 (9 poin) Hanya terdapat sebuah kasus uji, yang dapat diunduh di sini. Subsoal 3 (17 poin) 1 ≤ J ≤ 10 Semua gerakan pada masukan merupakan gerakan biasa. Subsoal 4 (27 poin) 1 ≤ J ≤ 10 Subsoal 5 (38 poin) 1 ≤ J ≤ 1.000 7 Cuti Liburan Batas Waktu 1 detik Batas Memori 32 MB Deskripsi Karena sedikit jenuh dengan pekerjaannya di Kantor Bebek, minggu ini Pak Dengklek mengajukan cuti liburan. Beruntungnya, atasan Pak Dengklek langsung menyetujui cuti tersebut. Pak Dengklek sangat senang dan langsung mempersiapkan segala sesuatu untuk liburannya mendatang. Salah satu hal yang Pak Dengklek persiapkan adalah koper berisi baju-bajunya selama liburan. Saat ini, ia memiliki N helai baju di rumahnya, yang dinomori dari 1 sampai dengan N. Baju ke-i memiliki berat sebesar Bi satuan, daya tahan pakai selama Di hari, dan warna yang dinyatakan dengan sebuah bilangan Wi. Tentu saja, bilangan yang berbeda menyatakan warna yang berbeda. Koper Pak Dengklek hanya dapat memuat baju-baju dengan total berat maksimum sebesar P satuan. Ia ingin agar dapat membawa baju-baju dengan total daya tahan sebesar mungkin, namun dengan total berat tidak melebihi P. Ia juga sangat memperhatikan penampilan; oleh karena itu, ia ingin agar terdapat setidaknya Q warna berbeda pada baju-baju yang dibawanya. Tentukan total daya tahan baju-baju terbesar yang dapat dibawa Pak Dengklek dan memenuhi syarat-syarat tersebut. Format Masukan Baris pertama berisi string "Subsoal X" dengan X menyatakan nomor subsoal. Baris kedua berisi tiga buah bilangan bulat N, P, dan Q. N baris berikutnya masing-masing berisi tiga buah bilangan bulat Bi, Di, dan Wi. Format Keluaran Sebuah baris berisi sebuah bilangan bulat yang menyatakan total daya tahan terbesar yang mungkin. Apabila syarat-syarat tersebut tidak mungkin terpenuhi, keluarkan sebuah baris berisi -1. Contoh Masukan 1 Subsoal 0 5 10 2 2 5 1 3 3 4 4 2 2 3 2 3 4 6 1 Contoh Keluaran 1 14 8 Contoh Masukan 2 Subsoal 0 5 7 3 2 5 1 3 3 4 4 2 2 3 2 3 4 6 1 Contoh Keluaran 2 -1 Penjelasan Pada contoh masukan 1, cara terbaik adalah Pak Dengklek membawa baju-baju nomor 1, 2, dan 5. Dengan demikian, total beratnya adalah 2 + 3 + 4 = 9 (tidak melebihi 10), banyaknya warna berbeda adalah 2 (warna 1 dan 4), dan total daya tahan adalah 5 + 3 + 6 = 14 hari. Pembagian Subsoal Pada semua subsoal, berlaku: 1 ≤ P ≤ 500 1 ≤ Bi ≤ 100 1 ≤ Di ≤ 100 Subsoal 1 (9 poin) Hanya terdapat sebuah kasus uji, yang dapat diunduh di sini. Subsoal 2 (9 poin) Hanya terdapat sebuah kasus uji, yang dapat diunduh di sini. Subsoal 3 (11 poin) 1 ≤ N ≤ 16 Untuk setiap i, Wi = i Q=0 Subsoal 4 (17 poin) 1 ≤ N ≤ 100 Untuk setiap i, Wi = i Q=0 9 Subsoal 5 (23 poin) 1 ≤ N ≤ 100 Untuk setiap i, Wi = i 0≤Q≤N Subsoal 6 (31 poin) 1 ≤ N ≤ 100 1 ≤ Wi ≤ N 0≤Q≤N 10 Pabrik Kue Batas Waktu 3 detik Batas Memori 64 MB Deskripsi Pak Dengklek memulai usaha produksi kue. Untuk itu, ia membeli 100 mesin pembuat kue. Setiap mesin memproduksi satu jenis kue yang unik. Karena keterbatasan tempat, seluruh mesin disimpan pada sebuah gudang. Sedangkan kegiatan produksi dilakukan pada sebuah ruang di pabrik kecilnya yang hanya bisa menampung maksimum 10 mesin berbeda setiap harinya. Setiap pagi Pak Dengklek membuat daftar jenis-jenis kue yang akan diproduksi hari itu agar pegawainya dapat memindahkan mesin-mesin tersebut dari gudang ke ruang produksi. Setiap siang, pelanggan-pelanggan datang hendak membeli kue. Setiap jenis kue hanya boleh dibeli oleh maksimum satu pelanggan. Apabila kue yang diinginkan tidak tersedia, pelanggan akan pulang dengan tangan kosong. Karena bukan peramal, Pak Dengklek tidak mengetahui kue-kue mana saja yang akan dipesan pelanggan pada siang harinya ketika membuat daftar di pagi hari. Tentu saja, Pak Dengklek ingin agar banyaknya pelanggan yang berhasil membeli kue sebanyak mungkin. Pak Dengklek menyimpulkan bahwa terdapat pola probabilitas pada pemesanan tiap jenis kue. Untuk masing-masing jenis kue i, terdapat barisan probabilitas p[i,0], p[i,1], ..., p[i,Ki 1]. Barisan ini menyatakan bahwa pada hari ke-t, kue jenis i dipesan dengan probabilitas p[i, t mod Ki]. Nilai Ki ini bisa berbeda antara satu jenis kue dengan jenis kue lainnya. Akan tetapi, Pak Dengklek tidak mengetahui nilai dari barisan p[i,j] maupun Ki. Ia hanya mengetahui bahwa 1 ≤ Ki ≤ 20, dan 0 ≤ p[i,j] ≤ 1 untuk sembarang i dan j. Petunjuk:Berdasarkan fakta ini, Pak Dengklek menyimpulkan bahwa ketika ia sudah memiliki cukup banyak data pemesanan yang pernah terjadi, ia dapat memperkirakan pola pemesanan (p[i,j] dan Ki). Perkiraan ini cenderung membaik ketika banyaknya data pemesanan yang ia miliki semakin bertambah, yakni ketika nilai t membesar. Anda sebagai programmer baru di pabrik Pak Dengklek ditugasi untuk membuat sebuah program untuk membantu Pak Dengklek membuat daftar mesin yang harus disiapkan setiap pagi. Upah yang Anda terima ditentukan oleh kinerja program Anda selama T hari berturutturut, dan besarnya adalah dengan a adalah total banyaknya pelanggan yang berhasil membeli kue dan b adalah total banyak maksimum pelanggan yang mungkin berhasil membeli kue, selama T hari tersebut. Operator pembagian di sini adalah operator pembagian bilangan riil. Format Interaksi Soal ini adalah soal interaktif. 11 Pada awalnya, program Anda harus membaca string "Subsoal X" dengan X menyatakan nomor subsoal dari kasus uji yang sedang diujikan. Berikutnya program Anda membaca sebuah baris berisi sebuah bilangan bulat T yang menyatakan banyaknya hari. Kemudian sebanyak T kali, program Anda berinteraksi dengan program juri. Pada interaksi ke-i, program Anda: 1. Mengeluarkan sebuah bilangan bulat N (0 ≤ N ≤ 10) ke standar keluaran pada sebuah baris, yang menyatakan banyaknya mesin kue pada daftar mesin Pak Dengklek. Kemudian mengeluarkan N bilangan bulat berbeda yang masing-masing menyatakan nomor jenis kue yang mesinnya akan digunakan di hari itu. Karena Pak Dengklek hanya memiliki satu mesin untuk memproduksi setiap jenis kue, tidak boleh ada dua jenis mesin yang sama pada daftar ini. 2. Membaca sebuah bilangan bulat M (0 ≤ M ≤ 100) dari standar masukan pada sebuah baris, yang menyatakan banyaknya pelanggan yang melakukan pemesanan kue pada hari ke-i. Kemudian diikuti dengan membaca M buah bilangan bulat berbeda terpisah baris baru pada sebuah baris, yang masing-masing berupa salah satu bilangan antara 1 hingga 100 yang menyatakan jenis kue yang dibeli pada hari tersebut. Kue-kue diurutkan secara menaik berdasarkan jenisnya. Contoh Interaksi Keluaran Program Peserta Keluaran Program Juri Subsoal 0 2 3 1 50 2 2 50 100 2 5 3 2 1 50 (interaksi selesai) Penjelasan Contoh Kasus Uji Terdapat 2 kali interaksi. Pada pagi hari pertama, Pak Dengklek mendaftarkan mesin-mesin untuk memproduksi kuekue berjenis 1, 50, dan 2. Pada siang harinya, terdapat 2 pelanggan kue, berjenis 100 dan 50. Kue berjenis 100 sedang tidak diproduksi sedangkan kue berjenis 50 sedang diproduksi di hari ini. Pada pagi hari kedua, Pak Dengklek mendaftarkan mesin-mesin untuk memproduksi kue-kue berjenis 5 dan 3. Pada siang harinya, terdapat 2 pelanggan kue, berjenis 1 dan 50. Kedua kue 12 tidak diproduksi di hari ini. Pada kasus contoh ini, banyak kue yang berhasil dijual ke pelanggan adalah 1. Sedangkan banyak maksimum kue yang mungkin berhasil dijual adalah 4. Sehingga nilai Anda adalah: Pembagian Subsoal Terdapat 25 subsoal. Pada semua subsoal berlaku: Hanya terdapat sebuah kasus uji. Dijamin program juri menentukan kue-kue mana saja yang dibeli pada setiap harinya tanpa dipengaruhi oleh keluaran program peserta. T = 1.000 Nilai Anda pada soal ini adalah rata-rata upah yang Anda peroleh pada semua kasus uji kemudian ditambah setengah lalu dibulatkan ke bawah. Dengan skema penilaian seperti ini, nilai Anda berada dalam rentang 0..100. Untuk membantu Anda memahami interaksi, disediakan game yang dapat diakses di sini. Kasus uji yang diberikan pada game ini hanyalah untuk visualisasi dan tidak termasuk dalam penilaian seperti pada game di soal interaktif sebelumnya. Catatan Yang perlu diperhatikan adalah bahwa untuk tipe soal interaktif seperti ini, Anda harus selalu memberikan perintah "fflush(stdout);" (bagi pengguna C/C++) atau "flush(output);" (bagi pengguna PASCAL) setiap kali Anda mencetak keluaran (dengan kata lain, setiap kali ada perintah mencetak keluaran misalnya write, writeln, printf, cout, atau puts, tepat di bawahnya harus ada perintah fflush/flush). Sebagai contoh, berikut adalah contoh source code dalam bahasa Pascal yang melakukan pengisian gudang tanpa memperdulikan pesanan para bebek. var subsoal: string; T, M, i, j, pesanan: longint; begin readln(subsoal); readln(T); for i := 1 to T do 13 begin writeln(3); writeln(1); writeln(50); writeln(2); flush(output); readln(M); for j := 1 to M do readln(pesanan); end; end. Dan berikut adalah contoh source code dalam bahasa C++. #include <cstdio> #include <cstring> char subsoal[100]; int nomor; int T, M, i, j, pesanan; int main() { scanf("%s %d", subsoal, &nomor); scanf("%d", &T); for(i = 1; i <= T; i++) { printf("%d\n%d\n%d\n%d\n", 3, 1, 50, 2); fflush(stdout); scanf("%d", &M); for(j = 1; j <= M; j++) { scanf("%d", &pesanan); } } 14 return 0; } Peringatan Apabila program Anda melakukan salah satu dari hal-hal di bawah ini: mengeluarkan keluaran tidak sesuai format sehingga tidak dikenali oleh grader, atau mengeluarkan keluaran tidak sesuai batasan yang tertera di soal maka program Anda akan dihentikan secara otomatis dan Anda tidak memperoleh nilai pada kasus uji yang bersangkutan. 15 OSN 2014 – Hari 0 Angka Tebak Batas Waktu 1 detik Batas Memori 32 MB Deskripsi Semoga Anda masih ingat soal Tebak Angka di mana Anda diharuskan menebak angka yang dipikirkan Pak Dengklek (dari rentang 1 hingga N) dengan menebak maksimal Q kali dan Pak Dengklek akan menjawab TERLALU KECIL, TERLALU BESAR, atau SELAMAT apabila berhasil menebak angka yang dipikirkan. Sekarang, mari kita bertukar posisi! Anda diminta untuk memikirkan sebuah angka dari rentang 1 hingga N. Anda dinyatakan menang apabila Pak Dengklek tidak dapat menebak angka yang Anda pikirkan hingga akhir tebakan (tebakan ke-Q). Sama seperti strategi Anda pada soal Tebak Angka, Pak Dengklek memakai prinsip Divide & Conquer untuk menebak angka yang Anda pikirkan. Apabila angka yang Anda pikirkan berada pada rentang A hingga B, maka pak Dengklek akan menebak C = (A + B) / 2 sebagai angka yang Anda pikirkan. Apabila C bukan berupa bilangan bulat, maka secara acak Pak Dengklek akan memilih pembulatan ke atas atau pembulatan ke bawah. Tentu saja apabila Anda menjawab TERLALU BESAR maka angka yang Anda pikirkan berada pada rentang A hingga C - 1 dan apabila Anda menjawab TERLALU KECIL maka angka yang Anda pikirkan berada pada rentang C + 1 hingga B. Perlu diperhatikan bahwa Pak Dengklek dapat mengecek apakah jawaban-jawaban Anda konsisten sehingga kecurangan-kecurangan yang bisa saja Anda lakukan secara otomatis akan langsung terdeteksi. Salah satu contoh kecurangan yaitu Anda menjawab TERLALU BESAR ketika Pak Dengklek menebak angka 1. Format Interaksi Pada awalnya, program Anda akan menerima label kasus uji. Label kasus uji berisi sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Digit pertama dari label adalah karakter ke-0, digit kedua dari label adalah karakter ke-1, dan seterusnya. Karakter ke-0 akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, dan berisi '.' jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau OSN 2014 – Hari 0 o jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter kei berisi karakter '.' Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Selanjutnya, program Anda akan menerima input dua buah bilangan N dan Q. Kemudian, Anda akan menerima sebuah bilangan bulat C yaitu tebakan Pak Dengklek untuk angka yang Anda pikirkan. Anda diminta untuk menjawab TERLALU KECIL, TERLALU BESAR, atau SELAMAT berdasarkan angka yang Anda pikirkan. Apabila Anda menjawab SELAMAT, artinya Pak Dengklek berhasil menebak angka yang Anda pikirkan dan Anda dinyatakan kalah. Apabila Anda menjawab selain SELAMAT, maka Pak Dengklek akan menebak kembali angka yang Anda pikirkan. Anda dinyatakan menang apabila hingga tebakan ke-Q Pak Dengklek masih belum mendapatkan jawaban SELAMAT. Contoh Interaksi Keluaran Program Peserta Umpan Balik Grader 0...4. 9 3 5 TERLALU BESAR 2 TERLALU KECIL 4 TERLALU BESAR (interaksi selesai) Penjelasan Contoh Interaksi OSN 2014 – Hari 0 Pada kasus tersebut, nilai N dan Q secara berturut-turut adalah 9 dan 3. Dari angka 1 hingga 9, Anda memilih angka 3. Untuk tebakan pertama, nilai A dan B adalah 1 dan 9 sehingga C = (1 + 9) / 2 = 5. Karena 5 terlalu besar dibandingkan dengan 3, maka Anda menjawab TERLALU BESAR. Sehingga untuk tebakan kedua, nilai A dan B adalah 1 dan 4. Karena nilai C = (1 + 4) / 2 = 2,5 bukan merupakan bilangan bulat, maka Pak Dengklek secara acak memilih untuk membulatkan ke bawah. Karena 2 terlalu kecil dibandingkan dengan 3, maka Anda menjawab TERLALU KECIL. Sehingga untuk tebakan ketiga, nilai A dan B adalah 3 dan 4. Karena nilai C = (3 + 4) / 2 = 3,5 bukan merupakan bilangan bulat, maka Pak Dengklek secara acak memilih untuk membulatkan ke atas. Karena 4 terlalu besar dibandingkan dengan 3, maka Anda menjawab TERLALU BESAR. Karena setelah Q = 3 tebakan Pak Dengklek tidak mendapatkan jawaban SELAMAT, maka Anda dinyatakan menang pada permainan ini. Subsoal Subsoal 1 (9 poin) N = 31 Q=4 Subsoal 2 (9 poin) N = 127 Q=6 Khusus untuk subsoal 1 dan subsoal 2: Hanya terdapat sebuah kasus uji (satu subsoal dinyatakan oleh satu kasus uji), yang dapat dimainkan di sini. Anda boleh memainkan permainan ini berulang kali tanpa mendapatkan penalti. Jika Anda sudah memenangkan permainan untuk subsoal tertentu, Anda dapat memilih pilihan pada permainan untuk mengeluarkan source code yang dapat langsung Anda kirimkan ke grader dan menjawab dengan benar pada subsoal yang telah Anda menangkan. Anda tidak diwajibkan memainkan permainan ini untuk mengerjakan kedua subsoal ini. Anda diperbolehkan untuk menulis kode Anda sendiri untuk mengerjakan kedua subsoal ini. Subsoal 3 (20 poin) N=4 Q=2 Subsoal 4 (27 poin) OSN 2014 – Hari 0 N=9 Q=3 Subsoal 5 (35 poin) N = 16 Q=4 Catatan Yang perlu diperhatikan adalah bahwa untuk tipe soal interaktif seperti ini, Anda harus selalu memberikan perintah "fflush(stdout);" (bagi pengguna C/C++) atau "flush(output);" (bagi pengguna PASCAL) setiap kali Anda mencetak keluaran (dengan kata lain, setiap kali ada perintah mencetak keluaran misalnya write, writeln, printf, cout, atau puts, tepat di bawahnya harus ada perintah fflush/flush). Sebagai contoh, berikut adalah contoh source code dalam bahasa Pascal yang akan selalu memikirkan angka 42 tanpa mempedulikan nilai N dan Q yang diberikan. var subsoal: string; N, Q, C, i: longint; begin readln(subsoal); readln(N, Q); for i := 1 to Q do begin readln(C); if (C < 42) then begin writeln('TERLALU KECIL'); flush(output); end else if (C > 42) then begin writeln('TERLALU BESAR'); flush(output); end else begin writeln('SELAMAT'); flush(output); end; end; end. Dan berikut adalah contoh source code dalam bahasa C++. #include <cstdio> #include <cstring> char subsoal[100]; int N, Q, C, i; int main() { scanf("%s", subsoal); scanf("%d %d", &N, &Q); for (i = 1; i <= Q; i++) { scanf("%d", &C); if (C < 42) { OSN 2014 – Hari 0 printf("TERLALU KECIL\n"); fflush(stdout); } else if (C > 42) { printf("TERLALU BESAR\n"); fflush(stdout); } else { printf("SELAMAT\n"); fflush(stdout); } } return 0; } Peringatan Apabila program Anda melakukan salah satu dari hal-hal di bawah ini: melakukan tindakan tidak sesuai format sehingga tidak dikenali oleh grader, melakukan kecurangan dengan tidak konsistennya jawaban Anda, atau gagal memenangkan permainan, maka program Anda akan dihentikan secara otomatis dan Anda mendapatkan verdict Wrong Answer pada kasus uji yang bersangkutan. OSN 2014 – Hari 0 Tebak Pokémon Batas Waktu 4 detik Batas Memori 256 MB Deskripsi Pokédex adalah sebuah komputer saku yang mutlak dimiliki oleh pelatih Pokémon untuk mengidentifikasi spesies Pokémon yang ditemui. Dengan mengarahkan Pokédex menghadap Pokémon, pengguna akan mendapatkan data lengkap mengenai Pokémon tersebut (seperti morfologi, informasi evolusi, dan kekuatan khusus) hampir secara instan. Namun apakah Anda tahu bagaimana proses yang terjadi di dalam Pokédex sehingga bisa menampilkan data yang sesuai dengan sangat cepat? Pada Pokédex tertanam sebuah kamera mini khusus yang berfungsi merekam ciri-ciri dari Pokémon yang hendak diindentifikasi. Ciri-ciri ini akan direkam ketika pengguna mengarahkan Pokédex menghadap Pokémon. Dalam sekali proses identifikasi, kamera mini mampu merekam sebanyak N ciri-ciri. Ciri-ciri tersebut kemudian diterjemahkan ke dalam bahasa manusia (dalam kasus ini bahasa Inggris), lalu dilakukan pencocokan dengan database di Pokémon Center agar didapat nama beserta data lengkap Pokémon yang diidentifikasi. Hal yang menarik adalah proses penerjemahan sangat canggih sedemikian sehingga bahasa manusia yang didapat selalu merupakan substring dari data lengkap Pokémon tersebut di database. Dalam pengembangan Pokédex generasi berikutnya, Anda direkrut oleh Professor Dengklek, seorang peneliti Pokémon ternama yang juga merupakan rekan sejawat Professor Oak, untuk mengimplementasikan algoritma pencocokan antara ciri-ciri yang direkam kamera mini khusus dengan database di Pokémon Center. Pada pengembangan iterasi pertama, Anda hanya perlu mencocokkan data dari Pokémon generasi pertama. Professor Dengklek tidak memedulikan algoritma yang Anda gunakan, asalkan hasilnya dapat sangat akurat. Dapatkah Anda menyelesaikan tugas Anda dengan baik? Format Masukan Pada awalnya, program Anda akan menerima label kasus uji. Label kasus uji berisi sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Digit pertama dari label adalah karakter ke-0, digit kedua dari label adalah karakter ke-1, dan seterusnya. OSN 2014 – Hari 0 Karakter ke-0 akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, dan berisi '.' jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau o jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter kei berisi karakter '.' Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Baris kedua berisi sebuah bilangan bulat N yang merupakan banyaknya ciri-ciri Pokémon yang direkam oleh kamera mini khusus pada Pokédex generasi terbaru. Berikutnya terdapat N baris. Pada tiap baris berisi string S yang menyatakan hasil terjemahan ciri-ciri Pokemon ke dalam bahasa manusia. Seperti yang disinggung di soal, hasil terjemahan selalu merupakan substring dari data lengkap Pokémon tersebut di database. Sebagai referensi, database Pokémon yang lengkap dapat diunduh di sini. Semua data yang terdapat dalam berkas tersebut diambil dari situs Bulbapedia. Format Keluaran Untuk ciri-ciri Pokémon yang diberikan, cetak keluaran dalam 1 baris berisi nama Pokémon yang dimaksud dari hasil analisis ciri-ciri Pokémon tersebut. Contoh Masukan 0.....6 6 The flame that burns at the tip of its tail is an indication of its emotions a bipedal, reptilian Pokemon with an orange body A fire burns at the tip of this Pokemon’s slender tail one of three starter Pokemon of Kanto available at the beginning of Pokemon Red, Green, Blue, FireRed, and LeafGreen The flame at the tip of its tail makes a sound as it burns Obviously prefers hot places Contoh Keluaran Charmander Penjelasan Contoh Kasus Uji OSN 2014 – Hari 0 Pada beberapa browser/peramban atau versi cetak, tampilan contoh masukan di atas mungkin akan terpecah menjadi beberapa baris untuk baris keempat karena terlalu panjang. Namun pada berkas masukan sebenarnya semua ciri-ciri terpisah berada di baris terpisah. Ciri-ciri Pokémon yang diberikan diambil dari data lengkap Charmander. Bandingkan contoh masukan di atas dengan data lengkap Charmander (substring sebagai contoh masukan dihighlight kuning. Sama seperti penjelasan di contoh masukan, tampilan ciri-ciri di bawah mungkin terpecah menjadi beberapa baris). Charmander 16 Charmander is a Fire-type Pokemon. It evolves into Charmeleon starting at level 16, which evolves into Charizard starting at level 36. Along with Bulbasaur and Squirtle, Charmander is one of three starter Pokemon of Kanto available at the beginning of Pokemon Red, Green, Blue, FireRed, and LeafGreen. Charmander is a bipedal, reptilian Pokemon with an orange body, though its underside and soles are cream-colored. It has two small fangs visible in its upper and lower jaws and blue eyes. Its arms and legs are short with four fingers and three clawed toes. A fire burns at the tip of this Pokemon’s slender tail, and has blazed there since Charmander’s birth. The flame can be used as an indication of Charmander's health and mood, burning brightly when the Pokemon is strong, weakly when it is exhausted, wavering when it is happy, and blazing when it is enraged. It is said that Charmander dies if its flame goes out. Charmander can be found in hot, mountainous areas. However, it is found far more often in the ownership of Trainers. As shown in Pokemon Snap, Charmander exhibits pack behavior, calling others of its species if it finds food. Obviously prefers hot places. When it rains, steam is said to spout from the tip of its tail. The flame at the tip of its tail makes a sound as it burns. You can only hear it in quiet places. Even the newborns have flaming tails. Unfamiliar with fire, babies are said to accidentally burn themselves. The flame on its tail shows the strength of its life force. If it is weak, the flame also burns weakly. The flame on its tail indicates Charmander's life force. If it is healthy, the flame burns brightly. If it's healthy, the flame on the tip of its tail will burn vigorously, even if it gets a bit wet. The flame that burns at the tip of its tail is an indication of its emotions. The flame wavers when Charmander is enjoying itself. If the Pokemon becomes enraged, the flame burns fiercely. The flame that burns at the tip of its tail is an indication of its emotions. The flame wavers when Charmander is happy, and blazes when it is enraged. From the time it is born, a flame burns at the tip of its tail. Its life would end if the flame were to go out. It has a preference for hot things. When it rains, steam is said to spout from the tip of its tail. The fire on the tip of its tail is a measure of its life. If healthy, its tail burns intensely. Berikut adalah gambar Charmander sebagai ilustrasi visual. OSN 2014 – Hari 0 Panduan Membaca Database Lengkap Pokémon Seperti yang disebutkan di bagian format masukan, database Pokémon yang lengkap dapat diunduh di sini. Berkas ini dapat Anda gunakan sebagai panduan untuk menentukan nama Pokémon berdasarkan ciri-ciri yang diberikan. Semua data yang terdapat dalam berkas tersebut diambil dari situs Bulbapedia. Berikut adalah format dari database Pokémon. Baris pertama berisi sebuah bilangan bulat P yang menyatakan banyaknya Pokémon yang diberikan data lengkapnya. Berikutnya terdapat P set data yang dijelaskan sebagai berikut. Tiap set data diawali oleh nama Pokémon tersebut dan banyaknya data lengkap dari Pokémon tersebut yang diberikan dalam satu baris. Berikutnya diikuti oleh data lengkap dari Pokémon tersebut, dipisah per baris. Sebagai ilustrasi berikut ada struktur dari berkas database Pokémon. P <nama <data <data ... <data <nama <data <data ... <data ... <nama <data <data ... <data pokémon ke-1><spasi><D1> pokémon 1 ke-1> pokémon 1 ke-2> pokémon pokémon pokémon pokémon 1 ke-D1> ke-2><spasi><D2> 2 ke-1> 2 ke-2> pokémon 2 ke-D2> pokémon ke-P><spasi><DP> pokémon P ke-1> pokémon P ke-2> pokémon P ke-DP> Pembagian Subsoal Pada semua subsoal berlaku: 4 ≤ N ≤ 10 1 ≤ |S| ≤ 150 Dijamin nama Pokémon tersebut tidak akan muncul pada ciri-ciri Pokémon yang diberikan. Subsoal 1 (3 poin) Hanya terdapat sebuah kasus uji untuk subsoal ini, yang dapat diunduh di sini. Subsoal 2 (4 poin) Hanya terdapat sebuah kasus uji untuk subsoal ini, yang dapat diunduh di sini. Subsoal 3 (5 poin) Hanya terdapat sebuah kasus uji untuk subsoal ini, yang dapat diunduh di sini. Subsoal 4 (4 poin) OSN 2014 – Hari 0 Hanya terdapat sebuah kasus uji untuk subsoal ini, yang dapat diunduh di sini. Subsoal 5 (3 poin) Hanya terdapat sebuah kasus uji untuk subsoal ini, yang dapat diunduh di sini. Subsoal 6 (hingga 81 poin) Untuk subsoal ini, terdapat 45 kasus uji. Berbeda dengan model subsoal umum, pada subsoal ini semua kasus uji akan dinilai secara independen (Anda akan tetap mendapat nilai untuk kasus uji yang benar walaupun ada beberapa kasus uji yang salah). Bobot tiap kasus uji adalah 1,8 poin. Catatan Untuk menghindari terjadinya error pada eksekusi program, semua karakter "é" pada berkas masukan maupun berkas database Pokémon telah diganti menjadi karakter "e" biasa. Semua Pokémon dengan karakter khusus pada namanya telah dihilangkan dari berkas database Pokémon sehingga tidak akan diujikan lewat kasus uji. Secara lengkap, berikut adalah daftar nama Pokémon yang dihilangkan walaupun berasal dari generasi pertama. Farfetch'd Nidoran♂ Nidoran♀ Mr. Mime sehingga dijamin setiap nama Pokémon hanya terdiri dari alfabet huruf kapital dan huruf kecil. Pokémon dan nama/gambar setiap karakter adalah merek dagang dan hak cipta dari pemiliknya masing-masing. Kami tidak berafiliasi dengan Nintendo, Pokémon Company Creatures Inc, Game Freak, atau Bulbapedia. Tidak ada maksud untuk melanggar hak cipta atau merek dagang pelanggaran. OSN 2014 – Hari 0 Stupa Borobudur Batas Waktu 1 detik Batas Memori 32 MB Deskripsi Pak Dengklek mengunjungi kawasan wisata Candi Borobudur. Kawasan ini menarik karena banyak terdapat stupa yang indah. Sang penjaga berkata bahwa ada keajaiban di balik bilangan bulat yang terjadi pada kawasan tersebut. Untuk setiap bilangan bulat positif X, terdapat tepat 0 atau X buah stupa setinggi X meter. Pak Dengklek, yang tidak sempat berkeliling ke seluruh kawasan, hanya sempat melihat N stupa. Tinggi dari stupa ke-i yang dilihatnya adalah Ai meter. Pak Dengklek pun penasaran mengenai banyaknya stupa di kawasan tersebut. Tentukan banyaknya stupa minimum di kawasan wisata tersebut! Format Masukan Pada awalnya, program Anda akan menerima label kasus uji. Label kasus uji berisi sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Digit pertama dari label adalah karakter ke-0, digit kedua dari label adalah karakter ke-1, dan seterusnya. Karakter ke-0 akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, dan berisi '.' jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau o jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter kei berisi karakter '.' Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Baris kedua berisi sebuah bilangan bulat N. Baris berikutnya berisi N buah bilangan bulat A1, A2, ..., AN. OSN 2014 – Hari 0 Format Keluaran Sebuah baris berisi banyaknya stupa minimum. Apabila masukan tidak sesuai dengan perkataan sang penjaga (mungkin saja Pak Dengklek salah lihat!), keluarkan sebuah baris berisi -1. Contoh Masukan 1 0..34567 5 2 1 4 2 3 Contoh Keluaran 1 10 Contoh Masukan 2 0..34567 4 2 9 2 2 Contoh Keluaran 2 -1 Penjelasan Untuk contoh masukan pertama, di kawasan tersebut terdapat: 1 buah stupa setinggi 1 meter 2 buah stupa setinggi 2 meter 3 buah stupa setinggi 3 meter 4 buah stupa setinggi 4 meter sehingga terdapat total 10 buah stupa. Untuk contoh masukan kedua, Pak Dengklek melihat 3 buah stupa setinggi 2 meter. Hal ini tidak sesuai dengan perkataan sang penjaga, oleh karena itu Pak Dengklek pasti salah lihat. Subsoal Subsoal 1 (7 poin) N = 10 Ai = i Kasus uji dapat diunduh di sini. Subsoal 2 (11 poin) N=8 OSN 2014 – Hari 0 1 ≤ Ai ≤ 10 Kasus uji dapat diunduh di sini. Subsoal 3 (7 poin) N=1 1 ≤ A1 ≤ 1.000 Subsoal 4 (11 poin) 1 ≤ N ≤ 1.000 1 ≤ A1 = A2 = ... = AN ≤ 1.000 Subsoal 5 (17 poin) 1 ≤ N ≤ 1.000 1 ≤ Ai ≤ 1.000 Subsoal 6 (20 poin) 1 ≤ N ≤ 100.000 1 ≤ Ai ≤ 100.000 Subsoal 7 (27 poin) 1 ≤ N ≤ 100.000 1 ≤ Ai ≤ 1.000.000.000 OSN 2014 – Hari 1 Cat Rumah Batas Waktu 1 detik Batas Memori 256 MB Deskripsi Hari ini Pak Dengklek ingin mengecat rumahnya dengan warna favorit bebek-bebeknya. Karena Pak Dengklek hanya memiliki kaleng-kaleng cat dengan warna dasar (merah, kuning, dan biru), maka Pak Dengklek menyiapkan sebuah ember dengan kapasitas maksimal 1.000 cc untuk mencampurkan ketiga warna dasar tersebut menjadi warna favorit bebek-bebeknya. Pada suatu waktu, Pak Dengklek dapat menambahkan suatu warna dasar sebanyak sejumlah cc ke dalam embernya kemudian mencampurkannya. Perlu diperhatikan bahwa campuran warna tersebut tidak boleh melebihi kapasitas ember. Karena cat yang dipakai Pak Dengklek mudah mengering, maka Pak Dengklek hanya dapat melakukan proses menambahkan dan mencampurkan ini maksimal sebanyak 100 kali. Setelah melakukan proses menambahkan dan mencampurkan ini, campuran warna di ember akan dipakai untuk mengecat rumah. Warna favorit bebek-bebek Pak Dengklek didapat dengan mencampurkan M cc warna Merah, K cc warna Kuning, dan B cc warna Biru dengan ketentuan M + K + B = 1.000. Perlu diperhatikan bahwa nilai M, K, dan B tidak dijamin berupa bilangan bulat. Sayangnya, bebek-bebek Pak Dengklek tidak mengetahui nama dari warna favorit mereka sehingga mereka hanya dapat memberi tahu nilai kemiripan antara warna favorit mereka dengan warna yang berada pada ember Pak Dengklek. Nilai kemiripan tersebut dihitung dengan ketentuan berikut: Dimisalkan campuran warna di ember Pak Dengklek saat ini yaitu X cc warna merah, Y cc warna Kuning, dan Z cc warna Biru. Jarak warna antara warna di ember Pak Dengklek dengan warna favorit Bebek (W) dihitung dengan meminimalkan nilai (|kX - M| + |kY - K| + |kZ - B|) untuk suatu nilai riil k. Sebagai catatan, pasti setidaknya ada satu dari ketiga nilai |kX - M|, |kY - K|, atau |kZ - B| yang sama dengan nol untuk mendapatkan nilai W. Nilai kemiripan (F) dihitung dengan formula: Sebagai contoh, apabila nilai M, K, dan B berturut-turut bernilai 200, 600, dan 200; serta nilai X, Y, dan Z berturut-turut bernilai 125, 200, dan 50; maka: Untuk mendapatkan nilai W, perhatikan bahwa salah satu dari ketiga nilai adalah 0. o Apabila nilai |kX - M| = 0, maka k = 1,6. Sehingga nilai (|kX - M| + |kY - K| + |kZ - B|) = 400. OSN 2014 – Hari 1 o Apabila nilai |kY - K| = 0, maka k = 3. Sehingga nilai (|kX - M| + |kY - K| + |kZ - B|) = 225. o Apabila nilai |kZ-B| = 0, maka k = 4. Sehingga nilai (|kX - M| + |kY - K| + |kZ - B|) = 500. Nilai W adalah nilai minimum dari ketiganya, sehingga W = 225. Nilai F dihitung dengan formula F = 40. Sehingga pada setiap Pak Dengklek melakukan proses menambahkan dan mencampurkan (yang telah dijelaskan pada paragraf 2), bebek-bebek Pak Dengklek akan memberi tahu nilai F kepada Pak Dengklek. Bantulah Pak Dengklek untuk mengecat rumahnya dengan warna semirip mungkin dengan warna favorit bebek-bebeknya, yaitu mendapatkan nilai F sebesar mungkin! Format Interaksi Pada awalnya, program Anda akan menerima label kasus uji. Label kasus uji berisi sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Digit pertama dari label adalah karakter ke-0, digit kedua dari label adalah karakter ke-1, dan seterusnya. Karakter ke-0 akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, atau berisi '.' jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau o jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter kei berisi karakter '.' Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Selama interaksi berlangsung, program Anda diharuskan mencetak salah satu dari dua perintah: TAMBAH [WARNA] [TAKARAN] dan SELESAI. Cetaklah TAMBAH [WARNA] [TAKARAN], jika Anda hendak menambahkan [TAKARAN] cc cat berwarna [WARNA] ke dalam ember. Volume cairan setelah ditambahkan tidak boleh melebihi kapasitas ember yakni 1.000 cc dan merupakan bilangan riil positif dengan 4 angka di belakang koma. Warna yang boleh ditambahkan hanyalah warna MERAH, KUNING, atau pun BIRU. Perhatikan bahwa perintah ini hanya dapat dipanggil maksimal 100 kali. Setelah mencetak perintah ini, program anda akan menerima input sebuah bilangan riil F persen dengan 4 angka di belakang koma sesuai dengan deskripsi soal. Cetaklah SELESAI, jika Anda hendak menyelesaikan proses menambahkan dan mencampurkan. Campuran cat yang berada di dalam ember akan digunakan Pak Dengklek OSN 2014 – Hari 1 untuk mengecat rumahnya. Setelah mencetak perintah ini, interaksi akan selesai dan penilaian akan dilakukan. Contoh Interaksi Umpan Balik Grader Keluaran Program Peserta Informasi Tambahan (Pak Dengklek) (Bebek) 0..3 TAMBAH MERAH 100.0000 0.0000 W = 800.0000 11.8159 W = 486.0267 30.7180 W = 300.0000 51.0102 W = 150.0000 40.0000 W = 225.0000 TAMBAH KUNING 123.4500 TAMBAH KUNING 76.5500 TAMBAH BIRU 50.0000 TAMBAH MERAH 25.0000 SELESAI (interaksi selesai) Penjelasan Contoh Interaksi Pada kasus tersebut, nilai M, K, dan B berturut-turut bernilai 200, 600, dan 200. Pada akhirnya, warna yang digunakan Pak Dengklek untuk mengecat rumahnya merupakan campuran dari : X = 125 cc warna Merah, Y = 200 cc warna Kuning, dan Z = 50 cc warna Biru. Nilai yang didapatkan peserta adalah nilai F terakhir yaitu 40. Subsoal Tidak ada subsoal pada soal ini. Poin total yang Anda peroleh adalah akumulasi nilai dari 100 buah kasus uji. Semua kasus uji akan termasuk di dalam setidaknya 1 dari 3 himpunan kasus uji berikut. Himpunan Kasus Uji 1 (20 kasus uji) M=K Nilai M, K, dan B adalah sebuah bilangan bulat. OSN 2014 – Hari 1 Himpunan Kasus Uji 2 (30 kasus uji) B = 500 Nilai M, K, dan B tidak dipastikan sebuah bilangan bulat. Himpunan Kasus Uji 3 (50 kasus uji) Nilai M, K, dan B tidak dipastikan sebuah bilangan bulat. Untuk membantu Anda memahami interaksi, disediakan game yang dapat diakses di sini. Kasus uji yang diberikan pada game ini hanyalah untuk visualisasi dan tidak termasuk dalam penilaian seperti pada game di soal interaktif sebelumnya. Catatan Yang perlu diperhatikan adalah bahwa untuk tipe soal interaktif seperti ini, Anda harus selalu memberikan perintah "fflush(stdout);" (bagi pengguna C/C++) atau "flush(output);" (bagi pengguna PASCAL) setiap kali Anda mencetak keluaran (dengan kata lain, setiap kali ada perintah mencetak keluaran misalnya write, writeln, printf, cout, atau puts, tepat di bawahnya harus ada perintah fflush/flush). Sebagai contoh, berikut adalah contoh source code dalam bahasa Pascal yang selalu hanya menambahkan 100 cc cat untuk masing-masing warna ke dalam ember. var subsoal: string; F: double; m, k, b: double; begin m := 100; k := 100; b := 100; readln(subsoal); writeln('TAMBAH MERAH ', m:0:4); flush(output); // baca keluran dari grader, meskipun tidak digunakan readln(F); writeln('TAMBAH KUNING ', k:0:4); flush(output); // baca keluran dari grader, meskipun tidak digunakan readln(F); writeln('TAMBAH BIRU ', b:0:4); flush(output); // baca keluran dari grader, meskipun tidak digunakan readln(F); writeln('SELESAI'); end. OSN 2014 – Hari 1 Dan berikut adalah contoh source code dalam bahasa C dan C++. #include <stdio.h> #include <string.h> char subsoal[100]; double F; double m, k, b; int main() { m = 100; k = 100; b = 100; scanf("%s", subsoal); printf("TAMBAH MERAH %.4lf\n", m); fflush(stdout); /* baca keluran dari grader, meskipun tidak digunakan */ scanf("%lf", &F); printf("TAMBAH KUNING %.4lf\n", k); fflush(stdout); /* baca keluran dari grader, meskipun tidak digunakan */ scanf("%lf", &F); printf("TAMBAH BIRU %.4lf\n", b); fflush(stdout); /* baca keluran dari grader, meskipun tidak digunakan */ scanf("%lf", &F); printf("SELESAI\n"); fflush(stdout); return 0; } Peringatan Apabila program Anda melakukan salah satu dari hal-hal di bawah ini: melakukan tindakan tidak sesuai format sehingga tidak dikenali oleh grader, memanggil perintah TAMBAH lebih dari 100 kali, menambahkan cat hingga melebihi kapasitas ember, atau menambahkan cat dengan takaran bilangan negatif. maka program Anda akan dihentikan secara otomatis dan Anda memperoleh nilai 0 pada kasus uji yang bersangkutan. Meskipun memperoleh nilai 0, perhatikan bahwa Anda tetap mendapatkan verdict Accepted untuk kasus uji tersebut. OSN 2014 – Hari 1 Reduksi Pesan Batas Waktu 1 detik Batas Memori 32 MB Deskripsi Pak Dengklek bersama tim risetnya sedang mengembangkan program untuk mereduksi pesan yang berupa sederetan huruf alfabet kapital (A – Z). Program ini sudah selesai dikembangkan, dan kini memasuki tahap pengujian. Sayangnya, Pak Dengklek dan tim kebingungan bagaimana memastikan bahwa program yang mereka kembangkan bekerja dengan baik. Akhirnya ia meminta bantuan Anda untuk membuat program yang dapat membantu mengoreksi pekerjaan Pak Dengklek. Program yang diinginkan Pak Dengklek sederhana. Anda akan diberikan sebuah untaian pesan berisi simbol A – Z (semua kapital) tanpa spasi. Setiap huruf akan dinomori 1 sampai N, dengan N adalah panjang dari pesan itu sendiri. Kemudian Pak Dengklek akan memberikan beberapa pertanyaan yang dinyatakan oleh pasangan bilangan i dan j. Program anda harus mengeluarkan hasil reduksi substring dari posisi ke-i hingga posisi ke-j. Adapun aturan reduksi yang diinginkan adalah sebagai berikut: Untuk setiap sekumpulan huruf yang saling bersebelahan dan memiliki simbol yang sama, hapus semua kecuali satu. Dengan kata lain, pada hasil reduksi pesan, tidak ada dua huruf yang sama akan saling bersebelahan. Contoh: HAALLLLLOOOOO → HALO, MATARAM → MATARAM, dan AAAAA → A. Hitung panjang pesan setelah dilakukan proses reduksi. Keluarkan angka ini, karena ini merupakan informasi yang penting untuk Pak Dengklek. Contoh: HAALLLLLOOOOO → HALO (4 huruf). Jika panjang pesan yang tereduksi lebih kecil dari 10, cetak juga pesan hasil reduksi tersebut. Bisakah Anda menyelesaikan program yang diinginkan Pak Dengklek? Sebagai catatan, Pak Dengklek hanya memberikan Anda sedikit waktu karena sebentar lagi hasil penelitian mereka akan dipublikasikan. Format Masukan Pada baris pertama, program Anda akan menerima label kasus uji. Label kasus uji berisi sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Digit pertama dari label adalah karakter ke-0, digit kedua dari label adalah karakter ke-1, dan seterusnya. Karakter ke-0 akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, atau berisi '.' jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: OSN 2014 – Hari 1 o o jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter kei berisi karakter '.' Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Baris kedua berisi 2 bilangan, N dan Q, dimana N adalah panjang pesan dan Q adalah banyaknya pertanyaan. Baris berikutnya adalah sebuah pesan yang terdiri dari simbol A – Z, sepanjang N. Q baris berikutnya berisi 2 buah bilangan i dan j. Format Keluaran Untuk setiap pertanyaan, keluarkan panjang pesan setelah melakukan reduksi potongan pesan dari posisi ke-i hingga posisi ke-j. Apabila panjang pesan lebih kecil dari 10, maka tampilkan hasil reduksinya di baris yang sama dipisahkan oleh spasi. Contoh Masukan 0..345 20 5 AAABBCCCCCQWERTYUIOP 1 1 1 3 2 9 1 20 18 20 Contoh Keluaran 1 A 1 A 3 ABC 13 3 IOP Subsoal Subsoal 1 (7 poin) N = 15 Q = 10 Kasus uji dapat diunduh di sini. Subsoal 2 (11 poin) OSN 2014 – Hari 1 N = 100 Q = 10 Kasus uji dapat diunduh di sini. Subsoal 3 (21 poin) 1 ≤ N ≤ 100 1 ≤ Q ≤ 100 Subsoal 4 (27 poin) 1 ≤ N ≤ 100 1 ≤ Q ≤ 100.000 Subsoal 5 (34 poin) 1 ≤ N ≤ 100.000 1 ≤ Q ≤ 100.000 Peringatan Bagi pengguna C/C++ diwajibkan untuk menggunakan perintah scanf() (bukan cin()) untuk membaca masukan pada soal ini agar tidak terjebak Time Limit Exceeded. OSN 2014 – Hari 1 Pelontar Bebek Batas Waktu 1 detik Batas Memori 32 MB Deskripsi Kwek dan Kwak, seperti layaknya bebek lain sedang seru-serunya bermain permainan “Rocket Duck”. Pada Rocket Duck, pemain menjalankan seekor bebek bernama “Rocky” yang ingin mencari arti hidup, yang diyakini berada diujung belahan dunia. Di luar dugaan, Rocky mencari arti hidup dengan cara yang tidak biasa dan ironis: melempar dirinya sejauh mungkin dengan alat pelontar (dan berharap mencapai ujung belahan dunia). Tentu ini cara yang ekstrim dan berbahaya. Tapi siapa peduli, Rocky hanyalah sebuah tokoh imaginer dalam sebuah game, yang terpenting bahwa permainan ini berhasil memikat banyak bebek muda. Semua bebek ambisius mengejar high-score di Rocket Duck, begitu pula Kwek dan Kwak. Mereka membayangkan namanya terpampang pada tabel leaderboard, yang menjadi sebuah kepuasan tersendiri bagi mereka. Namun Kwek dan Kwak punya kehidupan lain, mereka tidak bisa terus menerus bermain Rocket Duck. Sehingga kemampuan mereka tidak sejago pemain lainnya. Untungnya Kwek dan Kwak kenal dengan Anda, sang programmer handal yang konon dapat menyelesaikan berbagai masalah hanya dengan hentakan jari-jemari di atas keyboard. Kini mereka memerlukan bantuan kalian untuk mengejar high-score pada permainan Rocket Duck. Rocket Duck adalah permainan 2D, di mana pemain berusaha mencapai jarak terjauh dengan menggunakan alat pelontar bebek. Alat ini dapat melontarkan bebek pada derajat dan kecepatan awal tertentu. Bebek kemudian bergerak secara parabola, hingga akhirnya jatuh ke tanah. Nilai yang didapat dari pemain adalah jarak yang dicapai. Makin jauh jarak yang dicapai, makin tinggi nilai yang didapat. Mekanisme lontaran roket mengikuti mekanisme dasar gerak parabolik. Berikut ini adalah ilustrasi mekanisme dari gerak parabolik: Untuk Pemain, akan disediakan beberapa pilihan roda gigi untuk merakit pelontar bebek. Setiap roda gigi memiliki dua properti, yaitu nilai kecepatan K dan nilai sudut S. Sebuah pelontar bebek nantinya akan terdiri dari beberapa roda gigi yang terpasang pada mesin. Sudut akhir dari mesin pelontar ini adalah total nilai sudut dari semua roda gigi yang dipasang. Kecepatan dari mesin pelontar ini adalah kecepatan maksimum dari semua roda gigi yang dipasang. OSN 2014 – Hari 1 Sebagai tambahan, mesin pelontar ini tidak bisa menembak dengan sudut yang lebih besar dari 180 derajat. Artinya konfigurasi mesin yang menyebabkan hal tersebut terjadi tidak diperbolehkan. Perlu diperhatikan pula bahwa nilai pemain didapat dari jauhnya jarak. Artinya arah tembak dapat diabaikan (sudut kurang dari 90 derajat memiliki arah tembak berlawanan dengan sudut lebih dari 90 derajat). Jumlah roda gigi yang ada bersifat terbatas, artinya pemain hanya dapat memakai tiap roda gigi maksimal sekali saja. Untuk membantu, berikut adalah rumus untuk menghitung jarak tembak X pada permainan Rocket Duck, diberikan nilai sudut a dan kecepatan awal V0. Bantulah Kwek dan Kwak memilih konfigurasi roda gigi optimal, untuk mendapatkan jarak terjauh. Format Masukan Pada baris pertama, program Anda akan menerima label kasus uji. Label kasus uji berisi sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Digit pertama dari label adalah karakter ke-0, digit kedua dari label adalah karakter ke-1, dan seterusnya. Karakter ke-0 akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, atau berisi '.' jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau o jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter kei berisi karakter '.' Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Baris kedua adalah bilangan N yang menyatakan banyaknya pilihan roda gigi yang tersedia. N baris berikutnya terdiri dari dua angka Ki dan Si, yang menyatakan nilai kecepatan dan nilai sudut dari roda gigi yang bersesuaian. Nilai sudut diberikan dengan skala perbesaran 10× lipat sehingga nilai sudut 900 maksudnya adalah 90 derajat, nilai sudut 135 maksudnya adalah 13,5 derajat, dan sebagainya. Format Keluaran Untuk tiap kasus uji, keluarkan sebuah bilangan riil hingga 12 angka di belakang penanda desimal yang menyatakan jarak terjauh yang dapat dicapai dengan konfigurasi roda gigi OSN 2014 – Hari 1 optimal. Perbedaan perhitungan absolut atau perhitungan relatif di bawah 0,001 akan diterima. Contoh Masukan 0..3.567 3 50 160 105 320 101 290 Contoh Keluaran 107453.118185065090 Subsoal Pada semua subsoal, berlaku: 1 ≤ Si ≤ 1.800 Ki dan Si adalah bilangan bulat. Subsoal 1 (8 poin) N=5 1 ≤ Ki ≤ 100 Nilai K tiap roda gigi adalah sama. Kasus uji dapat diunduh di sini. Subsoal 2 (10 poin) N=5 1 ≤ Ki ≤ 100 Kasus uji dapat diunduh di sini. Subsoal 3 (13 poin) 1 ≤ N ≤ 10 1 ≤ Ki ≤ 100 Subsoal 4 (14 poin) 1 ≤ N ≤ 50 1 ≤ Ki ≤ 100 Nilai K tiap roda gigi adalah sama. Subsoal 5 (15 poin) 1 ≤ N ≤ 50 1 ≤ Ki ≤ 100 OSN 2014 – Hari 1 Subsoal 6 (19 poin) 1 ≤ N ≤ 1.000 1 ≤ Ki ≤ 1.000 Subsoal 7 (21 poin) 1 ≤ N ≤ 500.000 1 ≤ Ki ≤ 1.000 Catatan Untuk melakukan perhitungan sin(a) atau cos(a), terdapat fungsi yang sudah ada dan bisa Anda gunakan baik pada Pascal maupun pada C/C++. Namun, kedua fungsi itu menerima sudut bukan dalam derajat, melainkan dalam radian (satuan yang lain untuk sudut). Anda dapat menggunakan fungsi berikut untuk merubah derajat menjadi radian. Jika menggunakan Pascal, Anda wajib menuliskan 'uses math' sebelum mendeklarasikan variabel. Contoh program: uses math; var sudut:double; function toRadian(a:double):double; begin toRadian := (a * arccos(-1)) / 180; end; begin sudut := 20; // perhatikan bahwa sudut ini tidak dalam perbesaran 10x lipat // menghitung sin(20) writeln(sin(toRadian(sudut))); // hasilnya: 3.4202014332566871E-0001 // menghitung cos(20) writeln(cos(toRadian(sudut))); // hasilnya: 9.3969262078590839E-0001 end. Jika menggunakan C++, Anda wajib menulis '#include <cmath>' pada bagian deklarasi library yang akan digunakan. Contoh program: #include <cstdio> #include <cmath> double sudut; double toRadian(double a){ return (a * acos(-1)) / 180; } int main() { sudut = 20; /* perhatikan bahwa sudut ini tidak dalam perbesaran 10x lipat */ OSN 2014 – Hari 1 /* menghitung sin(20) */ printf("%lf\n", sin(toRadian(sudut))); /* hasil: 0.342020 */ /* menghitung cos(20) */ printf("%lf\n", cos(toRadian(sudut))); /* hasil: 0.939693 */ return 0; } Jika menggunakan C, Anda wajib menulis '#include <math.h>' pada bagian deklarasi library yang akan digunakan. Contoh program: #include <stdio.h> #include <math.h> double sudut; double toRadian(double a){ return (a * acos(-1)) / 180; } int main() { sudut = 20; /* perhatikan bahwa sudut ini tidak dalam perbesaran 10x lipat */ /* menghitung sin(20) */ printf("%lf\n", sin(toRadian(sudut))); /* hasil: 0.342020 */ /* menghitung cos(20) */ printf("%lf\n", cos(toRadian(sudut))); /* hasil: 0.939693 */ return 0; } Peringatan Gunakan tipe data double untuk menggantikan tipe data real/float agar ketelitian bilangan riil menjadi lebih tinggi. Perhatikan potongan-potongan kode program di atas sebagai contoh penggunaannya. OSN 2014 – Hari 1 Perang Dunia Ketiga Batas Waktu 0,5 detik Batas Memori 64 MB Deskripsi Perang dunia ketiga sudah pecah! Kedamaian di Negara Bebek pun terancam. Pak Dengklek yang sangat cinta Negara Bebek pun membuat sebuah senjata canggih yang menggunakan teknologi laser dan diyakini mampu menghancurkan musuh sekuat apapun. Senjata canggih Pak Dengklek memiliki sebuah layar dan 3 tombol: 1. 2. 3. 4. Layar: Untuk menampilkan kekuatan laser saat ini (harus selalu berupa bilangan asli). Tombol "Tembak": Untuk menembakkan laser ke musuh. Tombol "Kali 2": Membuat laser menjadi 2 kali lebih kuat dari sebelumnya. Tombol "Bagi 2": Membuat kekuatan laser menjadi setengah dari sebelumnya. Jika kekuatan laser sebelum dilakukan operasi ini berupa bilangan ganjil, maka tidak terjadi apa-apa. Nilai awal kekuatan laser hanya dapat diatur sekali sebelum pasukan musuh datang, karena untuk mengganti kekuatan laser membutuhkan waktu yang sangat lama (kecuali menggunakan tombol "Kali 2" dan tombol "Bagi 2"). Perhatikan bahwa nilai awal kekuatan laser ini harus lebih dari 0. Senjata laser buatan Pak Dengklek ini tentunya menggunakan daya yang sangat besar. Pak Dengklek berkata bahwa untuk setiap satuan kekuatan laser yang ditembakkan menggunakan 1 unit energi. Tentunya kekuatan setiap pasukan musuh berbeda-beda, sehingga kekuatan laser yang diperlukan untuk menghancurkan mereka pun bisa jadi berbeda-beda. Untungnya, BINB (Badan Intelijen Negara Bebek) sudah mengetahui kekuatan musuh yang akan menyerang Negara Bebek dan sudah menghitung kekuatan laser yang diperlukan untuk menghancurkan masing-masing musuh. Diberikan kekuatan laser minimum yang dibutuhkan untuk menghancurkan pasukan-pasukan negara musuh, berapa minimal unit energi yang harus terbuang untuk menghancurkan seluruh pasukan musuh? Anda harus menentukan nilai awal kekuatan laser, yang boleh ditentukan secara bebas. Unit energi yang terbuang untuk menghancurkan satu pasukan musuh didefinisikan sebagai selisih dari unit energi minimal untuk menghancurkan pasukan tersebut dan unit energi yang digunakan Negara Bebek untuk menghancurkan pasukan tersebut. Sedangkan unit energi yang terbuang untuk menghancurkan seluruh musuh adalah jumlah dari unit energi yang terbuang untuk setiap pasukan musuh. OSN 2014 – Hari 1 Format Masukan Pada awalnya, program Anda akan menerima label kasus uji. Label kasus uji berisi sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Digit pertama dari label adalah karakter ke-0, digit kedua dari label adalah karakter ke-1, dan seterusnya. Karakter ke-0 akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, atau berisi '.' jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau o jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter kei berisi karakter '.' Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Baris kedua pada berkas masukan berisi sebuah bilangan bulat N yang menyatakan banyaknya pasukan musuh yang akan menyerang Negara Bebek. Baris ketiga berisi N buah bilangan bulat non-negatif Xi yang menyatakan kekuatan laser minimum untuk menghancurkan pasukan ke-i. Format Keluaran Sebuah baris berisi sebuah bilangan bulat yang menyatakan unit energi yang terbuang minimal yang diperlukan untuk menghancurkan semua pasukan musuh. Contoh Masukan 1 0..3456 2 7 31 Contoh Keluaran 1 2 Contoh Masukan 2 0..3456 3 4 8 2 Contoh Keluaran 2 OSN 2014 – Hari 1 0 Penjelasan Untuk contoh masukan nomor 1, kekuatan awal laser dapat diset sama dengan 8. Saat pasukan musuh nomor 1 datang, pasukan nomor 1 tersebut dapat langsung dihancurkan dengan menggunakan 8 unit energi (sehingga 8 - 7 = 1 unit energi terbuang). Saat pasukan musuh nomor 2 datang, Pak Dengklek bisa menekan tombol "Kali 2" sebanyak 2 kali dan menghancurkannya dengan menggunakan 32 unit energi (sehingga 32 - 31 = 1 unit energi terbuang). Total 2 unit energi terbuang untuk menghancurkan pasukan musuh. Untuk contoh masukan nomor 2, kekuatan awal laser diset sama dengan 4. Saat pasukan musuh nomor 1 datang, pasukan nomor 1 tersebut dapat langsung dihancurkan dengan menggunakan 4 unit energi (sehingga 4 -4 = 0 unit energi terbuang). Saat pasukan nomor 2 datang, Pak Dengklek bisa menekan tombol "Kali 2" sebanyak 1 kali dan menghancurkannya dengan menggunakan 8 unit energi (sehingga 8 - 8 = 0 unit energi terbuang). Saat pasukan musuh nomor 3 datang, kita bisa menekan tombol "Bagi 2" sebanyak 2 kali dan menghancurkannya dengan menggunakan 2 unit energi (sehingga 2 - 2 = 0 unit energi terbuang). Total 0 unit energi terbuang untuk menghancurkan pasukan musuh. Subsoal Subsoal 1 (11 poin) N = 10 Xi = i Kasus uji dapat diunduh di sini. Subsoal 2 (7 poin) N = 12 0 ≤ Xi ≤ 10 Kasus uji dapat diunduh di sini. Subsoal 3 (23 poin) 1 ≤ N ≤ 100 0 ≤ Xi ≤ 100 Subsoal 4 (12 poin) 1 ≤ N ≤ 3.000 0 ≤ Xi ≤ 3.000 Subsoal 5 (31 poin) 1 ≤ N ≤ 100.000 0 ≤ Xi ≤ 100.000 Subsoal 6 (16 poin) OSN 2014 – Hari 1 1 ≤ N ≤ 1.000.000 0 ≤ Xi ≤ 1.000.000 Peringatan Bagi pengguna C/C++ diwajibkan untuk menggunakan perintah scanf() (bukan cin()) untuk membaca masukan pada soal ini agar tidak terjebak Time Limit Exceeded. OSN 2014 – Hari 2 Sang Pelompat Batas Waktu 1 detik Batas Memori 64 MB Deskripsi Kwik adalah bebek Pak Dengklek yang senang menonton TV. Salah satu film favoritnya adalah serial “The Indiana Duck”. Serial ini mengisahkan seekor bebek yang bekerja sebagai arkeologi dan menemukan harta karun historis di seluruh dunia. Indiana Duck terkenal dengan atribut legendarisnya berupa topi koboi dan cambuk untuk membela diri dari serangan musuh. Pada suatu hari, Kwik menemukan peta harta karun dalam kotak kecil di salah satu sudut gudang Pak Dengklek. Dalam peta itu tertulis jika seseorang mendaki turun melalui sumur tua di belakang gudang, maka ia akan menemui gua raksasa berukuran R × C dengan lautan magma di bawahnya. Dari dasar lautan magma tersebut menyembul beberapa bongkahan batu keras yang dapat digunakan sebagai pijakan. Pada salah satu bongkahan batu terdapat harta karun yang sudah dijaga selama beberapa generasi keluarga Dengklek. Kwik sangat senang karena dia bisa berlagak meniru Indiana Duck tokoh idolanya. Satu-satunya cara untuk berpindah dari suatu bongkahan batu ke bongkahan batu lainnya adalah dengan melompat (Kwik tidak boleh menyentuh lautan magma jika ingin kembali hidup-hidup). Selama berada dalam suatu bongkahan batu, Kwik dapat menjelajahi bongkahan batu tersebut tanpa perlu melompat (misalnya, untuk berpindah ke sisi lain kemudian baru melompat). 2 petak batu akan membentuk sebuah bongkahan batu besar jika kedua petak batu tersebut berbagi sisi. Karena Kwik masih kecil, dia tidak dapat melakukan gerakan yang sulit. Kwik hanya bisa melompat untuk menyeberangi lautan magma secara garis lurus (tidak dapat berbelok di udara). Kwik juga hanya dapat melompat ke arah utara, timur, selatan, atau barat. Karena perjalanan panjang, Kwik akan menghemat tenaganya dan akan selalu mendarat di bongkahan batu terdekat yang ditemuinya di arah lompatan. Kwik berencana mendapatkan harta karun yang disebutkan dalam peta Kwik pun menceritakan rencana hebatnya kepada Anda dan meminta agar Anda tidak melapor ke Pak Dengklek. Anda sangat khawatir dengan keselamatan Kwik, namun Anda juga tidak bisa menemani Kwik dalam petualangannya karena Anda tidak ingin ketinggalan acara “Duck’s Got Talent”. Karena itu Anda hendak membantu Kwik dengan menentukan berapa lompatan minimal yang harus dilakukan Kwik agar dapat sampai ke harta karun (tentunya, semakin sedikit melompat akan menghemat energi Kwik dan menjamin keselamatannya). Format Masukan Pada awalnya, program Anda akan menerima label kasus uji. Label kasus uji berisi sebuah string yang dijelaskan sebagai berikut: OSN 2014 – Hari 2 Panjang string tersebut adalah banyaknya subsoal ditambah satu. Digit pertama dari label adalah karakter ke-0, digit kedua dari label adalah karakter ke-1, dan seterusnya. Karakter ke-0 akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, atau berisi '.' jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau o jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter kei berisi karakter '.' Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Baris kedua dalam berkas masukan berisi 2 buah bilangan R dan C yang dipisahkan oleh tepat sebuah spasi. R baris berikutnya berisi C buah karakter yang menyatakan konfigurasi petak batu dan lokasi harta karun sesuai deskripsi dalam peta. Sebuah petak dalam gua raksasa tersebut hanya dapat berupa salah satu dari kemungkinan karakter di bawah ini. 1. ‘#’ : petak tersebut merupakan petak batu yang bisa diinjak. 2. ‘.’ : petak tersebut merupakan lautan magma yang tidak boleh diinjak. 3. ‘S’ : petak ini merupakan bagian akhir dari tangga pada sumur, atau dengan kata lain tempat Kwik memulai petualangannya. Petak ini pasti merupakan bagian dari petak batu yang bisa diinjak. 4. ‘T’ : petak ini tempat harta karun yang dimaksud. Petak ini pasti merupakan bagian dari petak batu yang diinjak. Format Keluaran Cetak sebuah bilangan dalam 1 baris yang menyatakan berapa banyak lompatan paling sedikit yang harus dilakukan Kwik agar dapat sampai ke petak harta karun. Cetak -1 jika Kwik tidak akan pernah menemukan harta karun. Contoh Masukan 0....56 7 7 #....#T #..#... ..##..# ...#..# .#.#..# .#..S.. .#..#.. Contoh Keluaran 4 OSN 2014 – Hari 2 Penjelasan Berikut adalah ilustrasi lompatan yang dilakukan oleh Kwik. Petak berwarna coklat menyatakan petak batu yang dapat diinjak, sedangkan petak berwarna merah menyatakan lautan magma yang tidak boleh disentuh. Panah biru menandakan lompatan yang Kwik lakukan. Panah hijau menandakan pergerakan di atas petak batu yang dilakukan Kwik. Pada ilustrasi di atas terlihat Kwik harus melompat paling sedikit 4 kali untuk dapat sampai ke bongkahan batu berisi harta karun. Tidak ada jalur lain yang dapat menghasilkan kurang dari 4 lompatan. Subtask Pada semua subsoal, berlaku: Banyaknya bongkahan batu tidak melebihi 1.000. Subsoal 1 (11 poin) R = 12 C = 12 Semua bongkahan batu terdiri dari tepat satu petak batu. Berkas kasus uji bisa diunduh di sini. Subsoal 2 (8 poin) R = 12 C = 12 Berkas kasus uji bisa diunduh di sini. Subsoal 3 (18 poin) OSN 2014 – Hari 2 1 ≤ R, C ≤ 100 Semua bongkahan batu terdiri dari tepat satu petak batu. Subsoal 4 (21 poin) 1 ≤ R, C ≤ 100 Semua bongkahan batu berbentuk persegi panjang. Subsoal 5 (26 poin) 1 ≤ R, C ≤ 100 Subsoal 6 (16 poin) 1 ≤ R, C ≤ 1.000 OSN 2014 – Hari 2 Suten Batas Waktu 1 detik Batas Memori 32 MB Deskripsi Tahukah anda apa itu suten? Suten, sut, suit (suwit), atau pingsut adalah cara mengundi untuk dua orang dengan cara mengadu jari untuk menentukan siapa yang menang. Di Indonesia, jari yang dipergunakan dalam suten adalah ibu jari yang diumpamakan sebagai gajah, jari telunjuk yang diumpamakan sebagai manusia, dan jari kelingking yang diumpamakan sebagai semut. Dua orang yang bersuten secara serentak mengacungkan jari yang dipilihnya. Hasilnya seri terjadi bila kedua belah pihak yang bersuten mengacungkan jari yang berkekuatan sama, misalnya: kelingking melawan kelingking. Biasanya, apabila terjadi seri maka suten diulang hingga ada pihak yang menang, namun peraturan ini tidak berlaku untuk saat ini. Jari yang menjadi pemenang suten: Ibu jari versus telunjuk: pemenang adalah ibu jari. Telunjuk versus kelingking: pemenang adalah telunjuk. Kelingking versus ibu jari: pemenang adalah kelingking. Anda, sebagai salah satu finalis OSN Komputer 2014, diminta untuk menyelesaikan tantangan berikut. Ada N anak yang bermain suten bersama-sama. Anak-anak ini memiliki jari favorit mereka masing-masing sehingga setiap melakukan suten, mereka selalu mengeluarkan jari favoritnya untuk diadu. Setiap anak melakukan suten dengan anak lainnya tepat sekali, sehingga ada (N × (N - 1)) / 2 buah pertandingan suten yang akan dilakukan. Diberikan nilai N, Anda (dan program Anda) akan ditanyakan (N × (N - 1)) / 2 buah pertandingan suten dan menentukan siapa pemenangnya (atau menentukan adanya seri). Apabila Anda salah menjawab, maka secara otomatis Anda gagal menyelesaikan tantangan dan akan mendapatkan nilai 0. Karena Anda tidak mengetahui jari favorit masing-masing anak, Anda diperbolehkan untuk memilih PASS atau memilih untuk tidak menjawab sebuah pertandingan. Apabila Anda memilih untuk PASS, maka anda akan diberikan hasil pertandingan tersebut. Anda diminta untuk memilih PASS sesedikit mungkin, dengan kata lain Anda diminta untuk menjawab setiap hasil pertandingan sebanyak mungkin. Format Interaksi OSN 2014 – Hari 2 Pada awalnya, program Anda akan menerima label kasus uji. Label kasus uji berisi sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Digit pertama dari label adalah karakter ke-0, digit kedua dari label adalah karakter ke-1, dan seterusnya. Karakter ke-0 akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, dan berisi '.' jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau o jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter kei berisi karakter '.' Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Kemudian, program Anda akan menerima input sebuah bilangan N yaitu banyaknya anak yang bermain suten. Kemudian, sebanyak (N × (N - 1)) / 2 kali program Anda akan menerima input 2 buah bilangan X dan Y yang menandakan pertandingan suten antara anak ke-X dan anak ke-Y. Anda diminta untuk mencari tahu hasil pertandingan suten tersebut satu per satu. Keluaran yang dapat Anda keluarkan adalah: Apabila pertandingan suten dimenangkan oleh anak ke-Z, program Anda diminta untuk mengeluarkan output Z MENANG. Apabila pertandingan suten berlangsung seri, program Anda diminta untuk mengeluarkan output SERI. Apabila Anda memilih untuk PASS atau tidak menjawab, program Anda diminta untuk mengeluarkan output PASS. Apabila memilih PASS, maka program Anda akan menerima hasil pertandingan suten tersebut dalam bentuk Z MENANG ataupun SERI. Contoh Interaksi Keluaran Program Peserta Umpan Balik Grader 0....567 4 1 2 SERI OSN 2014 – Hari 2 Keluaran Program Peserta Umpan Balik Grader 1 3 3 MENANG 1 4 1 MENANG 2 3 PASS 3 MENANG 2 4 PASS 2 MENANG 3 4 4 MENANG (interaksi selesai) Penjelasan Contoh Interaksi Pada kasus tersebut terdapat 4 anak yang bermain suten, sehingga terdapat 6 buah pertandingan. Pada kasus tersebut pula, jari favorit masing-masing anak adalah sebagai berikut: Anak ke-1 : Ibu Jari. Anak ke-2 : Ibu Jari. Anak ke-3 : Kelingking. Anak ke-4 : Telunjuk. Karena tidak ada jawaban interaksi yang salah maka interaksi yang terjadi merupakan interaksi yang valid dan program tersebut berhasil menyelesaikan tantangan dengan melakukan 2 kali PASS. Subsoal Pada semua subsoal, berlaku: OSN 2014 – Hari 2 3 ≤ N ≤ 100 Dimisalkan P adalah banyaknya PASS paling banyak yang boleh dilakukan peserta. Subsoal 1 (6 poin) N=5 P=6 Untuk setiap pertandingan, berlaku X < Y. Input pertandingan akan diurutkan dengan aturan berikut: o Pertandingan diurut mula-mula dari nilai X terkecil. o Apabila 2 buah pertandingan memiliki nilai X yang sama, maka diurut mulamula dari nilai Y terkecil. Subsoal 2 (12 poin) N=8 P=7 Khusus untuk subsoal 1 dan subsoal 2: Hanya terdapat sebuah kasus uji (satu subsoal dinyatakan oleh satu kasus uji), yang dapat dimainkan di sini. Anda boleh memainkan permainan ini berulang kali tanpa mendapatkan penalti. Jika Anda sudah memenangkan permainan untuk subsoal tertentu, Anda dapat memilih pilihan pada permainan untuk mengeluarkan source code yang dapat langsung Anda kirimkan ke grader dan menjawab dengan benar pada subsoal yang telah Anda menangkan. Anda tidak diwajibkan memainkan permainan ini untuk mengerjakan kedua subsoal ini. Anda diperbolehkan untuk menulis kode Anda sendiri untuk mengerjakan kedua subsoal ini. Subsoal 3 (8 poin) N=3 P=2 Subsoal 4 (13 poin) P = (N × (N - 1)) / 2 - N + 2 Subsoal 5 (14 poin) P=N-1 Untuk setiap pertandingan, berlaku X < Y Input pertandingan akan diurutkan dengan aturan berikut: o Pertandingan diurut mula-mula dari nilai X terkecil. o Apabila 2 buah pertandingan memiliki nilai X yang sama, maka diurut mulamula dari nilai Y terkecil. Subsoal 6 (19 poin) OSN 2014 – Hari 2 P=N-1 Untuk N - 1 pertandingan pertama, berlaku X < Y. Untuk N - 1 pertandingan pertama, pada pertandingan ke-i nilai Y = i + 1. Subsoal 7 (28 poin) P=N-1 Catatan Yang perlu diperhatikan adalah bahwa untuk tipe soal interaktif seperti ini, Anda harus selalu memberikan perintah "fflush(stdout);" (bagi pengguna C/C++) atau "flush(output);" (bagi pengguna PASCAL) setiap kali Anda mencetak keluaran (dengan kata lain, setiap kali ada perintah mencetak keluaran misalnya write, writeln, printf, cout, atau puts, tepat di bawahnya harus ada perintah fflush/flush). Sebagai contoh, berikut adalah contoh source code dalam bahasa Pascal yang akan selalu menjawab PASS tanpa mempedulikan nilai N yang diberikan. var subsoal, jawaban: string; N, X, Y, i: longint; begin readln(subsoal); readln(N); for i := 1 to (N*(N-1) div 2) do begin readln(X,Y); writeln('PASS'); flush(output); readln(jawaban); end; end. Dan berikut adalah contoh source code dalam bahasa C++. #include <cstdio> #include <cstring> char subsoal[100], jawaban[100]; int N, X, Y, i; int main() { gets(subsoal); scanf("%d\n", N); for (i = 1; i <= N*(N-1)/2; i++) { scanf("%d %d\n", X, Y); printf("PASS\n"); fflush(stdout); gets(jawaban); } OSN 2014 – Hari 2 return 0; } Peringatan Apabila program Anda melakukan salah satu dari hal-hal di bawah ini: melakukan tindakan tidak sesuai format sehingga tidak dikenali oleh grader, salah menjawab di suatu hasil pertandingan, atau selesai menjawab semua hasil pertandingan namun memilih PASS lebih dari P kali, maka program Anda akan dihentikan secara otomatis dan Anda mendapatkan verdict Wrong Answer pada kasus uji yang bersangkutan. OSN 2014 – Hari 2 Hiasan Dinding Batas Waktu 1 detik Batas Memori 64 MB Deskripsi Untuk menyambut OSN 2014, Pak Dengklek berencana membuat sebuah hiasan dinding di laboratorium tempat Bidang Informatika dilaksanakan. Hiasan ini cukup sederhana, yakni hanya terdiri atas paku-paku dan untaian tali. Pak Dengklek memiliki N buah paku untuk membuat hiasan ini. Paku-paku ini dinomori secara unik dari 1 sampai dengan N. Cara membuat hiasan dinding ini adalah sebagai berikut. Mula-mula, Pak Dengklek membariskan paku-paku tersebut dalam sebuah barisan. Lalu, Pak Dengklek memasang paku pertama pada dinding. Untuk setiap paku kedua sampai dengan ke-N secara berurutan, Pak Dengklek melakukan langkah-langkah berikut: 1. Tinjau paku paling atas pada dinding. 2. Misalkan X = paku yang sedang ditinjau, dan Y = paku yang ingin dipasang. a) Jika nomor dari Y < nomor dari X: i. Jika X tidak memiliki paku yang terhubung dengan tali di sebelah kiri bawahnya, pasang Y persis disebelah kiri bawah X, dan hubungkan keduanya menggunakan tali. Pemasangan paku dianggap selesai. ii. Jika X memiliki paku yang terhubung dengan tali di sebelah kiri bawahnya, tinjau paku tersebut dan kembali ke Langkah 2. b) Jika nomor dari Y > nomor dari X: i. (i) Jika X tidak memiliki paku yang terhubung dengan tali di sebelah kanan bawahnya, pasang Y persis di sebelah kanan bawah X, dan hubungkan keduanya menggunakan tali. Pemasangan paku dianggap selesai. ii. Jika X memiliki paku yang terhubung dengan tali di sebelah kanan bawahnya, tinjau paku tersebut dan kembali ke Langkah 2. Sebagai contoh, misalkan Pak Dengklek ingin memasang paku keenam bernomor 8. Berikut adalah ilustrasi langkah-langkah pemasangan paku ini: OSN 2014 – Hari 2 Pak Dengklek sudah memiliki sebuah desain hiasan dinding yang dibuat oleh panitia dekorasi. Ia ingin segera memasang paku-paku agar terbentuk hiasan dinding tersebut. Tentu saja, mula-mula ia harus membariskan paku-paku tersebut. Mungkin saja ada lebih dari satu kemungkinan barisan yang menghasilkan hiasan dinding tersebut. Pak Dengklek, sebagai seorang yang senang dengan teka-teki logika, justru penasaran dengan pertanyaan berikut: jika barisan-barisan yang mungkin menghasilkan hiasan dinding tersebut diurutkan dengan urutan leksikografis, barisan apa yang berada pada posisi ke-K? Catatan: barisan paku A lebih kecil daripada barisan paku B secara leksikografis, apabila pada posisi pertama di mana A dan B berbeda, nomor paku pada posisi tersebut di A lebih kecil daripada nomor paku pada posis tersebut di B. Bantulah Pak Dengklek menjawab pertanyaan tersebut, agar ia dapat segera memasang pakupaku tersebut! Format Masukan Pada awalnya, program Anda akan menerima label kasus uji. Label kasus uji berisi sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Digit pertama dari label adalah karakter ke-0, digit kedua dari label adalah karakter ke-1, dan seterusnya. Karakter ke-0 akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, dan berisi '.' jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau o jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter kei berisi karakter '.' Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Baris kedua berisi dua buah bilangan bulat N dan K. N-1 baris berikutnya mendeskripsikan sebuah desain hiasan dinding. Masing-masing baris berisi tiga buah bilangan bulat u, v, dan t: Apabila t = 0, maka paku bernomor v terhubung dengan tali di sebelah kiri bawah dengan paku bernomor u. Apabila t = 1, maka paku bernomor v terhubung dengan tali di sebelah kanan bawah dengan paku bernomor u. Format Keluaran Sebuah baris berisi barisan N buah bilangan, dipisahkan oleh spasi, yang menyatakan barisan nomor paku, sedemikian sehingga barisan ini merupakan barisan terkecil ke-K secara leksikografis. OSN 2014 – Hari 2 Contoh Masukan 1 0..34.6 4 1 2 1 0 2 4 1 4 3 0 Contoh Keluaran 1 2 1 4 3 Contoh Masukan 2 0..3..6 4 3 2 1 0 2 4 1 4 3 0 Contoh Keluaran 2 2 4 3 1 Penjelasan Kedua contoh masukan mendeskripsikan desain hiasan dinding yang sama, yakni: Terdapat 3 buah barisan nomor paku yang menghasilkan pohon tersebut, yakni: 1. 2 1 4 3 2. 2 4 1 3 3. 2 4 3 1 Subsoal Pada semua subsoal, berlaku: Setiap paku memiliki nomor unik antara 1 sampai dengan N. Masukan selalu merupakan desain hiasan dinding yang benar. OSN 2014 – Hari 2 K tidak lebih daripada banyaknya cara penyusunan hiasan dinding yang bersangkutan. Meskipun cara penyusunan hiasan dinding bisa banyak sekali, nilai K tidak akan lebih daripada 2.000.000.000. Subsoal 1 (7 poin) N=8 K=1 Kasus uji dapat diunduh di sini. Subsoal 2 (14 poin) N=8 K=3 Kasus uji dapat diunduh di sini. Subsoal 3 (17 poin) 1≤N≤8 Subsoal 4 (11 poin) 1 ≤ N ≤ 100 K=1 Subsoal 5 (20 poin) 1 ≤ N ≤ 100 Semua paku dengan nomor lebih kecil daripada nomor paku teratas tidak memiliki paku yang terhubung dengan tali di sebelah kanan bawah. Semua paku dengan nomor lebih besar daripada nomor paku teratas tidak memiliki paku yang terhubung dengan tali di sebelah kiri bawah. Subsoal 6 (31 poin) 1 ≤ N ≤ 100 OSN 2014 – Hari 2 Komunikasi Bebek Batas Waktu 0,4 detik Batas Memori 256 MB Deskripsi Pak Dengklek memiliki sebuah kebun yang panjangnya tak hingga. Kebun Pak Dengklek dapat direpresentasikan dalam garis sumbu x pada koordinat Kartesian. Pak Dengklek memiliki N ekor bebek pada kebun tersebut. Bebek ke-i terletak pada koordinat xi pada sumbu x, dengan xi adalah bilangan bulat. Dijamin tidak ada dua bebek pada posisi yang sama. Sepasang bebek dapat berkomunikasi jika dan hanya jika tidak ada bebek lain yang berada di antara dua bebek tersebut. Karena N bebek semuanya berada pada satu garis, tentu saja ada N - 1 pasang bebek yang dapat berkomunikasi. Jarak dari sebuah komunikasi adalah jarak dua bebek yang sedang melakukan komunikasi tersebut. Sebagai contoh, jika pada awalnya ada 4 bebek yang berada pada posisi {1, 2, 5, 6}, maka jarak komunikasi bebek 1 dan 2 adalah 1, jarak komunikasi bebek 2 dan 3 adalah 3, dan jarak komunikasi bebek 3 dan 4 adalah 1. Pada suatu saat mungkin saja terdapat jarak komunikasi yang berbeda-beda. Pak Dengklek merasa komunikasi bebek berjalan tidak lancar jika terdapat lebih dari satu nilai jarak komunikasi. Untuk itu, Pak Dengklek mungkin harus mengganti konfigurasi kebunnya. Bebek-bebek Pak Dengklek sudah terlalu nyaman dengan posisinya, sehingga mereka tidak mau dipindah posisinya. Sehingga, yang bisa dilakukan oleh Pak Dengklek adalah menambahkan bebek baru ke kebun atau mengambil bebek lama keluar dari kebun. Pak Dengklek akan mengambil X bebek dan meletakkan Y bebek, sehingga pada akhirnya terdapat (N - X + Y) bebek, dan posisi bebek-bebek tersebut harus berbeda-beda dan bebek ke-i terletak pada xi’ dimana xi’ adalah bilangan bulat, dan semua jarak komunikasi untuk (N - X + Y - 1) pasangan bebek bernilai sama. Tentukan nilai X + Y minimal yang dapat dilakukan oleh Pak Dengklek. Format Masukan Pada awalnya, program Anda akan menerima label kasus uji. Label kasus uji berisi sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Digit pertama dari label adalah karakter ke-0, digit kedua dari label adalah karakter ke-1, dan seterusnya. Karakter ke-0 akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, atau berisi '.' jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: OSN 2014 – Hari 2 o o jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter kei berisi karakter '.' Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Baris kedua berisi sebuah bilangan bulat N yang menunjukkan banyaknya bebek mula-mula. Baris ketiga berisi N bilangan bulat yang dipisahkan spasi. Bilangan ke-i menunjukkan nilai dari xi. Format Keluaran Sebuah bilangan bulat yang menunjukkan nilai X + Y minimal agar konfigurasi kebun Pak Dengklek memenuhi ketentuan di atas. Contoh Masukan 0..3456 5 2 4 6 10 18 Contoh Keluaran 2 Penjelasan Pak Dengklek akan meletakkan bebek pada posisi x = 14 dan mengambil bebek pada posisi x = 4, sehingga pada akhirnya akan ada bebek-bebek pada posisi {2, 6, 10, 14, 18}, dimana setiap komunikasi bebek berjarak 4. Solusi ini membutuhkan 1 pengambilan bebek dan 1 penambahan bebek. Tidak ada solusi yang lebih optimal dari solusi ini. Subsoal Pada semua subsoal, berlaku: -2.500 ≤ xi ≤ 2.500 Subsoal 1 (6 poin) N=6 Kasus uji dapat diunduh di sini. Subsoal 2 (14 poin) OSN 2014 – Hari 2 N=9 Kasus uji dapat diunduh di sini. Subsoal 3 (19 poin) 1 ≤ N ≤ 15 Subsoal 4 (21 poin) 1 ≤ N ≤ 50 Subsoal 5 (13 poin) 1 ≤ N ≤ 300 Subsoal 6 (27 poin) 1 ≤ N ≤ 2.000 Hak Cipta Dilindungi Undang-undang OLIMPIADE SAINS NASIONAL 2015 DESKRIPSI SOAL INFORMATIKA/KOMPUTER SESI – 0 Waktu: 2 Jam Daftar Soal: A. Tekotek B. Sengketa Tanah C. Menimbang Tekotek Time limit: 1000 ms Memory limit: 32768 KB Deskripsi Tek kotek, kotek kotek Anak ayam turun berkotek Tek kotek, kotek kotek Anak ayam turun berkotek Anak ayam turunlah 4 Mati satu tinggallah 3 Anak ayam turunlah 3 Mati satu tinggallah 2 Anak ayam turunlah 2 Mati satu tinggallah 1 Anak ayam turunlah 1 Mati satu tinggallah induknya Pak Dengklek sedang berjalan-jalan di Malioboro sambil menyanyikan lagu tersebut. Akan tetapi lagu tersebut sudah selesai dianyanyikan sebelum Pak Dengklek menyelesaikan perjalanannya. Sehingga, Pak Dengklek berencana menambah jumlah ayam pada lirik lagu tersebut. Karena Pak Dengklek sedang sibuk memilih suvenir, Pak Dengklek meminta bantuan anda untuk membuatkan lirik untuk Pak Dengklek. Format Masukan Baris pertama akan berisi label kasus uji. Label kasus uji adalah sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Karakter ke-0 (indeks dimulai dari 0) akan berisi '0' jika kasus uji tersebut merupakan contoh kasus uji, atau berisi '.' (titik) jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o Jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau o Jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter ke-i berisi karakter '.' (titik). Sebagai contoh, apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Baris kedua berisi satu bilangan N yaitu jumlah ayam yang diinginkan Pak Dengklek. Halaman 2 dari 10 Format Keluaran 2N baris lirik yang diinginkan Pak Dengklek. Contoh Masukan 0..34 3 Contoh Keluaran Anak ayam turunlah 3 Mati satu tinggallah 2 Anak ayam turunlah 2 Mati satu tinggallah 1 Anak ayam turunlah 1 Mati satu tinggallah induknya Subsoal Subsoal 1 (10 poin) Hanya berisi kasus uji ini: .1.34 5 Subsoal 2 (20 poin) Hanya berisi kasus uji ini: ..234 10 Subsoal 3 (30 poin) 1 ≤ N ≤ 100 Subsoal 4 (40 poin) 1 ≤ N ≤ 1.000 Halaman 3 dari 10 Sengketa Tanah Time limit: 1000 ms Memory limit: 65536 KB Deskripsi Candi Sewu adalah candi yang terletak tepat di perbatasan daerah Jawa Tengah dan Daerah Istimewa Yogyakarta. Mungkin kalian pernah mendengar legenda bahwa candi ini dibangun dalam semalam. Bandung Bandawasa ingin meminang putri Roro Jonggrang, namun sang putri memberikan satu persyaratan: membangun 1.000 candi dalam semalam. Singkatnya, dia digagalkan oleh Roro Jonggrang ketika sudah mencapai 999 candi. Akibatnya dia marah, dan mengutuk Roro Jonggrang untuk menjadi candi terakhir. Begitulah kisah yang selama ini diceritakan turun-temurun. Namun, ada satu bagian yang terlewat dari kisah itu. Ketika ingin memulai membangun candi, Bandung Bandawasa membeli sepetak tanah berukuran persegi panjang, tempat akan dibangunnya candi tersebut. Namun, Mpu Dengklek (leluhur pak Dengklek) marah karena menurutnya tanah yang ingin dibeli Bandung Bandawasa beririsan dengan tanah miliknya. Tentu saja Bandung Bandawasa harus menyelesaikan sengketa tanah ini secepatnya sebelum memulai membangun candi. Kedua tanah berbentuk persegi panjang, di mana sisi-sisinya sejajar dengan sumbu x dan y pada koordinat kartesian. Kedua tanah didefinisikan dengan koordinat kiri bawah dan kanan atas persegi panjang. Tanah Bandung Bandawasa memiliki koordinat kiri bawah (Xb1, Yb1) dan koordinat kanan atas (Xb2, Yb2). Sementara itu, tanah Mpu Dengklek memiliki koordinat kiri bawah (Xd1, Yd1) dan koordinat kanan atas (Xd2, Yd2). Anda akan membantu mereka menyelesaikan sengketa, dengan menentukan apakah benar bahwa kedua tanah beririsan. Maksud dari beririsan adalah terdapat area dengan luas lebih besar dari nol yang masuk ke dalam wilayah kedua tanah. Sebagai contoh, misalkan tanah Bandung Bandawasa mempunyai koordinat (2, 1) hingga (7,4), dan tanah Mpu Dengklek mempunyai koordinat (5, 2) hingga (8, 6). Pada gambar berikut, terlihat bahwa kedua tanah beririsan di koordinat (5, 2) hingga (7, 4). Tanah Bandung Bandawasa adalah yang berwarna biru, dan tanah Mpu Dengklek adalah yang berwarna hijau. Halaman 4 dari 10 Format Masukan Baris pertama akan berisi label kasus uji. Label kasus uji adalah sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Karakter ke-0 (indeks dimulai dari 0) akan berisi '0' jika kasus uji tersebut merupakan contoh kasus uji, atau berisi '.' (titik) jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o Jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau o Jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter ke-i berisi karakter '.' (titik). Sebagai contoh, apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Baris berikutnya berisi 4 buah bilangan bulat Xb1, Yb1, Xb2, dan Yb2, yang mendeskripsikan tanah Bandung Bandawasa. Baris berikutnya berisi 4 buah bilangan bulat Xd1, Yd1, Xd2, dan Yd2, yang mendeskripsikan tanah Mpu Dengklek. Format Keluaran Keluaran terdiri dari sebuah baris yang berisi sebuah string. Jika kedua tanah beririsan, maka keluarkan SENGKETA. Jika tidak, keluarkan DAMAI. Halaman 5 dari 10 Contoh Masukan 1 0...4 2 1 7 4 5 2 8 6 Contoh Keluaran 1 SENGKETA Contoh Masukan 2 0...4 2 3 8 4 3 1 6 3 Contoh Keluaran 2 DAMAI Penjelasan Contoh 2 Walaupun kedua tanah saling menempel, tapi tidak ada area yang masuk ke dalam wilayah kedua tanah, sehingga tidak terjadi sengketa. Subsoal Untuk semua subsoal, berlaku: Xb1 < Xb2 Halaman 6 dari 10 Yb1 < Yb2 Xd1 < Xd2 Yd1 < Yd2 Semua bilangan pada koordinat adalah bilangan bulat positif dan kurang dari 1.000. Subsoal 1 (10 poin) Hanya berisi kasus uji ini: .1..4 0 0 100 120 50 80 75 100 Subsoal 2 (10 poin) Hanya berisi kasus uji ini: ..234 1 2 3 4 1 6 8 9 Subsoal 3 (30 poin) Xb1 = Xd1 Subsoal 4 (50 poin) Tidak ada batasan tambahan. Halaman 7 dari 10 Menimbang Time limit: 1000 ms Memory limit: 32768 KB Deskripsi Pak Dengklek baru saja kembali dari wisata ke Yogyakarta. Selama berada di Yogyakarta, Pak Dengklek sering sekali belanja. Ia berhasil membeli banyak oleh-oleh untuk bebekbebeknya. Setelah puas, Pak Dengklek pulang ke rumah dengan menaiki bus AC. Ia memutuskan untuk tidur selama perjalanan pulang karena terlalu lelah. Ketika Pak Dengklek bangun dan bersiap untuk turun, Pak Dengklek menyadari sesuatu yang aneh. Dia tidak bisa membedakan tasnya dengan tas milik penumpang lain! Ternyata, model tas yang digunakan Pak Dengklek sangat populer. Dari luar, semua tas terlihat sama saja. Satu-satunya yang Pak Dengklek tahu, tas miliknya adalah satu-satunya tas yang lebih berat dari tas-tas lain. Semua tas lain beratnya sama. Pak Dengklek akhirnya menaruh seluruh tas secara berjejer dan menomori tas-tas tersebut dengan angka 1..N dari kiri ke kanan. Pak Dengklek memiliki kemampuan yang menarik: ia bisa mengangkat sejumlah tas berbeda di masing-masing tangannya dan mengetahui kumpulan tas yang mana yang lebih berat. Dengan melakukan hal ini, dia yakin bisa menemukan tasnya. Namun, sebentar lagi bus akan berjalan lagi dan Pak Dengklek harus cepat turun sehingga ia hanya bisa melakukan K kali penimbangan. Bantulah Pak Dengklek memilih tas-tas mana yang harus ditimbang agar bisa menemukan tasnya secepat mungkin! Format Interaksi Baris pertama akan berisi label kasus uji. Label kasus uji adalah sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Karakter ke-0 (indeks dimulai dari 0) akan berisi '0' jika kasus uji tersebut merupakan contoh kasus uji, atau berisi '.' (titik) jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o Jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau o Jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter ke-i berisi karakter '.' (titik). Sebagai contoh, apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Baris kedua berisi bilangan bulat N dan K, yang merupakan banyak tas yang berada di bus dan banyak penimbangan maksimum yang bisa Pak Dengklek lakukan. Setelah itu, program Anda dapat melakukan serangkaian tindakan, yang masing-masing merupakan salah satu dari: Halaman 8 dari 10 Memilih tas. Program Anda harus mengeluarkan sebuah baris berisi AMBIL Y yakni, kata AMBIL diikuti dengan nomor tas pilihan Anda. Bertanya. Program Anda harus mengeluarkan sebuah baris berisi TIMBANG A T1 T2 .. TA B T1 T2 .. TB yakni, kata TIMBANG diikuti dengan banyak tas yang ingin anda pegang di tangan kiri dan nomor-nomor tas yang ingin anda pegang di tangan kanan. Setiap kali program Anda selesai mengeluarkan pertanyaan, program Anda membaca sebuah string, KIRI jika lebih berat tas-tas di kiri, KANAN jika lebih berat tas-tas di kanan, SAMA jika berat kedua sisi sama. Setelah anda memilih tas, program akan berhenti dan anda akan mendapat poin jika tebakan anda benar. Pastikan program Anda berhenti melakukan interaksi setelah menebak tas mana yang paling berat. Contoh Interaksi Berikut adalah contoh interaksi program, dengan tas terberatnya adalah tas nomor 8. Keluaran Program Anda Keluaran Program Grader 01... 8 7 TIMBANG 1 1 1 2 SAMA TIMBANG 2 1 2 1 4 KIRI TIMBANG 2 1 8 1 2 KIRI AMBIL 8 (interaksi selesai) Halaman 9 dari 10 Subsoal Pada semua subsoal, harus berlaku: Jika program Anda memilih tas, maka 1 ≤ Y ≤ N Jika program Anda bertanya, maka 1 ≤ A, B, nomor-nomor tas ≤ N Subsoal 1 (10 poin) N=8 K=7 Subsoal 2 (20 poin) N = 16 K=8 Subsoal 3 (30 poin) N = 32 K=6 Subsoal 4 (40 poin) N = 81 K=4 Peringatan Jika program Anda melakukan salah satu dari hal-hal di bawah ini: melakukan tindakan di luar format dan batasan yang ditentukan, bertanya lebih dari K kali, atau salah mengambil tas (bukan yang terberat) maka nilai Anda untuk subsoal yang bersangkutan adalah nol. Selain itu, pastikan pula bahwa program Anda harus berhenti jika selesai melakukan interaksi. BIla tidak, maka Anda mungkin mendapatkan Time Limit Exceeded atau Runtime Error untuk kasus uji yang bersangkutan. Halaman 10 dari 10 Hak Cipta Dilindungi Undang-undang OLIMPIADE SAINS NASIONAL 2015 DESKRIPSI SOAL INFORMATIKA/KOMPUTER SESI – 1 Waktu: 5 Jam Daftar Soal: A. Pertahanan Yogya B. Menyiram Sawah C. Bisa Jadi Teebak Angka Pertahanan Yogya Time limit: 1000 ms Memory limit: 65536 KB Deskripsi Yogya dalam bahaya! Sesosok makhluk jahat ingin menguasai Yogya dengan kekuatan kegelapan. Pak Dengklek tidak ingin tinggal diam walaupun ia sedang berlibur. Ia berusaha untuk mengalahkan dan mengusir makhluk jahat tersebut dari Yogya. Tentu tugas ini tidaklah mudah, karena selain makhluk jahat tersebut merupakan petarung yang kuat, ia juga memiliki banyak anak buah. Sebagai seorang petarung senior, Pak Dengklek tahu bahwa ia tidak boleh gegabah saat melawan makhluk jahat tersebut. Berkat kemampuan analisisnya, ia punya informasi keterampilan bertarung makhluk jahat dan seluruh anak buahnya. Untuk kemudahan, makhluk-makhluk dinomori dari 1 sampai dengan N. Keterampilan bertarung makhluk ke-i dinyatakan dalam dua pasang bilangan Si dan Ti, dengan Si adalah stamina dan Ti adalah tenaga makhluk tersebut. Untuk memudahkan, makhluk ke-1 adalah sang makhluk jahat, dan makhluk ke-i untuk i > 1 adalah prajurit-prajuritnya. Pak Dengklek juga memiliki keterampilan bertarung sendiri yang dinyatakan oleh Sd dan Td. Proses pertarungan digambarkan oleh alur berikut: Pak Dengklek menyerang lawan, mengurangi stamina musuh sebanyak Td. Kemudian musuh balik menyerang pak Dengklek, mengurangi stamina pak Dengklek sebanyak Ti. Proses tersebut berulang terus-menerus hingga salah satu di antara mereka kehabisan stamina (stamina ≤ 0) dan dinyatakan kalah. Pak Dengklek sadar, mungkin sang makhluk jahat terlalu kuat untuk dikalahkan, karena itu ia bisa saja melawan prajurit-prajuritnya terlebih dahulu. Setiap kali Pak Dengklek mengalahkan musuh, kemampuannya bertambah sebanyak Ls dan Lt. Artinya, stamina pak Dengklek bertambah sebanyak Ls dan tenaganya bertambah Lt dari nilai yang sebelumnya. Sebagai tambahan, setiap kali Pak Dengklek selesai dari suatu pertempuran, ia menyempatkan diri beristirahat sehingga staminanya kembali pulih seperti semula. Meskipun Pak Dengklek semakin kuat jika semakin banyak prajurit yang dikalahkan, ia juga tak ingin berlama-lama. Bantulah Pak Dengklek mengatur urutan prajurit-prajurit yang perlu dikalahkan sampai ia mampu mengalahkan sang makhluk jahat, sedemikian sehingga banyaknya prajurit yang perlu dikalahkan adalah minimum. Format Masukan Baris pertama akan berisi label kasus uji. Label kasus uji adalah sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Karakter ke-0 (indeks dimulai dari 0) akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, atau berisi '.' (titik) jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: Halaman 2 dari 15 jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau o jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter ke-i berisi karakter '.' (titik). Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. o Baris berikutnya terdiri dari 5 bilangan: Sd, Td, Ls, Lt, dan N. N baris berikutnya terdiri dari dua buah bilangan Si dan Ti yang menyatakan keahlian bertarung musuh ke-i. Musuh ke-1 merupakan makhluk jahat yang perlu dikalahkan oleh Pak Dengklek. Format Keluaran Keluarkan sebuah bilangan Q yang menyatakan banyaknya prajurit minimum yang perlu dikalahkan pak Dengklek sebelum siap melawan makhluk jahat. Q baris berikutnya adalah indeks i (1 < i ≤ N) yang menyatakan urutan prajurit musuh yang dikalahkan. Apabila terdapat lebih dari satu kemungkinan urutan, keluarkan yang mana saja. Apabila Pak Dengklek tidak bisa membunuh makhluk jahat, keluarkan -1. Contoh Masukan 0..34567 10 5 2 0 4 15 6 11 5 6 4 14 5 Contoh Keluaran 2 3 2 Subsoal Pada setiap subsoal, berlaku 1 ≤ Sd, Td, Si, Ti ≤ 100.000 Halaman 3 dari 15 0 ≤ Ls, Lt ≤ 100.000 Subsoal 1 (5 poin) Subsoal ini hanya berisi kasus uji berikut ini: .1.34..7 5 2 1 1 4 6 4 2 10 20 1 5 5 Subsoal 2 (7 poin) Subsoal ini hanya berisi kasus uji berikut ini: ..234..7 25 25 25 25 5 93 52 90 60 32 92 14 78 19 77 Subsoal 3 (10 poin) 1 ≤ N ≤ 10 Subsoal 4 (12 poin) 1 ≤ N ≤ 100 Subsoal 5 (15 poin) 1 ≤ N ≤ 1.000 Lt = 0 Subsoal 6 (20 poin) 1 ≤ N ≤ 100.000 Lt = 0 Subsoal 7 (31 poin) 1 ≤ N ≤ 100.000 Halaman 4 dari 15 Menyiram Sawah Time limit: 1000 ms Memory limit: 65536 KB Deskripsi Pak Dengklek memiliki sawah yang sangat luas. Uniknya, sawah Pak Dengklek berada di pegunungan, sehingga ketinggian sawah Pak Dengklek bervariasi antar petaknya. Sawah Pak Dengklek berukuran N x M petak. Petak sawah pojok atas kiri dinomori petak [1,1] dan pojok kanan bawah dinomori [N,M]. Setiap petak sawah Pak Dengklek memiliki ketinggian T[i,j]. Agar padi-padi di sawah Pak Dengklek tumbuh dengan subur, ia harus menyiram sawahnya setiap hari. Karena struktur ketinggian sawah Pak Dengklek yang sedemikian rupa, ketika Pak Dengklek menyiram sawah pada suatu petak, air akan selalu mengalir ke petak dengan ketinggian yang lebih kecil. Lebih jelasnya, ketika Pak Dengklek menyiram petak [i,j], air akan mengalir ke seluruh petak yang bertetanggaan (4 arah) dengan [i,j] jika ketinggian petak tetangganya lebih rendah dibandingkan ketinggian petak [i,j]. Tetangga dari suatu petak adalah 4 petak lainnya yang berbagi sisi. Air ini akan terus mengalir, hingga ia berada di petak dimana semua tetangganya memiliki ketinggian yang lebih tinggi atau sama. Sebagai ilustrasi, perhatikan sawah Pak Dengklek berikut ini: 1 2 50 200 55 3 35 1 4 12 44 8 9 40 100 10 7 1 5 80 Angka-angka tersebut menunjukkan ketinggian dari petak yang bersangkutan. Jika Pak Dengklek menyiram Petak [3,4], maka hasilnya adalah: 1 2 50 200 55 3 35 1 4 12 44 8 9 40 100 10 7 1 5 80 Petak berwarna biru adalah petak yang dibasahi baik disiram secara langsung maupun karena aliran air melewati petak tersebut. Halaman 5 dari 15 Karena Pak Dengklek menyukai tantangan, Ia memberi anda teka-teki. Anda diberikan subpersegi dari sawah Pak Dengklek yang ditandai dengan 2 petak ujung [a,b] dan [c,d]. Petak [a,b] menandakan petak ujung kiri atas, sementara [c,d] menandakan petak ujung kanan bawah. Anda harus menjawab pertanyaan, apakah mungkin seluruh petak yang berada di sub-persegi [a,b] sampai [c,d] dapat dibasahi hanya dengan sekali siram di petak kiri atas (sawah di petak [a,b]) atau kanan bawah (sawah di petak [c,d] ) sub-persegi tersebut? Air TIDAK bisa mengalir keluar dari sub-persegi tersebut. Jika ada petak yang bisa terbasahi namun berada di luar sub-persegi, petak tersebut tidak akan terbasahi. Sebagai contoh, jika sawahnya seperti contoh sebelumnya dan sub-perseginya adalah [2,2]..[3,4] maka kemungkinan sawah setelah terbasahi adalah: 1 2 50 200 55 3 35 1 4 12 44 8 9 40 100 10 7 1 5 80 jika yang dibasahi awalnya adalah petak [2,2], dan 1 2 50 200 55 3 35 1 4 12 44 8 9 40 100 10 7 1 5 80 jika yang dibasahi awalnya adalah petak [3,4] Format Masukan Baris pertama akan berisi label kasus uji. Label kasus uji adalah sebuah string yang dijelaskan sebagai berikut: o Panjang string tersebut adalah banyaknya subsoal ditambah satu. o Karakter ke-0 (indeks dimulai dari 0) akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, atau berisi '.' (titik) jika bukan. o Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter ke-i berisi karakter '.' (titik). o Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: o Soal tersebut memiliki 5 buah subsoal, o Kasus uji tersebut merupakan contoh kasus uji, dan Halaman 6 dari 15 o Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Baris kedua terdiri dari 3 bilangan N,M dan Q. N baris berikutnya terdiri dari M bilangan yang mendeskripsikan nilai ketinggian petakpetak sawah Pak Dengklek. Q baris berikutnya adalah teka-teki Pak Dengklek yang terdiri dari 4 bilangan a, b, c, dan d. Format Keluaran Untuk setiap teka-teki, keluarkan ‘Kiri Atas’ jika seluruh petak pada sub-persegi bisa dibasahi dengan menyiram petak [a,b]. Keluarkan ‘Kanan Bawah’ jika seluruh petak pada sub-persegi bisa dibasahi dengan menyiram petak [c,d], atau ‘Tidak Mungkin’ jika kedua hal tersebut tidak memungkinkan. Contoh Masukan 0...4.6 3 3 4 1 2 3 4 5 4 1 2 1 1 1 2 2 2 2 3 3 1 1 2 3 1 2 3 3 Contoh Keluaran Kanan Bawah Kiri Atas Tidak Mungkin Tidak Mungkin Subsoal Untuk semua subsoal, berlaku: 0 ≤ tinggi masing-masing petak sawah ≤ 109 1 ≤ a, c ≤ N 1 ≤ b, d ≤ M Halaman 7 dari 15 1 ≤ N, M ≤ 1000 b<d Subsoal 1 (7 poin) Subsoal ini hanya berisi kasus uji berikut ini: .1..4.6 5 5 6 28 58 49 39 63 77 78 25 55 100 76 79 73 72 22 49 78 70 71 58 86 47 26 60 61 1 1 2 2 4 4 5 5 3 4 5 5 2 1 3 2 4 4 5 5 3 3 4 4 Subsoal 2 (9 poin) Subsoal ini hanya berisi kasus uji berikut ini: ..23456 1 50 8 58 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 49 50 51 52 53 54 55 56 70 69 68 67 66 65 64 45 8 91 63 32 15 82 30 86 93 2 64 87 1 13 1 27 1 19 1 37 1 12 1 25 1 30 1 36 1 19 1 21 1 2 1 24 1 30 1 37 1 23 1 30 Subsoal 3 (10 poin) Halaman 8 dari 15 N=1 1 ≤ Q ≤ 10 Subsoal 4 (10 poin) 1 ≤ Q ≤ 10 Subsoal 5 (19 poin) N=1 1 ≤ Q ≤ 106 Subsoal 6 (45 poin) 1 ≤ Q ≤ 106 Peringatan Untuk menangani masukan/keluaran yang banyak, hindari menggunakan cin/cout Halaman 9 dari 15 Bisa Jadi Tebak Angka Time limit: 100 ms Memory limit: 32768 KB Deskripsi Bebek-bebek Pak Dengklek sedang berwisata di Yogyakarta. Sekarang, mereka sedang berada di Keraton Ngayogyakarta Hadiningrat. Selain berfungsi sebagai tempat tinggal sultan, di sana terdapat museum yang menyimpan berbagai koleksi milik kesultanan, mulai dari pemberian raja-raja Eropa, replika pusaka keraton, hingga gamelan yang dapat didengarkan secara langsung pada saat-saat tertentu. Tentu saja bebek-bebek Pak Dengklek sangat tertarik dengan semua itu. Semua bebek kecuali Kwak dan Kwek. Ketika bebek-bebek lainnya asyik mengeksplorasi kompleks Keraton yang sangat luas itu, Kwak dan Kwek malah berdiam di bawah pohon karena bosan. Akhirnya mereka memutuskan untuk memainkan sebuah permainan tebak angka sambil menunggu yang lain. Permainan tersebut berjalan sebagai berikut. Pada awalnya, Kwak memikirkan sebuah bilangan bulat antara 1 sampai dengan N, inklusif (misalkan bilangan tersebut adalah X). Kwek harus menebak nilai dari X. Untuk itu, Kwek dapat mengajukan serangkaian pertanyaan. Pada setiap pertanyaan, Kwek memberikan Kwak sebuah himpunan bilangan bulat S. Kemudian, Kwak harus memberikan salah satu dari ketiga kemungkinan jawaban berikut: YA , jika X terdapat pada S. BISAJADI , jika X tidak terdapat pada S, namun X+1 atau X-1 terdapat pada S. TIDAK , jika kedua kondisi di atas tidak terpenuhi. Pada akhirnya, Kwek harus menebak bilangan yang dipikirkan Kwak. Jika tebakan tersebut sama dengan X, maka Kwek dinyatakan menang. Tentu saja mereka tidak dapat bermain terlalu lama karena sebentar lagi rombongan bebek Pak Dengklek akan melanjutkan wisata ke tempat menarik lainnya di Yogyakarta. Oleh karena itu, mereka membatasi permainan ini: Kwek hanya dapat bertanya maksimum K kali sebelum menebak bilangan yang dipikirkan Kwak. Bantulah Kwek memenangkan permainan ini! Format Interaksi Baris pertama akan berisi label kasus uji. Label kasus uji adalah sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Karakter ke-0 (indeks dimulai dari 0) akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, atau berisi '.' (titik) jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau Halaman 10 dari 15 o jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter ke-i berisi karakter '.' (titik). Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Kemudian program Anda akan menerima dua buah bilangan bulat N dan K. Setelah itu, program Anda dapat melakukan serangkaian tindakan, yang masing-masing merupakan salah satu dari: Menebak. Program Anda harus mengeluarkan sebuah baris berisi 0 Y yakni, bilangan 0 diikuti dengan tebakan Anda. Bertanya. Program Anda harus mengeluarkan sebuah baris berisi M S1 S2 ... SM yakni, sebuah bilangan bulat M diikuti dengan M buah bilangan bulat yang menyatakan himpunan yang Anda tanyakan. Setiap kali program Anda selesai mengeluarkan tebakan, program Anda membaca sebuah string yang dijamin merupakan salah satu dari YA, BISAJADI, dan TIDAK, sesuai dengan definisi pada deskripsi soal. Pastikan program Anda berhenti melakukan interaksi setelah menebak bilangan yang dipikirkan Kwak. Contoh Interaksi Berikut adalah contoh interaksi program, dengan bilangan yang dipikirkan Kwak adalah 8. Keluaran Program Anda Keluaran Program Grader 0...... 10 3 4 0 3 4 5 TIDAK 3 6 7 8 YA Halaman 11 dari 15 Keluaran Program Anda Keluaran Program Grader 1 7 BISAJADI 0 8 (interaksi selesai) Subsoal Pada semua subsoal, harus berlaku: Jika program Anda bertanya, maka 1 ≤ Y ≤ N Jika program Anda menebak, maka 1 ≤ M ≤ 10.000 dan 0 ≤ Si ≤ 9.999 Subsoal 1 (6 poin) N=8 K=3 Subsoal 2 (8 poin) N = 64 K=6 Khusus untuk subsoal 1 dan subsoal 2: Hanya terdapat sebuah kasus uji (satu subsoal dinyatakan oleh satu kasus uji), yang berupa game dan dapat dilihat di halaman pengumuman kontes. Anda boleh memainkan permainan ini berulang kali tanpa mendapatkan penalti. Jika Anda sudah memenangkan permainan untuk subsoal tertentu, Anda dapat memilih pilihan pada permainan untuk mengeluarkan source code yang dapat langsung Anda kirimkan ke grader dan menjawab dengan benar pada subsoal yang telah Anda menangkan. Anda tidak diwajibkan memainkan permainan ini untuk mengerjakan kedua subsoal ini. Anda diperbolehkan untuk menulis kode Anda sendiri untuk mengerjakan kedua subsoal ini. Subsoal 3 (9 poin) N=9 K=3 Subsoal 4 (12 poin) N=9 Halaman 12 dari 15 K=2 Subsoal 5 (23 poin) N = 25 K=3 Subsoal 6 (12 poin) N = 6.500 K = 15 Subsoal 7 (30 poin) N = 6.500 K=8 Catatan Yang perlu diperhatikan adalah bahwa untuk tipe soal interaktif seperti ini, Anda harus selalu memberikan perintah fflush(stdout); (bagi pengguna C/C++) atau flush(output); (bagi pengguna PASCAL) setiap kali Anda mencetak keluaran (dengan kata lain, setiap kali ada perintah mencetak keluaran misalnya write,writeln, printf, cout, atau puts, tepat di bawahnya harus ada perintah fflush/flush). Sebagai contoh, berikut adalah contoh source code dalam bahasa Pascal yang akan selalu bertanya 1 1 dan kemudian menebak angka 1 tanpa mempedulikan nilai N dan K yang diberikan maupun bacaan hasil interaksi. var subsoal, jawaban: string; N, K: longint; begin readln(subsoal); readln(N, K); writeln('1 1'); flush(output); readln(jawaban); writeln('0 1'); flush(output); end. Halaman 13 dari 15 Dan berikut adalah contoh source code yang melakukan hal yang sama dalam bahasa C++. #include <cstdio> #include <cstring> char subsoal[100], jawaban[100]; int N, K; int main() { gets(subsoal); scanf("%d %d", &N, &K); printf("1 1\n"); fflush(stdout); gets(jawaban); printf("0 1\n"); fflush(stdout); return 0; } Halaman 14 dari 15 Peringatan Jika program Anda melakukan salah satu dari hal-hal di bawah ini: melakukan tindakan di luar format dan batasan yang ditentukan, bertanya lebih dari K kali, atau salah menjawab bilangan yang dipikirkan oleh Kwak maka nilai Anda untuk subsoal yang bersangkutan adalah nol. Selain itu, pastikan pula bahwa program Anda harus berhenti jika selesai melakukan interaksi. BIla tidak, maka Anda mungkin mendapatkan Time Limit Exceeded, Runtime Error, atau Internal Error untuk kasus uji yang bersangkutan. Halaman 15 dari 15 Hak Cipta Dilindungi Undang-undang OLIMPIADE SAINS NASIONAL 2015 DESKRIPSI SOAL INFORMATIKA/KOMPUTER SESI – 2 Waktu: 5 Jam Daftar Soal: A. Belanja di Malioboro B. Motif Batik C. Ayam Aneh Belanja di Malioboro Time limit: 1000 ms Memory limit: 65536 KB Deskripsi Bebek-bebek Pak Dengklek sangat senang karena Pak Blangkon mengajak mereka untuk pergi berbelanja di Malioboro, suatu tempat berbelanja yang terkenal di Yogyakarta. Untuk soal ini, Malioboro bisa dianggap sebagai pertokoan melingkar yang terdiri dari M toko yang diberi nomor dari 1 sampai dengan M. Jika ditelusuri secara searah jarum jam mulai dari toko nomor 1, toko di sebelahnya adalah toko nomor 2, disusul dengan toko nomor 3, dan seterusnya hingga toko nomor M, lalu kembali ke toko nomor 1. Terdapat N ekor bebek yang pergi ke Malioboro. Bebek ke-i pada awalnya berada di toko nomor Pi. Kondisi awal ini bisa dianggap terjadi pada menit ke-0. Bebek-bebek sangat bersemangat dalam berbelanja, dan diketahui mereka bergerak dengan kelajuan konstan, yaitu 1 toko per menit. Diketahui bahwa setiap bebek bergerak searah jarum jam atau berlawanan arah jarum jam, dan tidak pernah berganti arah pergerakan. Pak Blangkon sewaktu-waktu ingin mengetahui jarak terdekat antar bebek. Ia akan bertanya sebanyak K kali dengan pertanyaan berbunyi “Pada menit ke-t, berapa jarak terdekat antara bebek-bebek yang ada?” Jarak antara dua bebek didefinisikan sebagai banyaknya toko minimal yang perlu dilewati oleh salah satu bebek untuk pergi ke toko tempat bebek lainnya berada. Bantulah Pak Blangkon menjawab pertanyaannya dengan efisien! Format Masukan Baris pertama akan berisi label kasus uji. Label kasus uji adalah sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Karakter ke-0 (indeks dimulai dari 0) akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, atau berisi '.' (titik) jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau o jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter ke-i berisi karakter '.' (titik). Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Baris berikutnya berisi tiga bilangan bulat, yaitu M, N, dan K. Halaman 2 dari 15 N baris berikutnya berisi informasi untuk setiap bebek. Baris ke-i ini berisi dua bilangan, yaitu Pi, Ui. Jika Ui bernilai -1, artinya bebek ke-i bergerak berlawanan arah jarum jam. Jika Ui bernilai 1, artinya bebek ke-i bergerak searah jarum jam. K baris berikutnya berisi sebuah bilangan bulat, yaitu t yang menyatakan menit ke berapa pada pertanyaan Pak Blangkon. Tidak dijamin bilangan pada baris-baris ini terurut. Format Keluaran Untuk setiap pertanyaan, cetak jarak minimal antara bebek-bebek yang ada pada menit yang ditanyakan. Contoh Masukan 0..34567 7 3 4 2 -1 3 1 5 -1 1 2 4 6 Contoh Keluaran 0 2 1 1 Halaman 3 dari 15 Penjelasan Contoh Berikut ini adalah posisi bebek-bebek dari menit 0 sampai menit 6: t Bebek 1 Bebek 2 Bebek 3 0 2 3 5 1 1 4 4 2 7 5 3 3 6 6 2 4 5 7 1 5 4 1 7 6 3 2 6 Untuk jawaban pertanyaannya: Pada menit ke-1, jarak terdekat adalah 0 (bebek 2 dengan bebek 3). Pada menit ke-2, jarak terdekat adalah 2 (bebek 1 dengan bebek 2, atau bebek 2 dengan bebek 3). Pada menit ke-4, jarak terdekat adalah 1 (bebek 2 dengan bebek 3). Pada menit ke-6, jarak terdekat adalah 1 (bebek 1 dengan bebek 2). Subsoal Untuk setiap subsoal berlaku Ui = -1, atau Ui = 1 Subsoal 1 (5 poin) Subsoal ini hanya berisi kasus uji berikut ini: .1.34567 30 4 10 5 -1 29 -1 12 1 16 1 6 13 17 7 Halaman 4 dari 15 20 1 15 16 2 19 Subsoal 2 (8 poin) Subsoal ini hanya berisi kasus uji berikut ini: ..234567 70 7 8 37 1 33 1 59 1 67 -1 10 -1 39 -1 48 -1 5 3 4 12 14 6 11 9 Subsoal 3 (18 poin) 2 ≤ N ≤ 50 1 ≤ t ≤ 1.000 1 ≤ M ≤ 1.000 1 ≤ K ≤ 1.000 Subsoal 4 (27 poin) Halaman 5 dari 15 2 ≤ N ≤ 1.000 1 ≤ t ≤ 1.000 1 ≤ M ≤ 1.000 1 ≤ K ≤ 1.000 Subsoal 5 (14 poin) 2 ≤ N ≤ 1.000 1 ≤ t ≤ 250.000 1 ≤ M ≤ 1.000 1 ≤ K ≤ 250.000 Subsoal 6 (19 poin) 2 ≤ N ≤ 1.000 1 ≤ t ≤ 250.000 1 ≤ M ≤ 250.000 1 ≤ K ≤ 250.000 Subsoal 7 (9 poin) 2 ≤ N ≤ 1.000 1 ≤ t ≤ 1.000.000.000 (109) 1 ≤ M ≤ 250.000 1 ≤ K ≤ 250.000 Halaman 6 dari 15 Motif Batik Time limit: 1000 ms Memory limit: 65536 KB Deskripsi Yogyakarta memiliki beberapa jenis motif batik. Masing-masing jenis motif memiliki makna dan filosofinya tersendiri. Pak Dengklek yang sedang berada di Yogyakarta mampir ke sejumlah butik dan membeli N baju batik. Dari batik-batik yang dibeli Pak Dengklek, terdapat M jenis motif batik yang dinomori dari 1 sampai dengan M. Batik ke-i yang dibeli Pak Dengklek memiliki motif jenis Ci, dan memiliki tingkat kecerahan warna berupa suatu bilangan positif Wi. Batik-batik yang dibeli ini akan dipakai oleh keluarga besar Dengklek, dan diabadikan dalam sebuah foto keluarga. Pak Dengklek menyadari bahwa keindahan batik terletak pada keanekaragamannya. Dari N batik yang telah dibeli, Pak Dengklek ingin mengukur “total keindahan” dari seluruh batiknya. Menurut Pak Blangkon, sang ahli batik, total keindahan dari suatu kumpulan batik adalah jumlahan dari selisih tingkat kecerahan warna untuk setiap pasang batik yang berbeda motif. Sebagai contoh, jika N = 5, C = [1, 2, 1, 2, 2], dan W = [5, 3, 2, 4, 6], maka total keindahannya adalah : |W1-W2| + |W1-W4| + |W1-W5| + |W2-W3| + |W3-W4| + |W3-W5| = |5-3| + |5-4| + |5-6| + |3-2| + |2-4| + |2-6| = 2 + 1 + 1 + 1 + 2 + 4 = 11. Anda diberikan jenis motif dan tingkat kecerahan warna setiap batik yang dibeli Pak Dengklek. Bantulah Pak Dengklek menentukan total keindahan dari batik-batik tersebut Format Masukan Baris pertama akan berisi label kasus uji. Label kasus uji adalah sebuah string yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Karakter ke-0 (indeks dimulai dari 0) akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, atau berisi '.' (titik) jika bukan. Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau o jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter ke-i berisi karakter '.' (titik). Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Halaman 7 dari 15 Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Baris kedua berisi dua bilangan bulat, yaitu N dan M. N baris berikutnya berisi dua bilangan bulat. Bilangan-bilangan di baris ke-i ini adalah Ci dan Wi. Format Keluaran Sebuah bilangan yang menyatakan total keindahan dari kumpulan batik yang diberikan. Contoh Masukan 0..3456.8 5 2 1 5 2 3 1 2 2 4 2 6 Contoh Keluaran 11 Subsoal Pada setiap subsoal, berlaku 1 ≤ Ci ≤ M 1≤M≤N Subsoal 1 (6 poin) Hanya berisi kasus uji ini: .1.3456.8 10 10 10 6 9 10 4 10 2 5 2 7 Halaman 8 dari 15 1 10 3 8 9 4 6 7 6 2 Subsoal 2 (8 poin) Hanya berisi kasus uji ini: ..23456.8 11 3 3 7 3 9 3 10 1 9 1 6 1 10 1 9 2 8 1 1 3 7 2 9 Subsoal 3 (34 poin) 1 ≤ N ≤ 1.000 1 ≤ M ≤ 50 1 ≤ Wi ≤ 200 Subsoal 4 (6 poin) 1 ≤ N ≤ 105 1 ≤ M ≤ 50 1 ≤ Wi ≤ 200 Subsoal 5 (7 poin) 1 ≤ N ≤ 105 1 ≤ M ≤ 200 1 ≤ Wi ≤ 200 Halaman 9 dari 15 Subsoal 6 (9 poin) 1 ≤ N ≤ 105 1 ≤ M ≤ 2.000 1 ≤ Wi ≤ 2.000 Subsoal 7 (13 poin) 1 ≤ N ≤ 105 M=N Ci = i 1 ≤ Wi ≤ 109 Subsoal 8 (17 poin) 1 ≤ N ≤ 105 1 ≤ Wi ≤ 109 Peringatan Bagi pengguna C/C++, gunakan "%lld" atau cin/cout untuk membaca/menulis bilangan bulat 64-bit. Halaman 10 dari 15 Ayam Aneh Time limit: 100 ms Memory limit: 32768 KB Deskripsi Untuk menghemat biaya perjalanan, Pak Dengklek dan bebek-bebeknya menginap di rumah Pak Blangkon. Di sana, Pak Dengklek melihat kebun Pak Blangkon yang penuh dengan ayam. Warna ayam Pak Blangkon bermacam-macam. Setiap hari, Pak Blangkon memberikan ayamnya makanan. Makanan ini dapat mengakibatkan DNA seekor ayam bermutasi dan alhasil menjadikan warna ayam tersebut berubah. Pak Dengklek yang tertarik melihat warna ayam-ayam itu ingin mencoba mengubah warna bebek-bebeknya sendiri. Pak Dengklek pun bertanya kepada Pak Blangkon tentang DNA ayam-ayam yang dimiliki Pak Blangkon agar Pak Dengklek bisa mengimplementasikannya ke bebeknya sendiri. Tetapi Pak Blangkon yang iseng menyuruh Pak Dengklek menebak sendiri apa DNA ayamnya tersebut. DNA ayam-ayam tersebut dapat direpresentasikan sebagai sebuah string yang terdiri atas N huruf kapital dari A sampai dengan Z. Semua huruf yang sama dalam sebuah string DNA pasti akan berada bersebelahan. Sebagai contoh, AAASSSDDDFF adalah sebuah string DNA, sedangkan AAASSSDDDAAFFF bukan karena di antara A terdapat kelompok huruf S dan D. Cara Pak Dengklek menebak adalah sebagai berikut: Pak Blangkon memberikan suatu bilangan N yang merupakan panjang string DNA dari ayam yang ingin Pak Dengklek ketahui DNA-nya. Selain itu, Pak Blangkon juga memberikan bilangan K yang merupakan batas pertanyaan yang boleh Pak Dengklek tanyakan sebelum Pak Dengklek harus menebak string DNA yang dimiliki ayam tersebut. Setiap kali Pak Dengklek bertanya, ia akan memberikan suatu string. Setelah itu Pak Blangkon akan membalas YA atau TIDAK berdasarkan apakah string yang ditanyakan Pak Dengklek merupakan substring dari DNA ayam yang sedang ingin Pak Dengklek ketahui (YA jika substring dan TIDAK jika bukan). Sebagai informasi, X merupakan substring dari Y apabila X terdiri atas setidaknya satu karakter, dan X dapat dihasilkan dengan membuang nol atau lebih huruf-huruf awalan Y dan nol atau lebih huruf-huruf akhiran Y. Sebagai contoh, BEBE, EBE, BEK, dan BEBEK adalah substring dari BEBEK, sedangkan BEEK bukan substring dari BEBEK. Pak Dengklek pun kebingungan dengan cara untuk menebak DNA ayam-ayam Pak Blangkon. Bantulah Pak Dengklek menentukan DNA ayam Pak Blangkon! Format Interaksi Pada mulanya, program Anda akan menerima sebuah baris berisi label kasus uji. Label kasus uji adalah sebuahstring yang dijelaskan sebagai berikut: Panjang string tersebut adalah banyaknya subsoal ditambah satu. Karakter ke-0 (indeks dimulai dari 0) akan berisi 0 jika kasus uji tersebut merupakan contoh kasus uji, atau berisi '.' (titik) jika bukan. Halaman 11 dari 15 Untuk setiap nilai i di antara 1 hingga banyaknya subsoal, berlaku: o jika kasus uji tersebut memenuhi batasan subsoal ke-i, maka karakter ke-i berisi i, atau o jika kasus uji tersebut tidak memenuhi batasan subsoal ke-i, maka karakter ke-i berisi karakter '.' (titik). Sebagai contoh apabila label sebuah kasus uji sebuah soal adalah 0..345, maka: Soal tersebut memiliki 5 buah subsoal, Kasus uji tersebut merupakan contoh kasus uji, dan Kasus uji tesebut memenuhi batasan subsoal ke-3, ke-4, dan ke-5. Kemudian, program Anda akan menerima sebuah baris berisi dua buah bilangan bulat N dan K. Setelah itu, program Anda dapat melakukan serangkaian tindakan, yang masing-masing merupakan salah satu dari: Bertanya. Program Anda harus mengeluarkan sebuah baris berisi TANYA <pertanyaan> yakni, string TANYAdiikuti dengan substring yang Anda tanyakan. Setiap kali program Anda selesai bertanya, program Anda membaca sebuah string yang dijamin merupakan salah satu dari YA atau TIDAK, sesuai dengan definisi pada deskripsi soal. Menebak. Program Anda harus mengeluarkan sebuah baris berisi JAWAB <jawaban> yakni, string JAWAB diikuti dengan string DNA tebakan Anda. Program Anda harus berhenti setelah melakukan ini. Contoh Interaksi Misalkan string DNA yang sebenarnya adalah BAASSDDFFF. Berikut adalah contoh interaksi yang mungkin terjadi. Keluaran Program Anda Keluaran Program Grader 0..... 10 3 TANYA ABCD TIDAK TANYA AASSDDFF YA TANYA DFFF Halaman 12 dari 15 Keluaran Program Anda Keluaran Program Grader YA JAWAB BAASSDDFFF (interaksi selesai) Subsoal Pada semua subsoal, berlaku: String DNA hanya terdiri atas huruf kapital A s.d. Z Subsoal 1 (6 poin) N = 10 K = 10 String DNA hanya terdiri atas huruf A, B, atau C Subsoal 2 (10 poin) N = 10 K = 350 Khusus untuk subsoal 1 dan subsoal 2: Hanya terdapat sebuah kasus uji (satu subsoal dinyatakan oleh satu kasus uji), yang berupa game dan dapat dilihat di halaman pengumuman kontes. Anda boleh memainkan permainan ini berulang kali tanpa mendapatkan penalti. Jika Anda sudah memenangkan permainan untuk subsoal tertentu, Anda dapat memilih pilihan pada permainan untuk mengeluarkan source code yang dapat langsung Anda kirimkan ke grader dan menjawab dengan benar pada subsoal yang telah Anda menangkan. Anda tidak diwajibkan memainkan permainan ini untuk mengerjakan kedua subsoal ini. Anda diperbolehkan untuk menulis kode Anda sendiri untuk mengerjakan kedua subsoal ini. Halaman 13 dari 15 Subsoal 3 (31 poin) N = 26 K = 350 String DNA mengandung semua karakter dari A s.d. Z masing-masing tepat sekali Subsoal 4 (24 poin) 1 ≤ N ≤ 100 K = 500 Subsoal 5 (29 poin) 1 ≤ N ≤ 1.000 K = 750 Catatan Yang perlu diperhatikan adalah bahwa untuk tipe soal interaktif seperti ini, Anda harus selalu memberikan perintah fflush(stdout); (bagi pengguna C/C++) atau flush(output); (bagi pengguna PASCAL) setiap kali Anda mencetak keluaran (dengan kata lain, setiap kali ada perintah mencetak keluaran misalnya write, writeln, printf, cout, atau puts, tepat di bawahnya harus ada perintah fflush/flush). Sebagai contoh, berikut adalah contoh source code dalam bahasa Pascal yang akan selalu bertanya "TANYA ABC"dan kemudian menjawab "JAWAB DEF" tanpa mempedulikan nilai N dan K yang diberikan maupun bacaan hasil interaksi. var subsoal, jawaban: string; N, K: longint; begin readln(subsoal); readln(N, K); writeln('TANYA ABC'); flush(output); readln(jawaban); writeln('JAWAB DEF'); flush(output); end. Dan berikut adalah contoh source code yang melakukan hal yang sama dalam bahasa C++. #include <cstdio> Halaman 14 dari 15 #include <cstring> char subsoal[100], jawaban[100]; int N, K; int main() { gets(subsoal); scanf("%d %d", &N, &K); printf("TANYA ABC\n"); fflush(stdout); gets(jawaban); printf("JAWAB DEF\n"); fflush(stdout); return 0; } Peringatan Jika program Anda melakukan salah satu dari hal-hal di bawah ini: melakukan tindakan di luar format dan batasan yang ditentukan, bertanya lebih dari K kali, atau salah menjawab DNA maka nilai Anda untuk subsoal yang bersangkutan adalah nol. Selain itu, pastikan pula bahwa program Anda harus berhenti jika selesai melakukan interaksi. BIla tidak, maka Anda mungkin mendapatkan Time Limit Exceeded, Runtime Error, atau Internal Error untuk kasus uji yang bersangkutan. Halaman 15 dari 15