Anda di halaman 1dari 14

TRY OUT ONLINE KSN-P 2020

KOMPUTER
TRY OUT ONLINE KSN-P 2020
KOMPUTER

PEMBAHASAN

1. Agar dapat memastikan kemenangannya, Pak Dengklek harus selalu mempertimbangkan agar
dijamin masih terdapat batu yang tersisa, berapapun batu yang diambil oleh Pak Ganesh.
Perhatikan apabila kedua tumpukan memiliki jumlah batu yang sama, Pak Dengklek bisa me-
“mirror” langkah Pak Ganesh pada tumpukan yang satunya. Dengan demikian, Pak Dengklek
dapat mengambil 7 batu dari tumpukan kedua pada putaran pertama. Kemudian, kedua
tumpukan memiliki jumlah batu yang sama, yaitu 6. Dengan menggunakan strategi tadi, dapat
dipastikan Pak Dengklek adalah orang terakhir yang mengambil batu.

Jawaban: 7,2

2. Strategi yang sama masih berlaku. Akan tetapi, Pak Dengklek tidak dapat mengambil 7 batu
pada langkah pertama, karena peraturan yang baru. Dengan kata lain, jangan sampai total batu
yang Pak Dengklek dan Pak Ganesh ambil pada putaran pertama adalah 7 (dengan alasan yang
sama seperti nomor 1, tetapi Pak Ganesh yang dapat me-“mirror” langkah Pak Denglek pada
tumpukan yang satunya).

Perhatikan bahwa strategi “mirror” tersebut bukan hanya dilakukan pada 2 tumpukan batu
dengan jumlah batu yang sama. Pada suatu tumpukan, Pak Dengklek juga dapat melakukan
mirror setiap 5 batu yang diambil Pak Ganesh dan Pak Dengklek. Apabila Pak Ganesh
mengambil X, maka Pak Dengklek pasti dapat mengambil 5-X. Dengan demikian, apabila suatu
tumpukan memiliki kelipatan 5, Pak Dengklek pasti menang.

Menggabungkan 2 strategi tersebut, Pak Dengklek dapat mengambil 2 batu pada tumpukan
kedua. Kemudian, jumlah batu pada tumpukan kedua menjadi kurang 5 menuju ke keadaan
jumlah batu sama pada kedua tumpukan. Dengan demikian, langkah apapun yang dilakukan Pak
Ganesh, pasti dapat di-“mirror” oleh Pak Dengklek menggunakan 2 strategi yang ada.

Jawaban: 2,2

3. Soal ini dapat dipandang dari sudut Kombinatorik. Untuk mempermudah perhitungan, kita akan
mencari berapa kali digit 1 ditulis dari 1 hingga 9999, kemudian jawabannya cukup ditambah
dengan 1 (dari 10000). Perhatikan bahwa digit 1 dapat muncul di 4 posisi: satuan, puluhan,
ratusan, dan ribuan. Misalkan kita akan menghitung kemunculan digit 1 pada satuan. Dengan
kata lain, posisi yang lain dapat ditempati oleh digit yang lain, dari 0 hingga 9. Akan tetapi,
terdapat kemungkinan muncul leading zero (contoh: 0019). Meskipun tidak boleh terdapat
leading zero, tetapi kita dapat memanfaatkan ini untuk mempermudah perhitungan kita, yaitu
dengan mengabaikan leading zero yang ada (contoh: 0019 dianggap sebagai 19). Dengan kata
lain, kemunculan digit 1 pada satuan adalah 10*10*10=1000. Sama untuk posisi yang lainnya.

Jawaban: 4001
TRY OUT ONLINE KSN-P 2020
KOMPUTER

4. Anda dapat mencari jawabannya secara manual. Terdapat 3 bilangan yang “terlihat prima”,
yaitu 49, 77, dan 91.

Jawaban: 3

5. Mencari semua bilangan “terlihat prima” kurang dari 1000 akan sangat menghabiskan waktu.
Oleh karena itu kita perlu menggunakan cara yang lebih cepat. Untuk memastikan apakah
jawaban tersebut benar, kita bisa terapkan untuk soal nomor 4 terlebih dahulu dan jawaban
dari cara tersebut harus 3. Pertama, coba sederhanakan permasalahan tersebut menjadi:
berapa banyak bilangan dari 1 hingga 100 yang tidak habis dibagi 2, 3, atau 5. Dengan prinsip
Inklusi-Eksklusi, jawaban dari permasalahan tersebut adalah 100-(100/2+100/3+100/5-100/6-
100/10-100/15+100/30)=26. Dari 26 tersebut, kita ketahui bahwa terdapat 22 bilangan prima
yang bukan 2, 3, dan 5. Apabila kita abaikan prima-prima tersebut, maka jawaban saat ini
adalah 26-22=4. Perhatikan bahwa 1 tidak habis dibagi 2, 3, maupun 5, tetapi juga bukan
bilangan komposit. Apabila kita mengabaikan 1, jawabannya adalah 4-1=3, dan jawaban ini
sama dengan jawaban nomor 4. Sekarang, terapkan hal yang sama tetap untuk 1 hingga 1000.

