Anda di halaman 1dari 20

Naskah Pembahasan Soal

Tryout OSN-K Perhimpunan Pelajar Sains Nasional


Tahun 2023

Bidang Informatika/Komputer

Pembuat Soal:
Stella Ling Rahardjo
BAGIAN A
1. Jika pada hari Minggu cuacanya cerah, Lato pergi bersepeda. Jika Lato tidak pergi bersepeda, dia akan
belajar di rumah. Jika ia tidak belajar di rumah, ia tidak lulus ujian. Lato ternyata lulus ujian. Manakah dari
pernyataan berikut yang mungkin benar?
i. Lato belajar di rumah
ii. Lato pergi bersepeda
iii. Cuaca pada hari Minggu tidak cerah
A. hanya i
B. hanya ii
C. hanya i dan ii
D. hanya i dan iii
E. i, ii dan iii

Pembahasan
Tinjau pernyataan i. Pernyataan “Jika ia (Lato) tidak belajar di rumah, ia tidak lulus ujian” pada soal ekuivalen
dengan “Jika Lato lulus ujian, ia telah di rumah”. Karena diketahui bahwa Lato lulus, maka ia belajar di rumah.
Maka pernyataan i benar.
Tinjau pernyataan ii. Meskipun Lato belajar di rumah, bukan berarti Lato tidak pergi bersepeda. Maka
pernyataan ii mungkin benar.
Tinjau pernyataan iii. Tidak mungkin untuk menyimpulkan apakah cuaca hari Minggu cerah dari informasi yang
diberikan. Maka pernyataan iii mungkin benar.
Jawaban: E

2. Manakah dari ekspresi Boolean berikut yang tidak ekuivalen dengan ekspresi Boolean lainnya?
A. A OR (NOT B OR NOT C)
B. NOT((NOT A) AND B) OR NOT C
C. NOT (((NOT A) AND B) AND C)
D. (A OR NOT B) OR NOT C
E. ((NOT A) AND B) OR NOT C

Pembahasan
NOT (((NOT A) AND B) AND C) [ini adalah pilihan jawaban C]
≡ NOT((NOT A) AND B) OR NOT C (by De Morgan’s Law) [ini adalah pilihan jawaban B]
≡ (A OR NOT B) OR NOT C (by De Morgan’s Law) [ini adalah pilihan jawaban D]
≡ A OR (NOT B OR NOT C) (by commutative law) [ini adalah pilihan jawaban A]
Pilihan E tidak ekuivalen dengan pilihan A, B, C, maupun D. Ini dapat ditunjukkan dengan memasukkan A ≡
TRUE, B ≡ TRUE, C ≡ FALSE dan mendapat bahwa pilihan E menghasilkan FALSE sedangkan pilihan A, B,
C, dan D menghasilkan TRUE. (Ini hanya merupakan sebuah kombinasi nilai A, B, C yang bisa menunjukkan
bahwa pilihan E tidak ekivalen.)
Jawaban: E

3. Lato saat ini berada di simpul 1. Ia ingin berkunjung ke rumah Lota yang berada di simpul 2. Jika semua
simpul dan edge boleh dilewati berulang kali, manakah dari pilihan-pilihan berikut ini yang tidak bisa menjadi
banyaknya sisi-sisi yang dilalui Lato dalam perjalanannya?
A. 42
B. 56
C. 70
D. 91
E. 94

Pembahasan
Jalur yang dilalui Lato harus mempunyai pola 1 → 3 → 4 → 5 → …(1)… → 5 → 6 → 7 → …(2)… → 7 → 2.
Bagian (1) mengandung 0 atau lebih siklus 5 → 1 → 3 → 4 → 5, bersambung dari simpul 5 pada pola dan
bagian (2) mengandung 0 atau lebih siklus 7 → 8 → 9 → 6 → 7, bersambung dari simpul 7 pada pola.
Panjang bagian (1) dan (2) adalah masing-masing 4x, dimana x bilangan cacah. Oleh karena itu, panjang jalur
merupakan 6+4x. Dari semua pilihan jawaban, yang tidak berbentuk 6+4x adalah 56.
Jawaban: B

4. Lato mempunyai mesin Pembuat Simpul. Mesin ini bisa membuat graf tak berarah dengan 4 simpul. Untuk
setiap pasang simpul, peluang bahwa mesin ini membuat sisi tak berarah di antara keduanya adalah 1/2.
Berapa probabilitas bahwa graf yang dibuat mesin Pembuat Simpul hanya berisi satu siklus?
A. 5/64
B. 7/64
C. 11/64
D. 17/64
E. 19/64

Pembahasan
Peluang yang sama untuk sebuah sisi dibuat atau tidak di antara dua buah simpul manapun dari graf sama.
Maka, kita dapat mengasumsikan bahwa setiap graf memiliki peluang yang sama untuk dibuat. Jika graf
4
mengandung tepat satu siklus dengan panjang 3, maka terdapat 𝐶3 = 4 kemungkinan siklus. Simpul yang tidak
dipilih dapat dihubungkan ke salah satu simpul dalam siklus (atau tidak terhubung dengan simpul lainnya),
sehingga setiap siklus menghasilkan 4 kemungkinan grafik berbeda. Maka banyaknya graf dengan tepat
sebuah siklus dengan panjang 3 adalah 4 × 4 = 16.
Jika graf yang dibuat mengandung tepat satu siklus dengan panjang 4, maka simpul 1 bisa berada di
seberang simpul 2, 3, atau 4. Maka terdapat 3 kemungkinan graf.
Total graf yang bisa dibuat adalah 16 + 3 = 19 dari 26 = 64 kemungkinan.
Jawaban: E

