My first Magazine pemrograman-kompetitif-dasar | Page 13
1.3 Contoh Soal Pemrograman Kompetitif
Pada contoh kedua, tombol yang mempengaruhi keadaan lampu adalah tombol 1, tombol
2, dan tombol 4. Penekanan tombol 1 mengakibatkan lampu menjadi menyala, penekanan
tombol 2 mengembalikannya ke keadaan mati, dan penekanan tombol 4 menjadikan lampu
kembali menyala.
Batasan
• 1 ≤ N ≤ 10 18
Seperti yang tertera pada contoh soal Lampu dan Tombol, soal pemrograman kompetitif
memiliki batasan-batasan yang jelas. Pada soal tersebut, tertera bahwa batasan waktu adalah 1
detik. Artinya, program Anda harus memiliki running time tidak melebihi 1 detik. Batasan memori
64 MB menyatakan bahwa program Anda juga tidak boleh memakan memori lebih dari batasan
tersebut. Terakhir, terdapat batasan masukan, yakni berupa 1 ≤ N ≤ 10 18 . Artinya program Anda
diharuskan dapat menyelesaikan soal tersebut untuk nilai N yang diberikan. Batasan ini juga
menjamin bahwa program Anda tidak akan diuji dengan nilai-nilai di luar batasan.
1.3.1
Solusi Sederhana
Strategi yang paling sederhana adalah dengan menyimulasikan skenario pada deskripsi soal:
•
•
•
•
Mulai dari tombol ke-1, dipastikan keadaan lampu akan berubah (N habis dibagi 1).
Lanjut ke tombol ke-2, periksa apakah 2 habis membagi N. Bila ya, ubah keadaan lampu.
Lanjut ke tombol ke-3, periksa apakah 3 habis membagi N. Bila ya, ubah keadaan lampu.
... dan seterusnya hingga tombol ke-N.
Setelah selesai disimulasikan, periksa keadaan lampu ruangan ke-N dan cetak jawabannya.
Berikut adalah implementasi solusi sederhana ini dalam C++:
# include < iostream >
using namespace std ;
int main () {
long long N ;
cin >> N ;
int divisorCount = 0;
for ( long long i = 1; i <= N ; i ++) {
if ( N % i == 0) {
divisorCount ++;
}
}
if ( divisorCount % 2 == 0) {
cout << " lampu ␣ mati " << endl ;
} else {
cout << " lampu ␣ menyala " << endl ;
}
}
3