Jawaban: 100

6. Karena Pak Ganesh bekerja selama 5 jam, dan Pak Chanek selama 4 jam, maka total pekerjaan
tersebut adalah 9 jam. Biasanya, pekerjaan tersebut dibagi rata, yaitu masing-masing
mengerjakan selama 3 jam. Akan tetapi, karena Pak Dengklek pergi, Pak Ganesh harus bekerja 2
jam lebih, sedangkan Pak Chanek harus bekerja 1 jam lebih. Uang yang diterima Pak Ganesh
adalah 2/(2+1)*9=6.

Jawaban: 6

7. Gunakan cara yang sama dengan nomor 6.

Jawaban: 9

8. Untuk mempermudah pengerjaan, kita dapat mengubah sudut pandang dari soal ini: pertama
kita mencari semua kemungkinan (boleh mengunjungi (3,3)), kemudian kita kurangi dengan
semua konfigurasi yang invalid (harus mengunjungi (3,3)). Untuk mencari jawaban tersebut, kita
perlu generalisasi dari soal ini.

Kita dapat membuat rumus sendiri untuk mencari banyaknya cara berjalan dari (0,0) menuju
(x,y). Perhatikan bahwa sebuah langkah yang valid tersusun atas x kali ke-kanan dan y kali ke-
atas dengan urutan bebas. Banyaknya konfigurasi berbeda untuk mengacak langkah tersebut
dengan menggunakan aturan redundansi adalah (x+y)!/(x!*y!). Jika Anda terbiasa dengan
rumus, Anda juga bisa menggunakan permutasi dengan elemen berulang.
TRY OUT ONLINE KSN-P 2020
KOMPUTER

Kembali ke soal awal, banyaknya cara berjalan dari (0,0) menuju ke (6,6) adalah 12!/(6!*6!).
Langkah yang invalid (harus mengunjungi (3,3)) adalah berjalan dari (0,0) ke (3,3), dilanjutkan
dengan (3,3) ke (6,6). Banyak cara untuk melakukan langkah tersebut adalah
(6!/(3!*3!))*(6!/(3!*3!)).

Jawaban: 524

9. Gunakan dengan cara yang sama dengan nomor 8. Perhatikan bahwa langkah yang invalid
adalah harus menunjungi (2,2) atau (4,4). Apabila harus mengunjungi (2,2), maka kita dapat
berjalan dari (0,) ke (2,2), dilanjutkan dengan (2,2) ke (6,6). Sama dengan harus mengunjungi
(4,4). Akan tetapi, terdapat konfigurasi yang dihitung 2x, yaitu dari (0,0) ke (2,2), dilanjutkan
(2,2) ke (4,4), dilanjutkan (4,4) ke (6,6). Oleh karena itu Anda dapat menggunakan prinsip
Inklusi-Eksklus.

Jawaban: 708

10. Untuk soal ini, Anda dapat menghitung manual dengan hanya mempertimbangkan satuan dari
masing-masing balok.

Jawaban: 8

11. Menghitung bilangan yang ada pada balok paling atas dan mencari faktor-faktor yang ada akan
membutuhkan waktu yang lama. Sebaliknya, kita bisa memperoleh faktorisasi prima dari
bilangan paling atas tanpa mengetahui bilangan tersebut. Caranya, kita dapat menghitung
berapa “kontribusi” dari sebuah balok yang berada di paling bawah. Dapat kita cari bahwa
bilangan 2 dan 11 akan terhitung 1 kali, bilangan 3 dan 7 terhitung 4 kali, dan bilangan 12
terhitung 6 kali. Dengan kata lain, bilangan yang ada di balok paling atas adalah
(2^1)*(3^4)*(12^6)*(7^4)*(11^1)=(2^13)*(3^10)*(7^4)*(11^1). Dengan menggunakan rumus
banyak faktor, banyak faktor dari bilangan paling atas adalah 14*11*5*2.