5. Lato ingin memilih sebuah bilangan yang terdiri yang 6 digit. Ia ingin agar bilangan yang dipilih mempunyai
semua digit berbeda dan menaik. Sebagai contoh, Lato bisa memilih bilangan 123478 tetapi ia tidak mau
bilangan 112289. Berapa banyakkah pilihan bilangan 6 digit yang dapat dipilih Lato?
A. 84
B. 210
C. 504
D. 720
E. 4040
Pembahasan
Digit pertama dari bilangan haruslah paling kecil dan digit paling terakhir haruslah paling besar. Dari sepuluh
digit dari 0 sampai 9, kita tidak mungkin memilih angka 0, karena tidak ada bilangan enam digit yang dimulai
dengan 0. Kita perhatikan bahwa sebuah bilangan enam digit yang dimaksud soal dapat diperoleh dari
memilih enam digit yang berbeda kemudian mengurutkan digit-digit tersebut. Maka, soal ini dapat
disederhanakan menjadi “Berapa banyaknya kombinasi memilih enam digit berbeda dari 1 sampai 9?” dan
9
jawaban dari soal ini adalah 𝐶6 = 84.
Jawaban: A

6. Lato mempunyai satu toples berisi permen. Ia ingin mengetahui berapa banyaknya permen yang ia punya.
Di rumah Lato ada mesin ajaib yang bisa mengetahui apakah jumlah permen ganjil atau genap. Jika mesin
tersebut dimasuki permen yang berjumlah ganjil, maka lampu indikator akan berwarna merah, sedangkan jika
dimasuki permen yang berjumlah genap, maka lampu akan berwarna hijau. Jika tidak ada permen di dalam
mesin, maka lampu indikator akan mati. Lato kemudian memasukkan semua permennya ke dalam mesin dan
mengamati lampu indikator. Jika lampu indikator berwarna hijau, ia akan mengambil setengah dari permen
yang ada di mesin. Lalu ia mengamati lampu indikator. Jika indikator menyala merah, maka ia akan memakan
satu permen dari mesin tersebut, kemudian ia mengambil setengah dari permen yang ada di mesin. Lalu ia
mengamati lampu indikator. Jika dalam proses pengamatannya nyala lampu indikator adalah merah, merah,
merah, hijau, merah, hijau, merah, merah, mati. Berapakah jumlah permen yang Lato miliki pada awalnya?
A. 215
B. 217
C. 328
D. 247
E. 304

Pembahasan
Terdapat 8 kali lampu menyala, yaitu dengan urutan merah, merah, merah, hijau, merah, hijau, merah, merah,
sebelum akhirnya permen habis dan lampu mati. Dengan bekerja mundur, kita mendapatkan banyaknya
permen pada saat sebelum Lato mengambil pada urutan ke-n:
Urutan ke 8: 0 × 2 + 1 = 1
Urutan ke 7: 1 × 2 + 1 = 3
Urutan ke 6: 3 × 2 = 6
Urutan ke 5: 6 × 2 + 1 = 13
Urutan ke 4: 13 × 2 = 26
Urutan ke 3: 26 × 2 + 1 = 53
Urutan ke 2: 53 × 2 + 1 = 107
Urutan ke 1: 107 × 2 + 1 = 215
Jawaban: A

7. Dua digit terakhir dari 20202021 + 20212022 adalah …


A. 41
B. 58
C. 67
D. 76
E. 89

Pembahasan
Soal ini ekivalen dengan mencari dua digit terakhir dari 202021 + 212022.
Nilai dari 202 adalah 400, dan nilai dari 203 adalah 8000. Dengan observasi, kita bisa melihat bahwa seiring
dengan besarnya n pada 20n, banyaknya digit 0 di belakang 20n terus meningkat. Maka dua digit terakhir dari
202021 pasti merupakan 00.
Dua digit terakhir dari 21n dengan n bilangan asli mulai dari 1 mempunyai pola berupa 21, 41, 61, 81, 01, 21,
… yang berulang setiap lima suku. Maka dua digit terakhir dari 212022 adalah suku ke 2022 ≡ 2 (mod 5), yaitu
41.
Jawaban dari soal ini adalah 00 + 41 = 41.
Jawaban: A

8. Lato akan berkata jujur di hari Rabu, Kamis dan Jumat dan ia akan berbohong di hari Sabtu, Minggu dan
Senin. Pada hari Selasa, Lato bisa berbohong sepanjang hari atau berkata jujur sepanjang hari. Suatu hari,
Lato berkata: "Hari ini aku berkata jujur. Besok aku akan berkata jujur. Hari ini bukan hari Rabu maupun Sabtu.
Kemarin adalah hari Selasa. Kemarin aku berbohong." Hari apakah Lato mengatakan hal ini?
A. Senin
B. Selasa
C. Rabu
D. Jumat
E. Sabtu

Pembahasan
Jika hari ini hari Senin, maka Lato seharusnya berbohong. Akan tetapi, ia berkata jujur pada kalimat kelima. Ini
tidak mungkin terjadi, maka hari ini bukan hari Senin.
Jika hari ini hari Selasa, maka Lato bisa berbohong sepanjang hari atau berkata jujur sepanjang hari. Kalimat
pertama dan keempat menimbulkan kontradiksi, karena jika Lato memilih untuk berbohong sepanjang hari, ia
akan berbohong pada kalimat keempat dan jujur pada kalimat pertama, dan begitupun juga sebaliknya jika
Lato memilih untuk jujur. Ini tidak mungkin terjadi, maka hari ini bukan hari Selasa.
Jika hari ini hari Rabu, maka Lato seharusnya berkata jujur. Akan tetapi ia berbohong pada kalimat ketiga. Ini
tidak mungkin terjadi, maka hari ini bukan hari Rabu.
Jika hari ini hari Kamis, maka Lato seharusnya berkata jujur. Akan tetapi ia berbohong pada kalimat keempat.
Ini tidak mungkin terjadi, maka hari ini bukan hari Kamis.
Jika hari ini hari Jumat, maka Lato seharusnya berkata jujur. Akan tetapi ia berbohong pada kalimat kedua. Ini
tidak mungkin terjadi, maka hari ini bukan hari Jumat.
Jika hari ini hari Minggu, maka Lato seharusnya berbohong. Akan tetapi ia jujur pada kalimat ketiga. Ini tidak
mungkin terjadi, maka hari ini bukan hari Minggu.
Jika hari ini hari Sabtu, maka Lato seharusnya berbohong. Setelah diperiksa, tidak terdapat kontradiksi dan
Lato berbohong pada semua kalimat. Maka hari ini hari Sabtu.
Jawaban: E

