OSN ALL - Catatan Olimpiade Informatika

advertisement
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
Download