Jawaban: 1540

12. Kita tahu “kontribusi” dari masing-masing balok di lapisan paling bawah. Balok paling kiri dan
kanan terhitung 1 kali, balok paling tengah terhitung 6 kali, dan balok sisanya terhitung 4 kali.
Untuk mencari bilangan yang paling besar, kita dapat melakukan Greedy. Letakkan bilangan
yang paling besar ke balok yang terhitung paling banyak. Dengan kata lain, kita bisa meletakkan
100 ke balok tengah, 99 dan 98 ke balok yang bersebelahan dengan balok tengah, lalu 96 dan
97 ke balok paling kiri dan kanan. Kemudian, lakukan cara yang sama dengan nomor 11.

Jawaban: 257400
TRY OUT ONLINE KSN-P 2020
KOMPUTER

13. Soal ini menjadi mudah apabila kita lihat dari sudut pandang Geometri, sumbu x
merepresentasikan kadar apel, dan sumbu y untuk nanas. Untuk setiap tipe jus yang ada dapat
direpresentasikan dengan sebuah titik. Jus 1 berada di koordinat (10, 10), sedangkan jus 2
berada di (40, 60). Perhatikan bahwa semua titik yang berada di segmen garis yang
menghubungkan jus 1 dan jus 2 dapat dibentuk dengan pencampuran kedua jus tersebut.

Jawaban: B

14. Sekarang perhatikan apa yang terjadi jika terdapat lebih dari 2 tipe jus. Pertama, kita perhatikan
jika ada 3 tipe jus. Dari 2 tipe jus yang ada, semua yang berada di segmen garis tersebut dapat
dibentuk. Kemudian, anggap jus campuran yang berada di segmen garis itu adalah “tipe jus”
baru. Dengan mencampurkan tipe jus dari jus campuran dengan tipe jus ketiga, maka semua jus
yang berada di dalam segitiga yang dibentuk dari tipe jus 1, 2, dan 3 pasti dapat dibentuk
dengan mencampurkan ketiga jus tersebut dengan ratio tertentu.

Dengan kata lain, apabila terdapat lebih dari 3 jus, kita dapat membuat semua jus yang berada
di poligon terkecil sedemikian sehingga semua tipe jus berada di dalam poligon tersebut.
Poligon ini juga dikenal dengan istilah “Convex Hull”.

Jawaban: B,C
TRY OUT ONLINE KSN-P 2020
KOMPUTER

15. Permasalahan ini juga dikenal dengan nama Maximum Flow (Maxflow). Meskipun terdapat
algoritma untuk menyelesaikan Maxflow, akan tetapi cukup sulit untuk disimulasikan di atas
kertas. Solusinya, kita bisa menghitung secara manual air yang dapat melalui suatu pipa.
Misalkan, terdapat air yang melalui rute ABDF. Air yang mengalir melalui rute ABDF adalah
maksimal 12, karena terhalang oleh kapasitas DF, yaitu 12. Setelah 12 air melewati rute ABDF,
maka kapasitas AB menjadi 20-12=8, kapasitas BD menjadi 17-12=5, kapasitas DF menjadi 12-
12=0, dan kita tahu bahwa 12 air tersebut adalah debit air yang keluar melalui rute ABDF.
Lakukan algoritma tersebut hingga tidak ada air yang bisa keluar lagi.

Jawaban: 26

16. Kita bisa menggunakan kapasitas akhir dari jaringan tersebut setelah dialiri dengan flow
maksimum pada nomor 15. Perhatikan bahwa pada jaringan tersebut, kita tidak bisa
menambah Maxflow hanya dengan menambah kapasitas sebuah pipa.

Jawaban: 26

17. Kita bisa menggunakan kapasitas akhir dari jaringan tersebut setelah dialiri dengan flow
maksimum pada nomor 15. Perhatikan bahwa kapasitas pipa AC yang tersisa adalah 5. Oleh
karena itu, kita cukup membuat pipa CF dengan kapasitas 5, untuk menghabiskan kapasitas pipa
AC tersebut.

Jawaban: 5

18. Soal ini adalah soal tersulit di paket soal ini, karena tidak mungkin kita mencari satu per satu
semua string biner yang memenuhi, selain itu juga dibutuhkan observasi-observasi menarik
untuk menyelesaikan soal ini. Meskipun jawabannya sederhana, yaitu (2^10)-6*(2^6), akan
tetapi untuk memperoleh jawaban tersebut dibutuhkan banyak analisa.