9. Bilangan palindrom adalah bilangan yang apabila dibaca dari sebelah kiri maupun kanan menghasilkan
bilangan yang sama. Sebagai contoh, 88, 101, dan 7997 merupakan bilangan palindrom. Terdapat 90 bilangan
palindrom empat digit. Berapa banyak bilangan palindrom empat digit yang habis dibagi 7?
A. 7
B. 9
C. 14
D. 18
E. 21

Pembahasan
Setiap bilangan palindrom empat digit dapat ditulis sebagai 𝑥𝑦𝑦𝑥 = 1000x + 100y + 10y + x = 1001x + 110y,
dimana x dan y merupakan bilangan bulat dan 1 ≤ 𝑥 ≤ 9 dan 0 ≤ 𝑥 ≤ 9.
1001 = 7 × 143, maka 1001 dan kelipatannya habis dibagi 7. Terdapat 9 kelipatan 1001 yang mempunyai 4
digit, yaitu 1001, 2002, 3003, …, 9009.
110 tidak habis dibagi 7, maka 110y hanya habis dibagi 7 ketika y = 0 atau y = 7.
Maka banyaknya bilangan palindrom empat digit yang habis dibagi 7 adalah 9 × 2 = 18.
Jawaban: D

10. Lato dan Lota sedang bermain. Terdapat 7 kancing biru dan 5 kancing hijau di dalam sebuah ember. Lato
dan Lota bergantian mengambil kancing-kancing tersebut. Di setiap giliran, satu orang mengambil diantara 1
sampai 3 kancing biru dari ember atau mengambil 1 atau 2 kancing hijau dari ember. Pemain yang mengambil
kancing terakhir dari ember menang. Lato mendapat giliran pertama. Berapa kancing yang harus ia ambil
pada giliran pertama untuk menjamin kemenangannya?
A. 1 kancing biru
B. 2 kancing biru
C. 3 kancing biru
D. 1 kancing hijau
E. 2 kancing hijau

Pembahasan
Kita menganggap permainan ini sebagai sebuah permainan papan, dengan panjang papan yang sesuai
dengan kancing biru dan lebar papan yang sesuai dengan kancing hijau. Kita mempunyai sebuah pion, yang
akan kita gunakan untuk mencapai sel hitam dari sel yang bertuliskan “S”. Pion bisa kita pindah 1, 2, atau 3 sel
ke sebelah kiri atau 1 atau 2 sel ke bawah. Pemain yang memindahkan pion ke sel hitam menang.

Maka setiap sel bertuliskan “W” di bawah ini adalah sel yang memungkinkan seorang pemain menang, karena
jika giliran pemain tersebut, ia dapat pindah ke sel hitam. (Sel bertuliskan “W” sama dengan memiliki 1, 2, atau
3 kancing biru atau 1 atau 2 kancing hijau di dalam kantung)

Maka setiap sel darimana pion harus dipindahkan ke sel bertuliskan “W” adalah sel yang membuat kalah
(bertuliskan “L”) dan setiap sel darimana pion dapat dipindahkan ke sel yang bertuliskan “L” adalah sel
bertuliskan “W”.
Lato bisa menang dengan memindahkan pion satu sel ke kiri, ke sebuah sel bertuliskan “L”. Ini ekivalen
dengan mengambil satu kancing biru.
Jawaban: A

11. Lato terjebak di sebuah labirin dengan 49 sel. Jalur keluar labirin melewati semua 49 sel.

Lato diberi kesempatan untuk menghilangkan sebuah dinding dari satu sel. Berapa panjang jalur terpendek
yang mungkin dengan menghilangkan satu dinding dari satu sel?
A. 15
B. 17
C. 19
D. 21
E. 23

Pembahasan
Untuk setiap dinding, penghematan dalam menghilangkan dinding adalah 1 lebih sedikit daripada selisih di
antara angka-angka di kedua sisi dinding. Dalam diagram, angka-angka dalam lingkaran mewakili
penghematan setiap dinding dihilangkan.
Penghematan yang maksimum adalah 28, maka panjang dari jalur terpendek adalah 49 - 28 = 21.
Jawaban: D

12. Lato mengajak Lota bermain sebuah permainan. Ia memberi Lota sebuah array berisi bilangan bulat dan
memintanya membuang pasangan bilangan yang berdekatan sampai tersisa satu angka. Pada setiap
pembuangan bilangan yang tersisa harus sebesar mungkin. Sebagai contoh, jika array yang diberikan adalah
5 4 1 3 2, yang pertama dibuang adalah pasangan 1 3, dan kemudian pasangan 4 2, menyisakan bilangan 5.
Bilangan apa yang akan tersisa jika Lato memberikan Lota array 4 9 2 3 6 8 1 7 5?
A. 5
B. 6
C. 7
D. 8
E. 9

Pembahasan
Langkah-langkah pembuangan yang dilakukan adalah 4 9 2 3 6 8 1 7 5 → 4 9 6 8 1 7 5 → 4 9 6 8 5 → 6 8 5
→6
Sedikit observasi menunjukkan bahwa bilangan yang tersisa adalah bilangan yang berada di posisi ganjil
terbesar. Di soal ini, bilangan-bilangan yang berada di posisi ganjil adalah 4, 2, 6, 1, dan 5, dan bilangan
terbesar diantara mereka adalah 6.
Jawaban: B

