Try Out OSK2017 Kunci Jawaban Pembahasan

Kunci Jawaban & Hint
Try Out OSK 2017
Oleh : Lie, Maximilianus Maria Kolbe
1. Jawaban : E
Expected Difficulty : Easy
Hint : Gunakan sistem persamaan linear untuk menyelesaikan problem ini.
2. Jawaban : A
Expected Difficulty : Medium
Hint : Perhatikan bahwa 2017 adalah angka prima. Pelajari lebih lanjut tentang Fermat’s Little
Theorem.
3. Jawaban : C
Expected Difficulty : Easy
Hint : Pelajari Logika Matematika (Propositional Logic with Quantifiers).
4. Jawaban : A
Expected Difficulty : Medium
Hint : Ubah kasus tersebut menjadi persamaan ax + by = 1 . Pelajari lebih lanjut mengenai
Extended Euclidean untuk mempermudah pengerjaan soal. Selebihnya dapat di bruteforce.
5. Jawaban : C
Expected Difficulty : Medium
Hint : Dengan hint yang di dapatkan dari nomor sebelumnya (melalui Extended Euclidean),
gunakan Euler’s Totient Function untuk menyelesaikan soal ini.

6. Jawaban : C
Expected Difficulty : Hard
Hint 1 : Apabila Anda menghitung FPB hanya dari 2 bilangan pertama saja, maka Anda dapat
mengetahui bahwa jawaban yang mungkin adalah di antara 2 atau 6.
Hint 2 : Anda dapat melakukan pembuktian dengan aturan modullo bahwa 2002N + 2 habis dibagi
6 untuk N > 0 .
7. Jawaban : TIDAK ADA (SALAH SOAL)
8. Jawaban : C
Expected Difficulty : Easy
Hint : Perhatikan bahwa setiap lampu nya akan berubah sebanyak banyak faktor dari nomor lampu
tersebut.
9. Jawaban : B
Expected Difficulty : Easy
Hint : Tidak ada.
10. Jawaban : A
Expected Difficulty : Easy
Hint : Tidak ada.

11. Jawaban : E
Expected Difficulty : Easy

Hint : Tidak ada.
12. Jawaban : D
Expected Difficulty : Easy
Hint : Tidak ada.
13. Jawaban : C
Expected Difficulty : Easy (Time Waster)
Hint : Gunakan Inklusi-Eksklusi untuk menyelesaikan permasalahan ini.
14. Jawaban : D
Expected Difficulty : Medium (Tricky)
Hint 1 : Dengan menggunakan sifat A + A′ = S ⇒ A = S − A′ , Anda akan dapat menyelesaikan soal
ini dengan mudah.
Hint 2 : Perhatikan kata “setidaknya” pada soal.
15. Jawaban : B
Expected Difficulty : Easy
Hint : Apabila Anda mengerti sifat segitiga (untuk a, b, c merupakan panjang sisi segitiga dimana
a < b < c maka a + b > c ) maka Anda akan dapat menyelesaikan soal ini dengan mudah.
16. Jawaban : C
Expected Difficulty : Medium/Hard
Hint : Perhatikan bahwa jawaban yang dihasilkan (berdasarkan nilai N yang berbeda) akan
membentuk pola/deret yang kemudian dapat diselesaikan baik dengan rumus deret aritmatika atau

dengan sigma (penjumlahan).
17. Jawaban : E
Expected Difficulty : Medium
Hint : Anda dapat merubah permasalahan tersebut menjadi lebih mudah apabila Anda memilih
ketuanya terlebih dahulu, kemudian baru menghitung banyaknya kemungkinan tim yang dapat
dibentuk dengan ketua yang sudah ditunjuk sebelumnya. Hasil dari perhitungan tersebut cukup
dikali dengan 15 (karena ada 15 kemungkinan berbeda yang dapat ditunjuk sebagai ketua).
Another Solution : Dengan menggunakan sigma dan permainan aljabar, Anda dapat menemukan
rumus dari permasalahan ini. Cara ini tidak disarankan, tetapi apabila Anda tidak kritis dalam
menganalisa soal dan lebih memberatkan sisi perhitungan, soal ini juga bisa diselesaikan dengan
cara tersebut.
18. Jawaban : A
Expected Difficulty : Medium
Hint : Anda dapat menyelesaikan permasalahan ini dengan Kombinatorik dan Prinsip
Inklusi-Eksklusi. Perhatikan bahwa semua jalur yang mungkin merupakan jalur terpendek, dan
jalur yang berbeda akan didapatkan dengan merubah susunan langkah yang dapat dilakukan, baik
gerak ke kanan maupun ke bawah.