Pertama, kita butuh tahu kapan suatu string memiliki banyak substring “100” sama dengan
banyak substring “001. Perhatikan bahwa string “100001”, “100001”, dst semuanya memiliki
sebuah substring “100” dan “001”. Apa yang terjadi jika kita mengurangi jumlah “0” yang
berada di antara “1” tersebut? Misalkan string tersebut menjadi “10001”. Ternyata string
tersebut tetap memiliki sebuah substring “100” dan “001”. Demikian juga dengan “1001”.
Bagaimana dengan “101” dan “11”? String “101” dan “11” ternyata juga memiliki jumlah
substring “100” dan “001” yang sama, yaitu 0 (tidak terdapat substring “100” dan “001”).
Kesimpulan dari observasi ini adalah, berapapun “0” yang diapit oleh dua buah “1”, maka
jumlah substring “100” akan selalu sama dengan substring “001”.

Kedua, apa yang terjadi apabila terdapat lebih dari 2 digit “1”? Misalkan saja terdapat sebuah
string biner “1X1Y1” yang mana X dan Y merepresentasikan berapapun digit “0” yang ada
TRY OUT ONLINE KSN-P 2020
KOMPUTER

(sebagai contoh, “1000101”. Perhatikan bahwa “1X1” memiliki sebuah substring “100” dan
“001”, demikian pula dengan “1Y1”. Dengan kata lain, “1X1Y1” memiliki 2 buah substring “100”
dan 2 buah substring “001”. Demikian pula dengan apabila terdapat 4 buah digit “1”, maupun 5,
6, dst. Kesimpulan dari observasi ini adalah, apapun digit yang diapit oleh “1” paling kiri dan
“1” paling kanan, maka jumlah substring “100” akan selalu sama dengan substring “001”.

Meskipun kita tahu apa yang membuat banyaknya substring “100” sama dengan substring
“001”, akan tetapi banyak sekali kemungkinan kasus yang valid. Sebagai contoh, string
“0..001X100..0” merupakan string yang valid, yang mana X merepresentasikan sebuah string
biner apapun. Memang kita bisa membagi kasus, berapa banyak “0” yang kita letakkan di paling
kiri dan paling kanan, akan tetapi kasusnya akan sangat banyak. Sebaliknya, kita bisa mencoba
mencari berapa banyak string yang invalid. Kita tahu bahwa terdapat 2^10=1024 string yang
ada. Apabila kita kurangkan string yang invalid ke 1024, maka kita memperoleh banyaknya
string yang valid, yaitu jawaban yang kita inginkan.

Observasi terakhir adalah, kapan sebuah string dikatakan invalid? Perhatikan bahwa hanya “0”
paling kiri dan paling kanan yang dapat membuat string tersebut invalid. Jika pada salah sisi kiri
terdapat substring “001” tetapi pada sisi kanan tidak ada substring “100” (dan sebaliknya),
maka string tersebut tidak valid. Sebagai contoh, “0..001X10” atau “1X100..0”. Sekarang, hanya
terdapat 2 kasus: hanya bagian kiri yang ada substring “001”, atau hanya bagian kanan yang ada
substring “100”. Untuk kasus pertama, terdapat 3 cara yang invalid, yaitu “00X01”, “00X10”,
dan “00X11” yang mana X merepresentasikan string biner apapun. Demikian pula untuk kasus
kedua, terdapat 3 cara yang invalid, yaitu “10X00”, “01X00”, dan “11X00”. Karena panjang
string adalah 10, dan 2 digit terpakai di kiri + 2 digit terpakai di kanan, maka X memiliki panjang
6 digit. Banyaknya X yang memenuhi adalah 2^6. Dengan kata lain, banyaknya string yang
invalid adalah 6*2^6=384.

Jawaban: 640

Tips: soal pendek bukan berarti mudah :)


TRY OUT ONLINE KSN-P 2020
KOMPUTER

19. Soal ini hanya dapat dikerjakan dengan mencoba-coba. Cek jika suatu hari (misalkan Senin)
adalah jawabannya, apakah terdapat kontradiksi atau tidak. Cari hingga Anda menemukan hari
yang tidak ada kontradiksi terhadap semua pernyataan yang ada. Apabila jawabannya adalah
Kamis, maka: Kemarin (Rabu) robot berkata “Kemarin (Selasa) saya jujur”. Karena robot
berbohong pada hari Rabu, maka robot tersebut tidak jujur pada hari Selasa, dan pernyataan ini
tidak kontradiksi. Lanjutkan pengecekan untuk semua pernyataan yang ada.