13. Sebuah bangunan mempunyai empat lift. Setiap lift membuat tiga perhentian, yang tidak harus berada di
lantai yang berurutan atau termasuk lantai dasar. Untuk setiap pasang dua lantai, setidaknya ada satu lift yang
berhenti di keduanya. Berapa banyak lantai maksimum yang dapat dimiliki gedung ini?
A. 3
B. 4
C. 5
D. 6
E. 7

Pembahasan
Terdapat dua belas pemberhentian secara keseluruhan.
Kita beranggapan bahwa ada enam lantai.
Berdasarkan Prinsip Sarang Merpati, terdapat lantai yang memiliki paling banyak dua lift yang berhenti di
lantai tersebut. Setiap lift menghubungkan lantai ini ke dua lantai lainnya, sehingga hanya empat dari lima
lantai yang tersisa yang terhubung ke lantai ini. Ini tidak boleh terjadi.
Jika ada tujuh lantai atau lebih, beberapa lantai memiliki paling banyak satu lift yang berhenti di lantai tersebut
dan mereka tidak terhubung dengan semua lantai yang tersisa. Ini tidak boleh terjadi.
Oleh karena itu, paling banyak terdapat lima lantai. Hal ini mungkin terjadi jika lift pertama berhenti di lantai 1,
4, dan 5, lift kedua di lantai 2, 4, dan 5, lift ketiga di lantai 3, 4, dan 5, dan lift keempat di lantai 1, 2, dan 3.
Jawaban: C

14. Lato dan teman-temannya Ani, Budi, Caca, Doni, Eri, dan Fajar sedang bermain kerajaan. Lato berperan
sebagai raja dan teman-temannya menjadi panglima-panglimanya. Lato mencurigai bahwa ada panglimanya
yang merencanakan kudeta. Ia menanyai masing-masing dari mereka secara privat dan mereka memberikan
pernyataan-pernyataan sebagai berikut:
Ani: Fajar setia tetapi Eri adalah pengkhianat.
Budi: Ani setia.
Caca: Fajar setia tetapi Budi adalah pengkhianat.
Doni: Caca setia tetapi Budi adalah pengkhianat.
Eri: Doni adalah pengkhianat.
Fajar: Ani setia.
Setiap pengkhianat tahu satu sama lain, tetapi akan memberikan informasi palsu. Mereka akan menuduh yang
loyal sebagai pengkhianat dan sebaliknya. Setiap panglima yang setia mengatakan kebenaran seperti yang ia
ketahui, sehingga informasi tentang siapa yang merupakan pengkhianat bisa dipercaya, tetapi ia bisa salah
tentang siapa yang ia pikir adalah setia. Berapakah banyak panglima yang merupakan pengkhianat?
A. 1
B. 2
C. 3
D. 4
E. 5

Pembahasan
Ani bisa jadi setia atau pengkhianat.
Asumsikan bahwa Ani setia. Klaim Budi menunjukkan bahwa Budi setia, klaim Fajar menunjukkan bahwa
Fajar setia, dan klaim Doni menunjukkan bahwa Doni adalah pengkhianat. Klaim Ani menunjukkan bahwa Eri
adalah pengkhianat. Klaim Eri berkontradiksi dengan statusnya sebagai pengkhianat, ia seharusnya
mengklaim bahwa Doni setia.
Maka Ani adalah seorang pengkhianat. Menurut klaim Fajar, Fajar adalah seorang pengkhianat. Ani
mengatakan Eri adalah pengkhianat, maka Eri setia. Maka menurut klaim Eri, Doni adalah pengkhianat.
Menurut klaim Doni, Caca adalah pengkhianat. Menurut klaim Caca, Budi setia.
Maka Budi dan Eri setia dan Ani, Caca, Doni, dan Fajar adalah pengkhianat.
Jawaban: D

15. Sebuah toko es krim menjual lima rasa es krim. Lato ingin membeli dua belas porsi es krim. Berapakah
banyak kombinasi berbeda untuk membeli dua belas es krim tersebut?
A. 792
B. 1820
C. 2380
D. 4368
E. 6188

Pembahasan
Asumsikan bahwa kita memiliki sebuah string yang terdiri dari 12 angka 1, masing-masing mewakili sebuah
porsi es krim yang akan dibeli. Kita ingin mempartisi string tersebut menjadi 5 substring, sehingga kita memiliki
setiap substring yang mewakili sebuah rasa. Kita menggunakan sebuah angka "0" sebagai penyekat di antara
substring-substring tersebut. Sebagai contoh, setelah mempartisi string, kita dapat string “1110111101011011”,
yang berarti kita membeli 3 porsi es krim rasa pertama, 4 porsi es krim rasa kedua, 1 porsi es krim rasa ketiga,
2 porsi es krim rasa keempat, dan 2 porsi es krim rasa kelima.
Maka soal menjadi “berapa banyak cara untuk menyisipkan 4 angka 0 pada sebuah string yang terdiri dari 12
angka 1”. Panjang total string kita adalah 12 + 4 = 16, dan kita perlu meletakkan 4 angka 0 di dalam string
tersebut. Kita boleh meletakkan angka-angka 0 di awal string, di akhir string, maupun bersebelahan satu sama
lain karena kita boleh tidak membeli sebuah rasa es krim.
16
Maka 𝐶4 = 1820
Jawaban: B

16. Lato dan lima temannya ingin bermain telepon-teleponan. Mereka mempunyai sebuah telepon mainan,
dimana di dalam setiap permainan dua orang akan bertelepon. Setiap orang akan bermain dua kali,
masing-masing dengan orang yang berbeda. Berapa banyak cara berbeda Lato dan teman-temannya bisa
bermain?