Another Solution : Anda dapat menggunakan Dynamic Programming. MIsalkan fungsi f(x,y) adalah
banyaknya cara untuk mengunjungi titik (x,y) tanpa melewati batu. Jika titik (x,y) dianggap invalid

apabila (x,y) diluar grid atau terdapat batu di titik (x,y), maka
f (x, y) = {0, if (x, y) invalid | f(x − 1, y) + f (x, y − 1), otherwise} dengan base case f (1, 1) = 1 .
Kemudian Anda dapat mensimulasikan perhitungan fungsi tersebut sebanyak 10*10=100 kali,
sangat tidak disarankan, tetapi solusi yang benar.
19. Jawaban : B
Expected Difficulty : Medium (Time Waster)
Hint : Cara yang dilakukan sama persis dengan nomor sebelumnya. Hanya saja baik dengan cara
Kombinatorik maupun Dynamic Programming, keduanya tetap menghabiskan waktu karena soal
ini memang di design sebagai Time Waster Problem. Meskipun demikian, cara Kombinatorik tetap
dapat menyelesaikan permasalahan ini jauh lebih cepat dibandingkan dengan Dynamic
Programming.
20. Jawaban : C
Expected Difficulty : Medium (Tricky)

N

Hint 1 : Anda dapat menyelesaikan permasalahan ini dengan memahami deret ∑ C (N, i) = 2N atau
i=0

dengan mengamati pola pada Segitiga Pascal.

Hint 2 : Perhatikan kalimat “...ia berniat untuk mengirim sebuah armada kapal berisi ​beberapa
kapalnya untuk berperang.” bahwa sebuah armada tidak boleh kosong/tidak memiliki kapal.
21. Jawaban : C
Expected Difficulty : Easy
Hint : Solusi sesungguhnya pada problem ini adalah Dynamic Programming, tetapi akan memakan
waktu yang cukup banyak untuk mensimulasikan Dynamic Programming yang ada. Cara yang
paling cepat adalah dengan mencoba-coba kemungkinan-kemungkinan yang dirasa akan
menghasilkan hasil yang lebih murah.
22. Jawaban : A
Expected Difficulty : Easy
Hint : Sama dengan soal sebelumnya.
23. Jawaban : D
Expected Difficulty : Easy
Hint : Perhatikan bahwa setiap Kuda bergerak, warna (hitam putih pada papan) akan selalu
berganti.
24. Jawaban : E
Expected Difficulty : Easy
Hint : Sama dengan soal sebelumnya.
25. Jawaban : E
Expected Difficulty : Easy

Hint : Permasalahan ini dapat diselesaikan dengan Dynamic Programming. Misalkan sebuah
fungsi f(N) berarti banyaknya susunan ubin berbeda pada rumah dengan ukuran 3 meter x N
meter, maka f (N) = f (N − 1) + 2f(N − 2) + f (N − 3) dengan base case f (0) = 1 .

26. Jawaban : D
Expected Difficulty : Easy
Hint : Tidak ada.
27. Jawaban : D
Expected Difficulty : Easy
Hint : Tidak ada.
28. Jawaban : E
Expected Difficulty : Medium
Hint : Perhatikan kaitan antara sifat bilangan habis dibagi 9 dengan jumlah digit-digit penyusun
suatu bilangan. Hal ini menyebabkan setelah 1x proses tersebut dilakukan, bilangan yang
dihasilkan pasti habis dibagi 9.
29. Jawaban : D
Expected Difficulty : Easy
Hint : Pelajari permasalahan Minimum Spanning Tree dengan algoritma Kruskall.
30. Jawaban : B
Expected Difficulty : Easy

Hint : Pelajari permasalahan Traveling Salesman dan solusinya menggunakan Dynamic
Programming. Tetapi karena mensimulasikan Dynamic Programming dari permasalahan ini akan
memakan waktu banyak, akan lebih cepat apabila dicoba-coba semua kemungkinan yang
memungkinkan menghasilkan jawaban yang seminimum mungkin.
31. Jawaban : B
Expected Difficulty : Easy
Hint : Tidak ada.
32. Jawaban : B
Expected Difficulty : Medium (Tricky)
Hint : Perhatikan bahwa di soal hanya dicantumkan orang-orang tertentu “berjejeran”, tetapi siapa
yang di baris kiri dan siapa yang di baris kanan tidak diketahui.
33. Jawaban : E
Expected Difficulty : Easy
Hint : Tidak ada.
34. Jawaban : D
Expected Difficulty : Easy
Hint 1 : Anda akan mendapatkan faktor positif dari 100 dengan mudah, kemudian mengkalikan
semua faktor itu dan mendapatkan jawabannya.
Hint 2 : Anda dapat menggunakan rumus banyak faktor, kemudian jawaban dari permasalahan ini
adalah 100X dengan X adalah pembulatan ke atas dari banyak faktor dibagi dengan 2.