Jawaban: Kamis

20. Perhatikan pada suatu papan catur yang petak-petaknya diwarnai hitam-putih secara
berselingan, apabila sebuah kuda bergerak, maka warna petak nya pasti akan berubah. Oleh
karena itu, solusi yang optimal adalah meletakkan kuda pada warna hitam semua, karena suatu
langkah akan membuat kuda tersebut berada pada petak putih, yang mana tidak terdapat kuda
pada petak putih. Meletakkan kuda pada semua petak putih juga merupakan solusi yang
menghasilkan jawaban yang sama.

Jawaban: 32

21. Kita ketahui bahwa pada 20 petak tersebut, kita bisa meletakkan 10 kuda dengan menggunakan
strategi yang sama seperti pada nomor 20. Akan tetapi, untuk papan catur dengan ukuran 2*N,
terdapat strategi yang lebih optimal. Karena cukup sederhana, solusi ini diserahkan kepada
pembaca sebagai latihan :)

Jawaban: 12

22. Perhatikan bilangan 167 dan 455 terlebih dahulu. Misalkan jawabannya adalah X. Maka kita
ketahui bahwa 167 (mod X) = K dan 455 (mod X) = K, dimana K merepresentasikan sisa bagi
mereka. Apabila kita kurangkan kedua persamaan tersebut, maka kita peroleh 288 (mod X) = 0,
atau dengan kata lain, X habis membagi 288. Kita dapat lakukan langkah yang sama untuk 167
dengan 647, kemudian 167 dengan 743. Kita peroleh X juga habis membagi 480 dan 576. Semua
bilangan yang habis membagi 288, 480, dan 576 sama saja dengan faktor-faktor dari FPB dari
288, 480, dan 576. Dengan kata lain, X merupakan faktor persekutuan dari 288, 480, dan 576.
Kita dapat mencari FPB dari 288, 480, dan 576, yaitu 96. Banyak faktor dari 96 adalah 12.

Jawaban: 12
TRY OUT ONLINE KSN-P 2020
KOMPUTER

23. Untuk mencari solusi termurah, kita dapat melakukan Greedy dengan menggabungkan 2 besi
termurah. Terdapat besi dengan berat 1, 2, 3, dan 4. Pertama, kita leburkan besi dengan berat 1
dan 2, menjadi besi dengan berat 3 dengan ongkos 3. Saat ini besi yang ada adalah 3, 3, dan 4.
Kita leburkan besi dengan berat 3 dan 3, menjadi besi dengan berat 6 dengan ongkos 6.
Terakhir, kita leburkan besi dengan berat 4 dan 6, menjadi besi dengan berat 10 dengan ongkos
10. Semua besi telah dilebur menjadi satu, dengan ongkos total 3+6+10=19.

Jawaban: 19

24. Lakukan strategi yang sama dengan nomor sebelumnya. Apabila Greedy Anda sudah benar,
maka seharusnya akan menghasilkan ongkos minimum untuk semua kasus. Pertama, besi yang
ada adalah 3, 3, 4, 5, 7. Kita leburkan besi dengan berat 3 dan 3, menjadi besi dengan berat 6
dengan ongkos 6. Kemudian, besi yang tersisa adalah 6, 4, 5, 7. Greedy yang benar adalah
meleburkan 2 berat yang paling kecil, dalam kasus ini berarti 4 dan 5, menjadi besi dengan
berat 9 dengan ongkos 9. Kemudian, besi yang tersisa adalah 9, 6, dan 7. Lanjutkan hingga
tersisa sebuah besi.

Jawaban: 49

25. Apabila kita memandang soal ini dari sudut pandang Graph, maka pada dasarnya soal ini hanya
menanyakan Shortest Path saja. Perhatikan pula karena Pak Dengklek hanya dapat bergerak ke
kanan atau ke bawah, maka graph tersebut menjadi tidak ada cycle (juga dikenal dengan
Acyclic), lebih tepatnya adalah Directed Acyclic Graph (DAG). Karena graph tersebut berbentuk
DAG, kita bisa menyelesaikan soal ini dengan Dynamic Programming (DP). Definisikan biaya
minimum untuk menuju ke petak (x,y) adalah f(x,y). Dengan kata lain, f(x,y)=min(f(x-1,y), f(x,y-
1)) + denda[x][y], yang bisa diartikan juga: ambil yang minimum, apakah lewat kanan atau
bawah, kemudian ditambahkan dengan denda yang tertera pada petak (x,y).

