• Tidak ada hasil yang ditemukan

Penjelasan Soal Programming

N/A
N/A
Protected

Academic year: 2021

Membagikan "Penjelasan Soal Programming"

Copied!
6
0
0

Teks penuh

(1)

Penjelasan Soal Programming

Struktur Soal

Setiap soal terdiri atas 4 bagian, deskripsi soal, format input/output, contoh input/output dan biasanya terdapat penjelasan contoh input/output.

o Deskripsi soal berisi penjelasan mengenai permasalahan yang harus diselesaikan oleh peserta.

o Format input/output berisi penjelasan tentang format input yang digunakan oleh juri untuk menguji kebenaran program peserta. Pada bagian ini terdapat batasan – batasan input yang harus ditangani peserta. Input yang diberikan oleh juri pasti akan sesuai dengan format input.

o Contoh input/output adalah contoh – contoh input yang akan diberikan oleh juri dan contoh – contoh output yang tepat. Hal ini ditujukan agar peserta bisa memahami maksud soal dan format input/outputnya. Contoh input/output tidak bertujuan untuk menguji kebenaran program peserta. Jika program peserta menghasilkan output yang benar untuk contoh input/output, bukan berarti peserta pasti benar. Tetapi jika peserta tidak mengikuti format input output, pasti jawaban peserta akan dinilai salah.

o Penjelasan contoh input/output bertujuan untuk menjelaskan hubungan antara contoh input dan contoh output sesuai dengan deskripsi soal. Ini bertujuan agar peserta lebih memahami deskripsi permasalahan.

Contoh Soal

Berikut contoh soal programming dan contoh penyelesaiannya.

A + B - C

Diberikan 3 buah bilangan bulat, A, B, dan C, tentukan hasil operasi matematika A + B – C!

Input

Input dimulai dengan satu integer T (T <= 1000) yang menunjukkan jumlah testcase yang akan diberikan. Setiap case akan terdiri dari 1 baris yang terdiri dari 3 integer A, B, dan C (-1000 <= A, B, C <= 1000).

Output

Untuk setiap case, cetak hasil dari A + B – C dalam satu baris!

Sample Input

(2)

2 3 4 -1 -3 -7 5 10 0 Sample Output 1 3 15 Penjelasan : 1. Case pertama 2 + 3 - 4 = 5 – 4 = 1 2. Case kedua -1 + (-3) – (-7) = -4 – (-7) = 3 3. Case ketiga 5 + 10 – 0 = 15 – 0 = 15

Salah satu contoh program C/C++ yang benar untuk menyelesaikan masalah tersebut adalah #include <stdio.h> int main(){ int t; scanf("%i",&t); for(int i=1;i<=t;i++){ int a, b, c; scanf("%i %i %i",&a,&b,&c); printf("%i\n",a + b - c); } return 0; }

Perhatikan di format input disebutkan bahwa T ≤ 100 dan -1000 ≤ A, B, C ≤ 1000, ini adalah batasan input. Peserta tidak perlu melakukan validasi input lagi karena data uji juri yang diinputkan sudah dipastikan berada pada batasan input yang disebutkan di soal.

Cara Penjurian

Penjurian jawaban peserta tidak dilakukan dengan melihat detail dari isi program peserta melainkan dengan menjalankan program peserta dengan data uji input (masukan) yang dimiliki juri, lalu membandingkan output atau keluaran dari program peserta dengan output dari jawaban juri. Jadi, penjurian tidak akan memperhitungkan source code dari jawaban peserta, tetapi hanya hasil output dari program peserta ketika dijalankan dengan data uji dari juri.

Jenis – jenis jawaban yang dianggap ada adalah sebagai berikut :

a. COMPILE ERROR, program peserta tidak bisa dicompile dikomputer juri.

b. WRONG ANSWER, output peserta (file *.out) berbeda dengan output juri (file *.ans). c. RUNTIME ERROR, program peserta mengalami crash pada saat dijalankan dengan data uji juri (file *.in). Hal ini biasanya disebabkan kesalahan akses array atau pembagian dengan 0 atau yang lainnya.

(3)

d. TIME LIMIT EXCEED, program peserta memerlukan waktu yang melebihi batas waktu yang telah ditentukan oleh juri untuk mengolah data uji dan menghasilkan output. e. MEMORY LIMIT EXCEED, program peserta memerlukan memory yang melebihi batas

memory yang ditentukan oleh juri untuk mengolah data uji dan menghasilkan output.

f. ACCEPTED, program peserta benar.

Ranking

Ranking peserta diurutkan berdasarkan jumlah soal yang berhasil disolved (ACCEPTED). Untuk peserta yang memiliki jumlah ACCEPTED yang sama akan diurutkan berdasarkan total penalti waktu terkecil. Total penalti waktu adalah total waktu pengiriman jawaban (relatif terhadap waktu kontes dimulai) untuk setiap jawaban yang ACCEPTED ditambah dengan 20 menit untuk setiap jawaban yang salah pada jawaban yang telah ACCEPTED.