35. Jawaban : E
Expected Difficulty : Medium

N

Hint : Gunakan rumus deret ∑ i = 1 + 2 + 3 + ... + N = 12N(N + 1) dan
N

i=1

∑ i2 = 12 + 22 + 32 + ... + N 2 = 16N(N + 1)(2N + 1) kemudian menggunakan pertidaksamaan untuk

i=1

menyelesaikan permasalahan yang ada.
36. Jawaban : D
Expected Difficulty : Hard
Hint 1 : Untuk mempermudah perhitungan, hitung secara Bottom Up (dari Base case hingga ke
Jawaban yang ada) yang nantinya akan ditemukan sebuah pola.
Hint 2 : Apabila dianalisa lebih lanjut, program tersebut mencari nilai dari 1 + 2 + 3 + ... + N dalam

kompleksitas O(log N) menggunakan Divide & Conquer.
37. Jawaban : A
Expected Difficulty : Medium
Hint : Analisa satu per satu, kegunaan dari masing-masing fungsi, dari AAA hingga DDD. Cara
tersebut akan lebih mudah dibandingkan mengerjakan langsung di DDD tanpa mengetahui fungsi
dari AAA hingga CCC.
38. Jawaban : C
Expected Difficulty : Medium
Hint 1 : Apabila Anda sudah mengetahui kegunaan dari AAA hingga DDD (dari nomor
sebelumnya), Anda dapat menganalisa fungsi dari EEE dengan mudah dan mengetahui secara
langsung bahwa fungsi tersebut adalah Algoritma Euclidean. Pelajari lebih lanjut mengenai
algoritma tersebut.
Hint 2 : Hingga nomor ini, seharusnya Anda sudah dapat mengidentifikasi bahwa parameter ketiga
dari setiap fungsi tidak digunakan sama sekali.
39. Jawaban : A
Expected Difficulty : Medium
Hint : Sama dengan soal sebelumnya.
40. Jawaban : D
Expected Difficulty : Medium
Hint : Setelah mengetahui kegunaan dari fungsi AAA hingga EEE, Anda dapat menganalisa apa

yang sebenarnya dioutputkan dari program tersebut adalah banyaknya bilangan yang relatif prima
dengan n. Gunakan Euler’s Totient Function untuk menyelesaikan permasalahan ini.
41. Jawaban : A
Expected Difficulty : Medium
Hint : Sama dengan soal sebelumnya.
42. Jawaban : C
Expected Difficulty : Easy
Hint : Perhatikan bahwa poi(bb,dd) akan mengembalikan nilai dari bb + (bb + 1) + (bb + 2) + ... + dd
dalam kompleksitas O(log N) , yaitu dengan teknik Divide & Conquer. Pertama-tama, jangkauan
dari bb hingga dd dibagi menjadi 2, sebut saja bagian kiri dan kanan. Kemudian bagian kiri di

proses terlebih dahulu menggunakan rekursi, kemudian juga dengan bagian kanan. Kemudian
hasilnya dijumlahkan.
43. Jawaban : C
Expected Difficulty : Easy
Hint : Sama dengan soal sebelumnya, hanya dirubah menjadi kali.
44. Jawaban : C
Expected Difficulty : Hard(est)
Hint : Perhatikan bahwa hasil dari poi(bb,dd) bukanlah bb − (bb + 1) − (bb + 2) − ... − dd .
Solusi 1 : Cara termudah untuk menyelesaikan soal ini adalah dengan menghitung secara Bottom