Jawaban: 24

26. Karena Pak Dengklek juga dapat bergerak ke atas atau ke kiri, maka graph tersebut menjadi ada
cycle. Oleh karena itu kita tidak bisa menggunakan DP, yang secara kompleksitas lebih rendah,
dan lebih mudah dikerjakan di atas kertas. Soal ini menjadi permasalahan Shortest Path biasa,
yang bisa diselesaikan dengan algoritma Djikstra. Kebetulan dengan opsi bergerak ke atas
ataupun ke kiri tidak membuat denda tersebut menjadi lebih minimum.

Jawaban: 24
TRY OUT ONLINE KSN-P 2020
KOMPUTER

27. Kita dapat menyelesaikan soal ini dengan menggunakan DP. Definisikan f(x) sebagai banyaknya
orang yang BARU terinfeksi virus pada hari ke-x. Dengan kata lain, f(x)=f(x-1)+f(x-2), yang
berarti: f(x-1) menyatakan orang yang baru 1 hari terinfeksi menularkan ke orang baru; f(x-2)
menyatakan orang yang sudah 2 hari terinfeksi menularkan ke orang baru. Perhatikan bahwa
f(0)=1, yang menyatakan terdapat 1 kasus baru pada hari ke-0 (sesuai dengan deskripsi soal).
Fungsi f(x) juga kita kenal dengan nama Fibonacci. Karena f(x) hanya merepresentasikan kasus
baru pada hari ke-x, sedangkan soal menanyakan banyaknya yang sakit (termasuk kasus lama)
pada hari ke-x, maka jawabannya adalah f(0)+f(1)+f(2)+...+f(x).

Dari Anda bisa menghitung secara manual nilai dari f(0)+f(1)+f(2)+...+f(30) (mod 10). Terdapat
cara yang sedikit lebih cepat, tetapi membutuhkan sedikit manipulasi aljabar sederhana.
Perhatikan bahwa f(30)=f(32)-f(31); f(29)=f(31)-f(30); f(28)=f(30)-f(29); ...; f(0)=f(2)-f(1). Apabila
kita jumlahkan semua persamaan tersebut, maka banyak yang tercoret, dan tersisa
f(0)+f(1)+f(2)+...+f(30)=f(32)-f(1). Meskipun cara ini lebih cepat, tetapi Anda tetap harus mencari
nilai dari f(32) (mod 10). Jadi waktu yang tersimpan juga tidak terlalu banyak.

Jawaban: 7

Disclaimer: Saya tidak menyebutkan nama dari virus tersebut, karena soal ini hanyalah sebuah
cerita dan tidak berdasarkan dari kasus yang ada di dunia nyata. Model persebaran virus dan
exponential growth memang ada pada Matematika, Statistik, maupun Computer Science.

28. Kita dapat membagi kasus berdasarkan faktor-faktor dari 2020. Misalkan saja untuk faktor 1,
maka banyaknya yang FPB(2020,i)=1 adalah phi(2020), dimana phi(x) merupakan Euler Totient
Function dari x. Kemudian untuk faktor 2, maka banyaknya yang FPB(2020,i)=2 adalah
phi(2020/2). Secara umum, untuk faktor K, maka banyaknya yang FPB(2020,i)=K adalah
phi(2020/K). Karena kita ingin menghitung jumlah dari FPB-FPB tersebut, maka untuk faktor K,
jumlah dari semua FPB yang FPB(2020,i)=K adalah K*phi(2020/K). Hitung untuk semua faktor,
lalu jumlahkan semuanya.

Terdapat cara yang lebih cepat, yaitu dengan menggunakan faktorisasi prima (bukan faktor).
Akan tetapi, cara ini membutuhkan pemahaman akan konsep dasar yang seharusnya sudah
Anda peroleh. Oleh karena itu, dapat diserahkan kepada pembaca sebagai latihan :) hint:
seharusnya Anda sudah tahu bahwa untuk mencari banyak faktor dari suatu bilangan dengan
cepat, Anda bisa melakukan faktorisasi prima, kemudian pangkat-pangkat yang ada ditambah
dengan 1, lalu dikalikan semua. Mengapa rumus ini benar? Penjelasan mengapa rumus ini benar
dapat digunakan untuk mengerjakan soal ini dengan cara faktorisasi prima.

Jawaban: 14472
TRY OUT ONLINE KSN-P 2020
KOMPUTER