Pembahasan
Kita visualisasikan soal ini menjadi sebuah graf. Graf ini dapat berupa satu siklus dengan panjang enam atau
6
6! 𝐶3
dua siklus dengan panjang tiga. Terdapat 12
= 60 siklus dengan panjang enam yang berbeda dan 2
= 10
cara untuk mempartisi siklus dengan panjang enam menjadi dua siklus dengan panjang tiga.
Maka banyaknya cara untuk bermain adalah 60 + 10 = 70.
Jawaban: 70

17. Lato mempunyai sebuah mesin waktu. Dalam satu lompatan, mesin tersebut hanya bisa membawanya
maju satu abad atau menggandakan jumlah abad yang telah Lato lalui sejak saat ini, yaitu abad ke-0.
Berapakah minimum jumlah lompatan yang diperlukan untuk mencapai abad ke-762 di masa depan?

Pembahasan
Kita bekerja mundur dengan memulai dari abad ke-762. Kita mengurangi dengan 1 jika abadnya ganjil dan
membagi 2 jika abadnya genap. Ini menghasilkan
762 → 381 → 380 → 190 → 95 → 94 → 47 → 46 → 23 → 22 → 11 → 10 → 5 → 4 → 2 → 1 → 0.
Terdapat 16 lompatan.
Jawaban: 16

18. Lato menemukan sebuah fakta mengejutkan bahwa 1 × 2 × 3 × 4 × 5 × 6 = 8 × 9 × 10. Lota menemukan
fakta yang lebih mengejutkan, yaitu hasil dari 8 × 9 × 10 × 11 × 12 × 13 × 14 sama dengan hasil kali dari
beberapa bilangan-bilangan bulat berurutan lainnya. Berapakah bilangan terkecil dalam hasil kali ini?

Pembahasan
8 × 9 × 10 × 11 × 12 × 13 × 14 = 27 × 33 × 5 × 7 × 11 × 13 = n
Dapat disimpulkan bahwa n mengandung kelipatan 11 dan 13, tetapi tidak mengandung bilangan prima yang
lebih besar dari 13.
Kita mencari kelipatan 11 dan 13 yang tidak mengandung bilangan prima atau kelipatan bilangan prima yang
lebih besar dari 13 di antara kedua angka tersebut.
Kita ambil 65 dan 66. Maka kita mempunyai sisa 26 × 32 × 7 dari n.
Perhatikan bahwa 26 × 32 × 7 = 64 × 63 dan n = 63 × 64 × 65 × 66. Bilangan terkecil dari hasil kali ini adalah
63.
Jawaban: 63
19. Sebuah prisma persegi panjang berukuran 6 cm × 3 cm × 3 cm disusun dengan menumpuk kubus
berukuran 1 cm × 1 cm × 1 cm. Berapa banyak prisma persegi panjang, termasuk kubus, yang semua titik
sudutnya merupakan titik-titik sudut kubus-kubus penyusun, dan yang sisinya sejajar dengan sisi prisma
persegi panjang 6 cm × 3 cm × 3 cm tersebut? (Prisma persegi panjang dengan dimensi yang sama tetapi
dengan posisi berbeda dianggap berbeda)

Pembahasan
Asumsikan bahwa simpul-simpul kubus adalah titik-titik koordinat tiga dimensi. Ada 7 × 4 × 4 titik koordinat.
Sebuah prisma didefinisikan oleh 2 titik yang merupakan ujung-ujung berlawanan dari sebuah diagonal.
Titik pertama dapat dipilih dengan 7 × 4 × 4 cara dan titik kedua dengan 6 × 3 × 3 cara (Tidak boleh ada dua
titik yang sama dan kita harus mengecualikan titik-titik pada bidang horizontal dan vertikal yang sama dengan
titik yang dipilih).
Maka ada 7 × 4 × 4 × 6 × 3 × 3 cara untuk memilih dua titik tersebut, tetapi kita telah memilih titik-titik yang
sama sebanyak 8 kali (ada 4 diagonal dari setiap prisma dan titik-titik ujung diagonalnya dapat dipertukarkan)
7×4×4×6×3×3
Maka ada 8
= 756 prisma persegi panjang yang berbeda.
Jawaban: 756

20. Jumlah permata yang dapat ditemukan di area tertentu ditulis pada peta di bawah ini.

Lato berada di area S. Dalam satu gerakan, Lato hanya bisa bergerak menjauh dari S satu kotak secara
horizontal atau vertikal. Berapakah jumlah maksimum permata yang Lato bisa temukan dalam tiga gerakan?

Pembahasan
Kita cek jumlah permata terbesar yang dapat ditemukan di setiap sel dimulai dari sel-sel yang paling dekat
dengan S. Jumlah permata terbesar yang dapat ditemukan di setiap sel adalah angka di dalam lingkaran.

Jumlah permata terbanyak yang dapat ditemukan dalam tiga langkah adalah 13. Salah satu cara untuk
mendapatkan ini ditunjukkan oleh tanda panah.
Jawaban: 13

21. Lato sedang berada di hutan semak belukar dan ia ingin mencapai desa terdekat. Terdapat beberapa rute
melalui semak-semak dari posisi Lato sekarang menuju tujuannya. Pada peta dibawah, angka-angka
menunjukkan waktu, dalam menit, untuk melewati segmen semak-semak. Berapakah waktu terpendek dalam
menit dari posisi Lato sekarang (S) menuju desa terdekat (F)?

Pembahasan
Kita label setiap persimpangan a, b, c, d dan seterusnya. Kita akan menemukan hasil dari mencari
persimpangan terdekat, terdekat kedua, terdekat ketiga, dan seterusnya dari titik awal (a).

Persimpangan terdekat dari a adalah b dan c, yang jaraknya adalah 2. Kemudian untuk mencari
persimpangan kedua terdekat, kita perlu mempertimbangkan b → d, c → d, dan c → e. Persimpangan kedua
terdekat adalah e dengan jarak 3 dari a. Kita lanjutkan dan mendapatkan hasil di atas.
Waktu terpendek untuk mencapai h dari a adalah 8 menit.
Jawaban: 8