Up. Pertama-tama, perhatikan bahwa perubahan tanda kurang dan tambah dipengaruhi oleh
banyaknya bilangan di antara bb dan dd. Asumsikan fungsi tersebut kita ubah menjadi f (x) dimana
x = dd − bb + 1 (banyaknya bilangan diantara bb dan dd). Kemudian akan terdapat 3 kemungkinan
jawaban, yaitu konstanta (yang tidak perlu kita ketahui nilainya), variabel (dipengaruhi oleh nilai bb
dan dd, karena kita hanya menghitung berdasarkan x), dan konstanta nol. Apabila kita hitung
secara Bottom Up, akan didapatkan sebagai berikut :
● f(1) akan mengembalikan suatu variabel (tergantung dari nilai bb dan dd)
● f(2)=f(1)-f(1) akan mengembalikan suatu konstanta (karena pengurangan dari 2 buah
variabel berbeda dengan perlakuan fungsi sejenis/memiliki jangkauan yang sama.)
● f(3)=f(2)-f(1) akan mengembalikan suatu variabel (karena pengurangan dari variabel dan
konstanta)
● f(4)=f(2)-f(2) akan mengembalikan nilai 0 (karena pengurangan dari konstanta yang sama)
● f(5)=f(3)-f(2) akan mengembalikan suatu variabel (karena pengurangan dari variabel dan
konstanta)
Lakukan proses itu hingga ditemukan pola bahwa untuk setiap x dengan nilai habis dibagi 4, maka
akan mengembalikan nilai 0. Karena banyaknya bilangan dari 2 hingga 2017 adalah 2016
(2017-2+1), maka output dari program tersebut adalah 0.
(Solusi tersebut dibuat oleh ​Christopher Samuel dan sudah dibuktikan oleh ​Kwee Lung Sin
menggunakan Induksi Matematika, bahwa pola tersebut akan berlangsung dengan pasti. Terima
kasih kepada mereka berdua atas solusi yang lebih mudah dari solusi penulis).
Solusi 2 : Anda dapat menyelesaikan permasalahan ini dengan menghitung secara Top Down.
Mula-mula kita simulasikan poi(2, 2017) = poi(2, 1009) − poi(1010, 2017) . Perhatikan bahwa keduanya
akan memiliki perlakuan yang sama di dalam fungsi (karena memiliki jangkauan yang sama),
sehingga hasil dari pengurangan tersebut mungkin mengembalikan nilai negatif atau nol (tidak
mungkin positif).
Karena masih belum mendapatkan jawaban, kita lakukan simulasi fungsi tersebut satu kali lagi,
dan kita dapatkan poi(2, 505) − poi(506, 1009) − poi(1010, 1518) + poi(1519, 2017) dan perhatikan
kembali bahwa keempat fungsi tersebut memiliki banyak bilangan yang sama di dalamnya,
sehingga mereka akan mendapatkan perlakuan fungsi yang sama.
Kemudian kita perlu membuktikan bahwa poi(bb, dd), poi(bb + b, dd + b), poi(bb + 2b, dd + 2b) dan
seterusnya akan membentuk suatu barisan aritmatika. Hal tersebut dapat terjadi karena mereka
mendapatkan perlakuan yang sama dari fungsi, hanya saja nilai nya yang berbeda. Pembuktian
dapat dilakukan dengan pembuktian langsung, dan diserahkan kepada pembaca sebagai latihan.
Oleh karena itu, misalkan poi(506, 1009) = k + poi(2, 505) , maka

poi(1010, 1518) = 2k + poi(2, 505) dan poi(1519, 2017) = 3k + poi(2, 505)
⇒ poi(2, 2017) = poi(2, 505) − (poi(2, 505) + k) − (poi(2, 505) + 2k) + (poi(2, 505) + 3k)
⇒ poi(2, 2017) = 3k − k − 2k = 0
45. Jawaban : D
Expected Difficulty : Medium
Hint : Untuk menyederhanakan perhitungan, kita dapat gunakan Bottom Up.
46. Jawaban : B
Expected Difficulty : Easy
Hint : Apabila a div c = c, berarti a = c*c.
47. Jawaban : A
Expected Difficulty : Easy
Hint : Sama dengan soal sebelumnya.
48. Jawaban : B
Expected Difficulty : Medium/Hard
Hint : Fungsi kuro(x,y) akan mengembalikan nilai maksimum dari x dan y. Sedangkan untuk
menganalisa fungsi shiro(x,y), apabila Anda terbiasa dalam mengerjakan soal Dynamic
Programming, maka Anda dapat melihat fungsi tersebut mirip dengan Longest Common
Subsequence.
49. Jawaban : D
Expected Difficulty : Medium/Hard
Hint : Sama dengan soal sebelumnya.
Soal sejenis nomor 48-49 menunjukkan pentingnya berlatih programming & competitive
programming dalam mengerjakan soal OSK dan OSP. Selain membantu kita untuk mengetahui
algoritma yang ada pada soal di bagian algoritmika, juga menjadi latihan yang baik untuk
mempersiapkan OSN. Selamat berlatih di :
https://training.ia-toki.org/training/curriculums/1/courses

50. Jawaban : A
Expected Difficulty : Easy
Hint : Anda dapat menemukan pola dari fungsi f(x) dengan mudah untuk menjawab permasalahan
ini.