29. Titik-titik yang valid adalah 1<=x,y<=9. Jumlah persegi yang dapat kita buat adalah 1+4+9+...+64.

Jawaban: 204

30. Meskipun soal ini mirip sekali dengan soal sebelumnya, akan tetapi solusi paling cepatnya
sangat berbeda jauh. Perhatikan bahwa untuk membuat sebuah persegi panjang, kita
membutuhkan 2 sisi sejajar dari sumbu X, dan 2 sisi sejajar dari sumbu Y. Untuk sisi horizontal,
kita dapat memilih 2 dari 9 pilihan garis. Banyaknya pemilihan berbeda adalah 9C2. Demikian
pula untuk sisi vertikal. Dengan kata lain, jawabannya adalah 9C2*9C2.

Jawaban: 1296

31. Kita dapat melakukan Greedy dengan mengambil harga termurah pada lukisan yang masih
memiliki tingkat keindahan yang sama. Kita mulai dari tingkat keindahan yang paling kecil. Hal
ini dikarenakan tingkat keindahan tidak bisa turun. Pertama, lukisan dengan tingkat keindahan 3
tidak perlu dipercantik. Kemudian, terdapat 2 buah lukisan dengan tingkat keindahan 4. Kita
pilih yang paling murah, yaitu dengan biaya 3. Sekarang, hanya terdapat 1 buah lukisan dengan
tingkat keindahan 4, tetapi terdapat 2 lukisan dengan tingkat keindahan 5, yaitu dengan biaya 3
dan 5. Kita ambil yang paling murah, yaitu dengan biaya 3. Sama seperti sebelumnya, hanya
terdapat 1 buah lukisan dengan tingkat keindahan 4, tetapi terdapat 2 lukisan dengan tingkat
keindahan 6, yaitu dengan biaya 3 dan 2. Kita ambil yang paling murah, yaitu 2.

Jawaban: 8

32. Lakukan cara yang sama seperti nomor 31.

Jawaban: 21

33. Pada dasarnya, soal ini mirip dengan permasalahan Coin Change, yang dapat diselesaikan
dengan DP. Akan tetapi, apabila dikerjakan di atas kertas, waktu yang dibutuhkan tidak jauh
berbeda dengan melakukan bruteforce. Pertama, kita bisa bagi kasus: z=0, z=1, z=2, ..., z=5.
Misalkan untuk kasus pertama, z=0. Dengan kata lain, 2x+3y=25. Perhatikan bahwa y harus
bernilai ganjil, agar 25-3y dapat direpresentasikan dengan 2x. Nilai y yang memenuhi adalah: 1,
3, 5, dan 7. Lakukan cara yang sama untuk kasus nilai z yang lain. Jika 2x+3y=genap, maka y
harus bernilai genap (termasuk y=0).

Jawaban: 14
TRY OUT ONLINE KSN-P 2020
KOMPUTER

34. Untuk mempermudah mengerjakan soal ini, kita dapat melihat soal ini dari sudut pandang
Kombinatorik. Untuk suatu kabel, kita perlu mencari berapa kali kabel tersebut dipakai. Dengan
kata lain, kontribusi kabel tersebut terhadap tingkat konektivitas adalah panjang kabel dikali
dengan berapa kali kabel tesebut dipakai.

Untuk mencari berapa kali suatu kabel dipakai cukup mudah. Misalkan kabel AB. Rute yang
melewati kabel AB adalah subtree B (BEFK) menuju ke node lainnya (ACGDHIJ). Dengan kata
lain, kabel AB akan dipakai sebanyak 4*7=28 kali. Dengan kata lain, kabel AB akan berkontribusi
ke tingkat konektivitas sebanyak 28*3=84 kali. Lakukan cara yang sama untuk semua kabel

Jawaban: 484

35. Soal ini sebenarnya adalah versi simpel dari soal sebelumnya. Diletakkan setelah nomor 34
hanya untuk mempersingkat deskripsi (dengan memasukkan panjang kabel pada gambar).
Anggap semua panjang kabel nya adalah 1, kemudian gunakan cara yang sama dengan nomor
34.

Jawaban: 152
TRY OUT ONLINE KSN-P 2020
KOMPUTER