Ilustrasi cara perhitungan penalti waktu:

 Tim 1 mengirimkan jawaban soal A pada menit ke 69 (terhitung dari awal kontes dimulai) dan mendapatkan status ACCEPTED. Maka penalti waktu untuk Tim 1 adalah 69.

 Jika sebelumnya Tim 1 pernah mengirimkan dua kali jawaban untuk soal A dan tidak berhasil mendapatkan ACCEPTED (sebelum pengiriman ketiga pada menit 69 yang akhirnya ACCEPTED), maka total penalti waktu ketika soal A berhasil diselesaikan adalah 69 + 2 * 20 = 109.

Poin yang didapat peserta adalah jumlah jawaban benar peserta dikali 20 lalu dikurangi dengan peringkat peserta berbanding dengan jumlah peserta lain yang memiliki jumlah jawaban benar yang sama dengan peserta tersebut dikalikan 20.

POIN = (JB * 20) – ((PJB – 1) / JJB) * 20, dimana

 POIN = Jumlah poin yang diterima peserta

 JB = Jumlah jawaban peserta yang benar (ACCEPTED)

 JJB = Jumlah peserta yang memiliki JB yang sama dengan peserta tersebut

 PJB = Peringkat peserta berbanding dengan JJB

Contoh Ranklist

Rank Team Solved Time A B C Att / Solved

1 Gajah 3 130 2/20 1/30 2/40 5/3 2 Singa 3 160 3/10 1/30 4/20 8/3 3 Kuda 2 25 1/10 10/- 1/15 2/2 4 Zebra 2 30 1/12 1/18 - 2/2 5 Ular 2 80 1/40 2/20 - 3/2 6 Burung 2 130 1/70 3/- 3/20 6/2 7 Naga 1 50 3/- 2/- 1/50 6/1

Cara membaca table

(4)

 Team : Nama tim peserta

 Solved : Jumlah jawaban peserta yang benar

 Time : Waktu penalti peserta

 A – B – C : Status peserta untuk setiap soal (Soal A, B dan C) yaitu jumlah jawaban yang dikirimkan peserta untuk soal tersebut dan waktu yang diperlukan oleh peserta untuk menjawab soal tersebut (jika ACCEPTED baru dicatat) dalam hitungan menit.

 Att / Solved : Jumlah jawaban yang dikirim peserta berbanding jumlah jawaban benar

Beberapa hal yang perlu diperhatikan dari contoh ranklist diatas

 Cara penilaian poin karena poin ini yang akan digunakan sebagai perhitungan tim yang akan lolos ke semifinal. Cara penilaian poin telah dijelaskan diatas. Pada contoh diatas, tim Ular berhasil menjawab 2 soal yaitu soal A dan B dan peringkat tim Ular berdasarkan tim lain yang menjawab 2 soal juga adalah peringkat 3. Jumlah peserta yang berhasil menjawab 2 soal adalah 4, Sehingga poin yang didapatkan tim Ular

Poin = (JB * 20) – ((PJB – 1) / JJB) * 20 = (2 * 20) – ((3 – 1) / 4) * 20 = 40 – 10 = 30

 Waktu penalti. Pada contoh diatas, tim Singa mendapatkan ACCEPTED pada soal A, B dan C. o Untuk soal A, tim Singa membutuhkan 3 kali menjawab baru bisa mendapatkan

ACCEPTED. Berarti 2 jawaban pertama mereka salah dan jawaban ketiga ACCEPTED pada menit 10. Sehingga waktu penaltinya untuk soal A menjadi 10 + (2 * 20) = 50. o Untuk soal B, tim Singa mendapatkan ACCEPTED pada jawaban mereka yang

pertama yaitu pada menit 30, sehingga waktu penaltinya menjadi 30.

o Untuk soal C, tim Singa membutuhkan 4 kali menjawab baru bisa mendapatkan ACCEPTED. Berarti 3 jawaban pertama mereka salah dan jawaban keempat ACCEPTED pada menit 20. Sehingga waktu penaltinya menjadi 20 + (3 * 20) = 80. o Sehingga waktu penalti keseluruhan untuk tim Singa adalah 50 + 30 + 80 = 160. o Perlu diingat bahwa waktu penalti hanya akan dicatat dari soal yang telah

mendapatkan ACCEPTED. Sebagai contoh, perhatikan tim Kuda.

Kesalahan yang sering terjadi pada pemula

Output yang tidak seharusnya ada

Apapun yang dicetak oleh program kita ke standard output (stdout) adalah bagian dari output program kita yang nantinya akan diperiksa. Misalnya kita diminta untuk membuat program yang membaca sebuah integer dan mencetak integer yang nilainya lima kali lebih besar dari integer input. Contoh input

10

Contoh output 50

(5)

Program C/C++ yang dibuat: int main()

{

int x;

printf( "Input Angka: " ); scanf( "%d", &x );

printf( "%d\n", x * 5 ); return 0;

}

Jika program di atas diinput dengan 10

Maka output program tersebut adalah Input Angka: 50

Teks “Input Angka: ” akan dianggap sebagai bagian dari output. Jika teks tersebut tidak diharapkan ada sesuai penjelasan format input/output, maka program peserta akan dikategorikan sebagai WRONG ANSWER meskipun angka yang diminta benar (50). Oleh karena itu, JANGAN mencetak