22. Barisan angka yang menaik adalah barisan di mana setiap angka lebih besar dari angka sebelumnya.
Sebagai contoh 5 10 11 adalah barisan yang menaik yang dapat diambil dari 5 4 10 11 7. Berapakah jumlah
angka-angka terbesar yang dapat dibentuk dengan mengambil barisan menaik dari kiri ke kanan dari 7 11 3 6
8 10 2 14 12 5 9 13?

Pembahasan
Kita akan berhitung jumlah dari barisan menaik dari angka paling kiri ke kanan. Asumsikan t[i] menjadi total
dari jumlah suku-suku di barisan menaik yang berakhir pada indeks i. maka t[0] = n[0], t[i] = n[i] + 𝑚𝑎𝑥(𝑘<𝑖)t[k].
Kita hitung semua t[i] untuk i = 0 sampai n dan ambil nilai yang paling maksimum:
n[i] 7 11 3 6 8 10 2 14 12 5 9 13

t[i] 7 18 3 9 17 27 2 41 39 8 26 52
Jumlah suku-suku dari barisan terbesar yang dapat dibentuk adalah 3 + 6 + 8 + 10 + 12 + 13 = 52.
Jawaban: 52

23. Lato telah menemukan tempat persembunyian permata dan ingin mendapatkan permata sebanyak
mungkin. Mereka terkubur di dalam kotak-kotak persembunyian yang berjarak sama, dengan beberapa
permata di setiap kotak. Lato berada di posisi kotak persembunyian yang paling kiri. Akan tetapi, terdapat
sistem pertahanan permata yang membuat jika sebuah kotak berisi n permata diambil, kotak berikutnya yang
aman untuk diambil akan berjarak n kotak di sebelah kanan. Sebagai contoh, jika kotak-kotaknya merupakan 2
1 2 4, dan anda mengambil kotak yang paling kiri yang berisi 2 permata, anda bisa mengambil kotak yang
berisi 2 lainnya atau yang berisi 4, tetapi bukan yang berisi 1.
Jika susunan kotak-kotak adalah 1 2 8 7 3 5 1 1 1 4, berapakah jumlah permata paling banyak yang bisa Lato
ambil dengan aman?

Pembahasan
Kita bekerja dari kanan, menambahkan kotak satu per satu ke dalam total. Untuk sebuah kotak, kita tentukan
jumlah maksimum permata sejauh ini jika kita mengambil kotak tersebut. Sebut saja ini max(i), dan jumlah
permata di dalam kotak i p(i). Maka max(i) = v(i) + max(i+j) yang terbesar untuk j ≥ p(i).
Angka-angka yang dicetak tebal menandakan kotak yang kita ambil.
p(i) 1 2 8 7 3 5 1 1 1 4

max(i) 12 11 8 7 9 5 7 6 5 4
Jumlah permata paling banyak yang bisa diambil adalah 1 + 2 + 3 + 1 + 1 + 4 = 12.
Jawaban: 12

24. Jumlah produk yang berdekatan dari array 4 2 3 1 adalah (4 × 2) + (2 × 3) + (3 × 1) = 8 + 6 + 3 =17. Tetapi,
anda bisa menyusun ulang array untuk menghasilkan jumlah produk yang berdekatan yang lebih besar.
Berapakah jumlah produk yang berdekatan yang paling besar dari array 1 2 3 4 5 6 7?

Pembahasan
Memaksimalkan jumlah produk yang berdekatan dapat dicapai dengan menempatkan angka-angka yang
besar secara berdampingan. Sebuah algoritma yang sederhana yang bisa kita pakai adalah memulai dengan
angka terbesar, dan secara berurutan menempatkan angka-angka yang tersisa di awal dan akhir daftar.
7→67→675→4675→46753→246753→2467531
Jumlahnya adalah (2 × 4) + (4 × 6) + (6 × 7) + (7 × 5) + (5 × 3) + (3 × 1) = 127
Jawaban: 127

25. Lato mempunyai pekerjaan sambilan di perusahaan penyewaan mobil. Mobil-mobil diberi label A, B, C,
dan seterusnya sesuai urutan mereka disewa. Perusahaan tersebut juga mempunyai tempat parkir khusus
mobil sewaan yang dilabel a, b, c, dan seterusnya. Ketika mobil-mobil dikembalikan, mereka diparkir di tempat
parkir pertama yang tersedia. Tugas Lato adalah memindah mobil-mobil tersebut sehingga mobil A berada di
tempat parkir a, mobil B berada di tempat parkir b, dan seterusnya. Terdapat sebuah tempat parkir cadangan
yang Lato bisa gunakan untuk memindah mobil. Sebagai contoh, jika mobil A berada di tempat parkir b, dan
mobil B berada di tempat parkir a, maka Lato membutuhkan 3 kali perpindahan untuk menukar tempat
mereka.

Suatu hari urutan mobil yang datang adalah C E F A J D G K B I H. Berapakah banyaknya perpindahan
minimum yang diperlukan untuk mengatur mereka ke dalam urutan A B C … ?
Pembahasan
Di sini kita mencari subset siklik dari mobil-mobil yang bisa dipindahkan dengan hanya satu tempat parkir
cadangan. Subset yang paling sederhana adalah di mana mobil A berada di tempat parkir b dan mobil B di
tempat parkir a. Contoh dimana tiga mobil dapat dipindahkan adalah mobil A berada di tempat parkir e, mobil
E di tempat parkir d, dan mobil D di tempat parkir a.
Subset siklik mobil-mobil dapat ditemukan dengan memindahkan mobil di tempat parkir a ke tempat parkir
cadangan, memindahkan mobil A ke tempat parkir a, memindahkan mobil yang berada di tempat parkir
cadangan ke tempat parkir dimana mobil A berada sebelumnya, dan seterusnya. Subset selesai dipindah
ketika mobil di tempat parkir cadangan dipindahkan.
Maka banyaknya perpindahan = banyaknya mobil yang perlu dipindahkan + banyaknya subset siklik. Kita akan
mengelompokkan mobil-mobil ke dalam subset mereka ke dalam sebuah tabel.