36. Untuk soal ini, sebenarnya Anda bisa menghitung secara manual dan membutuhkan waktu yang
cukup lama (namun masih masuk akal untuk dilakukan). Terdapat cara cepat untuk
mengerjakan soal ini. Perhatikan bahwa sebenarnya, fungsi f, g, dan h adalah bagian dari
Segitiga Pascal yang dimiringkan. Pada Segitiga Pascal, bilangan diisi dengan jumlah dari 2
bilangan di atas nya. Dalam kasus ini, adalah fungsi sebelumnya (h ke g, g ke f, dan f ke 1)
dengan index sebelumnya. Dengan menggunakan Segitiga Pascal, jawabannya adalah 22C3.

Jawaban: 1540

37. Perhatikan bahwa fungsi f(x,l,r) akan memeriksa apakah l<=x<=r, akan tetapi dilakukan secara
Divide and Conquer. Dengan kata lain, soal ini menjadi: untuk i,j dari 1 hingga 10 (inklusif),
berapa banyak pasangan (i,j) yang memenuhi 3<=i<=5 dan 7<=j<=10.

Jawaban: 12

38. Fungsi ganteng(l,r) adalah salah satu implementasi dari Quick Sort. Pada fungsi poi, dimana
pertukaran terjadi, perhatikan bahwa apabila A[j]>=p (yang mana p merupakan pivot), maka
A[j] akan ditukar dengan A[i]. Karena A[j] selalu di kanan A[i], pada saat ditukar, semua yang
lebih besar dari pivot akan berada di kiri pivot. Demikian juga yang lebih kecil dari pivot akan
berada di kanan pivot. Dengan kata lain, program ini mengurutkan bilangan secara menurun.
Karena yang dipanggil adalah fungsi ganteng(2,7), maka yang diurutkan hanya dari index 2
hingga 7. Setelah dipanggil fungsi ganteng(2,7), array A menjadi (4, 21, 8, 7, 6, 5, 2, 4, 7, 9).

Jawaban: 29

39. Anda dapat mengerjakan soal ini secara manual, dan akan memperoleh jawabannya dengan
cepat. Akan tetapi, dibutuhkan ketelitian untuk mengerjakan ini. Tetapi apabila Anda lihat lebih
lanjut, program tersebut menghitung (A[2]-A[1])+(A[3]-A[2])+...+(A[10]-A[9]). Perhatikan bahwa
banyak yang dicoret, hingga tersisa A[10]-A[1].

Jawaban: 283

40. Untuk mencari output terkecil, kita cukup menukar 2x, yaitu untuk diletakkan di A[1] maupun
A[10]. Penukaran ketiga dapat dilakukan secara bebas selain untuk A[1] dan A[10]. Perhatikan
juga bahwa output dari program tersebut juga bisa negatif. Solusinya adalah, meletakkan
bilangan terbesar di A[1], dan bilangan terkecil di A[10].

Jawaban: -767
TRY OUT ONLINE KSN-P 2020
KOMPUTER

C1. Call the Fibonacci.

Kita dapat selesaikan soal ini dengan DP. Karena kita ingin menghitung berapa kali fungsi K dipanggil,
maka DP kita juga akan merepresentasikan hal tersebut. Definisikan g(x) sebagai berapa kali f(k)
dipanggil apabila fungsi f(x) dipanggil. Kita ketahui bahwa g(k)=1 (memanggil dirinya sendiri), dan
g(i<=k)=0 (karena bilangan yang lebih kecil dari k tidak akan memanggil f(k)). Sisanya, sama seperti
Fibonacci, g(x)=g(x-1)+g(x-2), yang berarti banyaknya f(k) yang dipanggil oleh g(x-1), ditambah
dengan banyaknya f(k) yang dipanggil oleh g(x-2).

Berikut ini adalah contoh program yang menyelesaikan soal ini:

var A:array [-2..1000000] of integer;


n,k,i:integer;

begin
readln(n,k);
for i:=0 to n do begin
if (i<k) then A[i]:=0
else if (i=k) then A[i]:=1
else A[i]:=(A[i-1]+A[i-2]) mod 1009;
end;
writeln(A[n]);
end.

C2. Multiplication Table.

Soal ini lebih mudah dibandingkan dengan soal koding pertama. Perhatikan bahwa diagonal matrix A
(i=j), yaitu K[i][i] pasti bernilai A[i]*A[i]. Dengan kata lain, A[i] adalah akar dari K[i][i].

Berikut ini adalah contoh program yang menyelesaikan soal ini:

var A:array[1..1000] of array[1..1000] of integer;


n,i,j:integer;

begin
readln(n);
for i:=1 to n do
for j:=1 to n do
read(A[i][j]);
for i:=1 to n do
write(sqrt(A[i][i]):0:0,' ');
end.

Anda mungkin juga menyukai