Pembahasan Singkat�KSN 2021 Bidang Informatika
Daring, 12 November 2021
Soal KSN 2021 Bidang Informatika
| Judul Soal | Pembuat Soal | Disiapkan oleh |
1A | Pertahanan Mandiri | Ashar Fuadi | Vio Albert Ferdinand |
1B | Lautan Biner | Prabowo Djonatan | Prabowo Djonatan |
1C | Mewarnai Bola | Abdul Malik Nurrokhman | Abdul Malik Nurrokhman |
2A | Permutasi Mandiri | Steven Novaryo | Steven Novaryo |
2B | Daratan Biner | Pikatan Arya Bramajati + Scientific Committee | Lie, Maximilianus Maria Kolbe |
2C | Mengirim Bola | Abdul Malik Nurrokhman | Prabowo Djonatan |
Statistik Soal
| Judul Soal | Pengumpulan | Rata-rata | Maks |
1A | Pertahanan Mandiri | 734 | 19.05 | 75 |
1B | Lautan Biner | 711 | 23.66 | 56 |
1C | Mewarnai Bola | 630 | 33.97 | 100 |
2A | Permutasi Mandiri | 719 | 24.39 | 100 |
2B | Daratan Biner | 780 | 36.76 | 100 |
2C | Mengirim Bola | 786 | 27.71 | 73 |
Pertahanan Mandiri
Subsoal 2
Subsoal 3 (1/2)
Subsoal 3 (2/2)
Solusi Penuh (1/2)
Solusi Penuh (2/2)
Lautan Biner
Terjemahkan ke Bentuk Graf
Graf adalah Tree
Cukup melihat tepi
Submatriks hanya ada satu baris
Contoh
A = 01012 N = 16
Bit 2:
Bit 0:
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
Pseudo code
count := N�for i largest to smallest:� if i-th bit of A is on:� count := count / 2^(i+1) + min(count % 2^(i+1), 2^i)�return count / 2^(lsb(A)) + 1
Solusi Penuh
Mewarnai Bola
Subsoal 1 dan 2
Subsoal 3 dan 4
Subsoal 5
Subsoal 6 dan 7
Permutasi Mandiri
Observasi
9 | 8 | 1 | 4 | 3 | 2 | 7 | 5 | 6 |
9 | | 1 | | | 2 | 7 | 5 | |
A
B
Subsoal 2
Kompleksitas O(N^3)
Subsoal 5
Subsoal 5
Kompleksitas O(N^2)
Subsoal 5 (Solusi Lainnya)
Kompleksitas O(N^2)
Solusi Penuh
Solusi Penuh
Solusi Penuh
Solusi Penuh
Pseudocode
for i in range(1, N):
sweep_sum += prefix_sweep[i];
dp[i] = dp[i-1] + tree_sum[i] + start_dp[i] + sweep_sum;
// handle kasus (1)
prefix_sweep[i+2] += dp[i]; // untuk memulai suatu segment ditambahkan
prefix_sweep[nextSmaller[i]] -= dp[i]; // untuk mengakhiri suatu segment dikurangi
// handle kasus (2)
tree_sum[nextSmaller[i]] += tree_sum[i] + dp[i]; // menambahkan kontribusi dari verteks ini dan childnya ke parent
if nextSmaller[i] > N: // tidak terdapat indeks j dengan A[i] > A[j] dan i < j
ans += dp[i];
Kompleksitas O(N)
Daratan Biner
Subsoal 2 & 3
Subsoal 6
Subsoal 7
Subsoal 7
Mengirim Bola
Observasi Greedy
Bentuk path
1
2
3
4
5
Cari titik terkiri
Cari titik terkiri mulai bergerak lurus
maxH
min(i + (maxH - Hi))
Cari titik terkanan
Subtask 5
Solusi penuh