Tempat a b c d e f g h i j k
parkir

mobil C E F A J D G K B I H

subset 1 2 1 1 2 1 3 2 2 3

Ada 10 mobil yang perlu dipindahkan dan 3 subset, maka 13 perpindahan dibutuhkan.
Jawaban: 13

BAGIAN B
26. Perhatikan potongan kode berikut!
int a[15];
int lato(int h, int t, int x) {
int mid;
if (h == t) {
if (a[h] == x)
return h;
else
return -1;
} else {
mid = (h + t) / 2;
if (a[mid] < x)
return lato(mid + 1, t, x);
else if (a[mid] > x)
return lato(h, mid - 1, x);
else
return mid;
}
}
int lota(int x) {
return lato(0, 14, x);
}
a[0]..a[14] adalah 15 bilangan bulat berbeda diantara 1 and 100 inklusif dan diurutkan secara menaik. Berapa
kali fungsi lato akan dipanggil ketika potongan program dibawah ini dijalankan?
for(i = 1; i <= 100;
i++)
lota(i);

Pembahasan
Terlepas dari isi awal array a, ada 1 nilai untuk i sehingga fungsi lato dipanggil 1 kali saja (a[7]). Ada 2 nilai
untuk i sehingga fungsi lato dipanggil 2 kali saja (a[3] dan a[11]). Ada 4 nilai untuk i sehingga lato dipanggil 3
kali saja (a[1], a[5], a[9], a[13]). Fungsi lato akan dipanggil 4 kali untuk nilai-nilai i yang lain.
Jumlah total pemanggilan = 1 × 1 + 2 × 2 + 4 × 3 + 93 × 4 = 389
Jawaban: 389

27. Perhatikan kode berikut!


int a[5][5] = {
{14, 9, 21, 1, 9},
{ 3, 2, 8, 19, 6},
{ 7, 0, 16, 15, 30},
{ 4, 27, 31, 10, 11},
{ 3, 4, 5, 6, 7}
};

int x, y, c, d;
int main() {
x = 0;
y = 0;
c = 0;
d = 0;
while ((x < 5) && (y < 5)) {
c = c + a[x][y];
d = 1 << x;
d = a[x][y] & d;
if (d > 0)
x = x + 1;
else
y = y + 1;
}
cout << c;
return 0;
}
Apakah output dari program ini? (Tuliskan bilangan bulat saja)

Pembahasan
Tabel berikut ini merepresentasikan array a. Sel-sel yang diarsir pada tabel berikut ini menunjukkan nilai yang
ditambahkan ke variabel c dan pasangan x, y pada setiap iterasi:
x\y 0 1 2 3 4

0 14 9 21 1 9

1 3 2 8 19 6

2 7 0 16 15 30

3 4 27 31 10 11

4 3 4 5 6 7
Maka output program adalah 14 + 9 + 2 + 0 + 16 + 15 + 10 + 6 + 7 = 79
Jawaban: 79

28. Perhatikan potongan kode berikut!


int f(int x) {
int y = 0;
if (x < 10)
return x;
else {
while (x > 0) {
y = y + x % 10;
x = x / 10;
}
return f(y);
}
}
Berapa banyak bilangan bulat x di mana 1 ≤ x ≤ 2021 yang membuat f(x) mengembalikan 1?

Pembahasan
Misalkan d(x) menyatakan jumlah digit dari bilangan x. Dengan observasi, kita dapat menyimpulkan bahwa
d(x) ≡ x (mod 9) untuk setiap bilangan bulat positif x. Kita juga dapat melihat bahwa f(x) = f(d(x)) dan oleh
karena itu kita dapat menyimpulkan bahwa f(x) ≡ x (mod 9). Oleh karena itu kita hanya bisa mendapatkan f(x)
= 1 jika dan hanya jika x ≡ 1 (mod 9). Terdapat 225 nilai x yang memenuhi x ≡ 1 (mod 9) dan 1 ≤ x ≤ 2021.
Jawaban: 225

29. Perhatikan kode berikut untuk nomor 29 dan 30!


1 string s;
2 int sum, temp, len, i, x;
3 int main() {
4 cin >> s;
5 sum = 0;
6 temp = 0;
7 len = s.length();
8 i = 0;
9 while (i < len) {
10 if (s[i] == '+'){
11 sum = sum + temp;
12 temp = 0;
13 i += 2;
14 }
15 x = int(s[i]) - int('0');
16 temp = temp * 10 + x;
17 i++;
18 }
19 cout << sum + temp;
20 return 0;
21 }
Program ini mencoba menghitung ekspresi penjumlahan dari input. Tetapi, program tersebut mengandung
kesalahan. Sebagai contoh, output program adalah 105 ketika input adalah “100+15”.
Berapakah nilai mutlak dari output program ketika input adalah “10+10”?

Pembahasan
Kesalahan dari program ini adalah ketika program menjumpai tanda “+”, ia akan melewatkan dua karakter,
yaitu tanda “+” itu sendiri dan digit yang mengikuti tanda “+”. Maka, ketika input adalah “100+15”, yang
terhitung hanyalah 100 ditambah 5.
Ketika input adalah “10+10”, yang terhitung hanyalah 10 ditambah 0, yang sama dengan 10.
Jawaban: 10

30. Perhatikan kode berikut untuk nomor 29 dan 30!


1 string s;
2 int sum, temp, len, i, x;
3 int main() {
4 cin >> s;
5 sum = 0;
6 temp = 0;
7 len = s.length();
8 i = 0;
9 while (i < len) {
10 if (s[i] == '+'){
11 sum = sum + temp;
12 temp = 0;
13 i += 2;
14 }
15 x = int(s[i]) - int('0');
16 temp = temp * 10 + x;
17 i++;
18 }
19 cout << sum + temp;
20 return 0;
21 }
Program ini mencoba menghitung ekspresi penjumlahan dari input. Tetapi, program tersebut mengandung
kesalahan. Sebagai contoh, output program adalah 105 ketika input adalah “100+15”.
Baris nomor berapakah dalam program yang menyebabkan kesalahan output tersebut?