output yang tidak perlu meskipun hal itu bertujuan untuk menjelaskan proses program. Yang perlu

dicetak sebagai output telah diatur pada bagian output pada soal. Program yang benar adalah sebagai berikut: int main() { int x; scanf( "%d", &x ); printf( "%d\n", x * 5 ); return 0; }

Sebagai catatan, untuk pencetakan output, boleh dilakukan per test case. Jadi, misalkan

pada program terdapat 5 test case, maka setelah test case pertama diinputkan, output

boleh langsung ditampilkan. Demikian seterusnya hingga test case ke lima.

(Java) Penggunaan GUI (JPanel, dsb)

Program harus membaca input dari standard input (stdin) dan mengoutput ke standard

output (stdout) yang keduanya ada di console (bukan GUI). Penggunaan GUI bisa

menyebabkan program tersebut TIME LIMIT EXCEED (juri tidak memberikan input ke GUI

yang ditampilkan sehingga program terus menunggu).

(6)

 Saat submit jawaban jangan lupa untuk menyamakan bahasa yang dipakai dengan file yang

dikirim

 Agar lebih aman, gunakanlah template yang telah disediakan(terdapat di web penyisihan ilpc),

anda tinggal mengubahnya sesuai kebutuhan.

Bahasa Pascal:

o Jangan menggunakan “uses crt”, gunakanlah "uses wincrt" o Jangan menggunakan "clrscr"

o

Jangan menggunakan readln / readkey (atau sejenisnya)

Jika maksud dari penggunaan perintah ini adalah menghentikan program pada akhir eksekusi, maka saat submit perintah ini harus dihapus terlebih dahulu. Karena akan menghasilkan Time Limit Exceed (program akan menunggu user memberi input melalui keyboard, yang tidak akan dilakukan juri).

Bahasa C/C++:

o Jangan menggunakan void main()

Compiler yang juri gunakan mengharuskan fungsi main() memiliki return value berupa int, sehingga harus ditulis dengan int main().

o Jangan menggunakan getch() atau system( “pause” )

Jika maksud dari penggunaan perintah ini adalah menghentikan program pada akhir eksekusi, maka saat submit perintah ini harus dihapus terlebih dahulu. Karena getch() dapat menyebabkan Time Limit Exceed (program akan menunggu user memberi input melalui keyboard, yang tidak akan dilakukan juri) dan system( “pause” ) akan menyebabkan Wrong Answer (ada output tambahan “Press any key to continue . . .” yang tidak diharapkan).

o Jangan memanggil fungsi tanpa meng-include header yang diperlukan

Jika anda menggunakan IDE DevC++, maka anda harus berhati-hati karena DevC++ bisa meng-include secara default beberapa header yang diperlukan oleh program anda, tapi tidak demikian jika anda mengcompile dari command line (yang dilakukan juri). Sehingga submission yang seperti ini akan mendapatkan NO – Compile Error.

o Jangan menggunakan strrev, fflush(stdin)

Karena juri mengcompile dari command line, maka jika menggunakan perintah ini akan mendapatkan NO-Compile Error.

Bahasa Java:

o Jangan menggunakan Package

Karena jika menggunakan package program bisa dicompile tapi tidak bisa dirun, sehingga akan mendapatkan NO – Runtime Error.

Gambar

Ilustrasi cara perhitungan penalti waktu:

Referensi

Dokumen terkait

Undang-Undang Nomor 13 Tahun 1950 tentang Pembentukan Daerah-Daerah Kabupaten Dalam Lingkungan Propinsi Djawa Tengah sebagaimana telah diubah dengan Undang-Undang Nomor

Besaran pada masing-masing kelompok lainnya tersebut adalah sebagai berikut; kelompok kesehatan sebesar 2,18, komunikasi dan jasa keuangan sebesar 0,94 persen,

Garis-garis gaya fluks yang diinduksikan dari kumparan stator akan memotong kumparan rotornya sehingga timbul GGL atau tegangan induksi dan karena penghantar (kumparan)

Sidang Kelayakan Landasan Program Perencanaan dan Perancangan Arsitektur ( LP3A ) dengan judul Gedung Pertunjukan dan Galeri Seni Semarang dimulai pukul 08.30 WIB dan

Dalm rangka merealisasikan pensi tahunan yang bertema “MUVISTA 2012” (Music and Visual Art Selasta) , dengan ini kami bermaksud mengajukan tawaran kerjasama

Jika kontraktor tidak berhasil mendapatkan diameter besi yang sesuai dengan yang ditetapkan dalam gambar, maka dapat dilakukan penukaran diameter besi dengan diameter yang terdekat

Peralatan yang diperlukan untuk mengukur retak pada lereng dengan pasangan batu adalah sebagai berikut:.  Pita Ukur ( 2

Pada pengujian pengaruh tidak langsung kepuasan kerja terhadap turnover intentions melalui komitmen organisasional, menunjukkan bahwa kepuasan kerja terbukti memiliki