Pembahasan
Kesalahan dari program ini adalah ketika program menjumpai tanda “+”, ia akan melewatkan dua karakter,
yaitu tanda “+” itu sendiri dan digit yang mengikuti tanda “+”. Maka, ketika input adalah “100+15”, yang
terhitung hanyalah 100 ditambah 5.
Untuk memperbaiki kesalahan program, program hanya perlu melanjutkan ke iterasi berikutnya setiap kali
iterasi menjumpai tanda "+". Ini dapat diperbaiki dengan mengganti baris ke-13 menjadi i += 1.
Jawaban: 13

31. Perhatikan potongan kode berikut untuk nomor 31 dan 32!


int f(int x) {
if (x == 0)
return 0;
else
return f(x / 2) ^ x;
}
int g() {
int y, i;
y = 0;
for (i = 1; i <= 64; i++)
y = y + f(i);
return y;
}
Jika nilai f(x)=25, tentukan nilai x!

Pembahasan
Perhatikan bahwa bit pada posisi x dari kiri adalah 1 jika dan hanya jika ada banyaknya bit '1' di sebelah
kirinya (termasuk bit pada posisi x) adalah ganjil. Maka x = (10101)2 = 21.
Jawaban: 21

32. Perhatikan potongan kode berikut untuk nomor 31 dan 32!


int f(int x) {
if (x == 0)
return 0;
else
return f(x / 2) ^ x;
}
int g() {
int y, i;
y = 0;
for (i = 1; i <= 64; i++)
y = y + f(i);
return y;
}
Jika dilakukan pemanggilan g(), berapakah outputnya?

Pembahasan
Kita mengklaim: Untuk bit yang diposisikan di x (indeks dimulai dari 0) dari kanan, ada 25 bilangan bulat di
antara 0 dan 63 sedemikian sehingga bit x ada setelah fungsi f diterapkan.
Oleh karena itu kita harus membuktikan klaim ini:
Tinjau beberapa bilangan bulat y antara 0 dan 63 sedemikian rupa sehingga f(y) tidak mengandung bit x, kita
dapat menunjukkan bahwa adalah mungkin untuk memetakan y ke dalam sebuah nilai unik z sedemikian rupa
sehingga f(z) mengandung bit x.
Kasus 1: x adalah ganjil
Jelas bahwa kita bisa mengganti (0 → 1, 1 → 0) semua bit dari posisi x sampai 5 untuk menemukan z
Kasus 2: x adalah genap
Kita dapat mengganti bit paling kiri untuk mendapatkan z. Oleh karena itu, jumlah bilangan bulat yang
6
2
diinginkan adalah 2
.
Dengan klaim di atas, jawabannya adalah
5
𝑥 5 5
𝑓(64) − 𝑓(0) + ∑ 2 × 2 = 127 + 63 × 2 = 2143
𝑥=0
Jawaban: 2143

33. Perhatikan program berikut!


int f(int x) {
int res = 0;
int i;
for (i = 1; i <= x; i++)
if (x % i == 0)
res++;
return res;
}

int c, i;
int main() {
c = 0;
for (i = 1; i <= 10000;
i++)
if (f(i) == 3)
c++;
cout << c;
return 0;
}
Berapakah output dari program tersebut?

Pembahasan
Program ini menghasilkan banyaknya bilangan bulat antara 1 dan 10000 yang memiliki 3 faktor. Bilangan bulat
yang memiliki 3 faktor haruslah kuadrat dari bilangan prima, sehingga program mengeluarkan banyaknya
bilangan prima antara 1 dan 100, yaitu 25.
Jawaban: 25

34. Perhatikan kode berikut!


int a[10];
int i, j, t, ans;
int main() {
for (i = 0; i <= 9; i++)
cin >> a[i];
ans = 0;
for (i = 8; i >= 0; i--)
for (j = 0; j <= i; j++)
if (a[j] > a[j + 1]) {
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
ans++;
}
cout << ans;
return 0;
}
Jika input adalah 4 4 10 10 10 3 3 3 6 6, berapakah outputnya?
Pembahasan
Dengan menginputkan input yang diberikan ke dalam array a, kita mendapat output 21.
Jawaban: 21

35. Perhatikan kode berikut!


1 int a[100];
2 int lota[10001];
3 int i, lato;
4 int main() {
5 lato = 0;
6 for (i = 0; i <= 10000; i++){
7 lota[i] = 0;
8 }
9 for (i = 0; i <= 99; i++){
10 cin >> a[i];
11 }
12 for (i = 0; i <= 99; i++){
13 lota[a[i]]++;
14 }
15 for (i = 0; i <= 99; i++){
16 if (lota[i] > 0){
17 lato++;
18 }
19 }
20 cout << lato;
21 return 0;
22 }
Input bagi program tersebut adalah 100 bilangan bulat di antara 0 dan 10000 inklusif. Program tersebut
mencoba menampilkan banyaknya bilangan bulat yang berbeda dalam input. Tetapi, terdapat kesalahan
dalam program tersebut yang bisa diperbaiki dengan mengganti 1 baris.
Baris nomor berapakah yang bisa diganti untuk memperbaiki program tersebut?
Pembahasan
Seharusnya, pada loop for yang keempat program mengecek apakah array lota[i], dimana i adalah bilangan
bulat di antara 0 dan 10000 inklusif, lebih besar sama dengan 0. Akan tetapi, batasan pada loop for keempat
di baris ke 15 hanya mencakup 0 sampai 99.
Jawaban: 15

Anda mungkin juga menyukai