Penjelasan Sal Prgramming Struktur Sal Setiap sal terdiri atas 4 bagian, deskripsi sal, frmat input/utput, cnth input/utput dan biasanya terdapat penjelasan cnth input/utput. Deskripsi sal berisi penjelasan mengenai permasalahan yang harus diselesaikan leh peserta. Frmat input/utput berisi penjelasan tentang frmat input yang digunakan leh juri untuk menguji kebenaran prgram peserta. Pada bagian ini terdapat batasan batasan input yang harus ditangani peserta. Input yang diberikan leh juri pasti akan sesuai dengan frmat input. Cnth input/utput adalah cnth cnth input yang akan diberikan leh juri dan cnth cnth utput yang tepat. Hal ini ditujukan agar peserta bisa memahami maksud sal dan frmat input/utputnya. Cnth input/utput tidak bertujuan untuk menguji kebenaran prgram peserta. Jika prgram peserta menghasilkan utput yang benar untuk cnth input/utput, bukan berarti peserta pasti benar. Tetapi jika peserta tidak mengikuti frmat input utput, pasti jawaban peserta akan dinilai salah. Penjelasan cnth input/utput bertujuan untuk menjelaskan hubungan antara cnth input dan cnth utput sesuai dengan deskripsi sal. Ini bertujuan agar peserta lebih memahami deskripsi permasalahan. Cnth Sal Berikut cnth sal prgramming dan cnth penyelesaiannya. Input A + B - C Diberikan 3 buah bilangan bulat, A, B, dan C, tentukan hasil perasi matematika A + B C! 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 Sample Input 3 Untuk setiap case, cetak hasil dari A + B C dalam satu baris!
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 cnth prgram C/C++ yang benar untuk menyelesaikan masalah tersebut adalah #include <stdi.h> int main(){ int t; scanf("%i",&t); fr(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 frmat 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 sal. Cara Penjurian Penjurian jawaban peserta tidak dilakukan dengan melihat detail dari isi prgram peserta melainkan dengan menjalankan prgram peserta dengan data uji input (masukan) yang dimiliki juri, lalu membandingkan utput atau keluaran dari prgram peserta dengan utput dari jawaban juri. Jadi, penjurian tidak akan memperhitungkan surce cde dari jawaban peserta, tetapi hanya hasil utput dari prgram peserta ketika dijalankan dengan data uji dari juri. Jenis jenis jawaban yang dianggap ada adalah sebagai berikut : a. COMPILE ERROR, prgram peserta tidak bisa dicmpile dikmputer juri. b. WRONG ANSWER, utput peserta (file *.ut) berbeda dengan utput juri (file *.ans). c. RUNTIME ERROR, prgram 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.
Ranking d. TIME LIMIT EXCEED, prgram peserta memerlukan waktu yang melebihi batas waktu yang telah ditentukan leh juri untuk menglah data uji dan menghasilkan utput. e. MEMORY LIMIT EXCEED, prgram peserta memerlukan memry yang melebihi batas memry yang ditentukan leh juri untuk menglah data uji dan menghasilkan utput. f. ACCEPTED, prgram peserta benar. Ranking peserta diurutkan berdasarkan jumlah sal yang berhasil dislved (ACCEPTED). Untuk peserta yang memiliki jumlah ACCEPTED yang sama akan diurutkan berdasarkan ttal penalti waktu terkecil. Ttal penalti waktu adalah ttal waktu pengiriman jawaban (relatif terhadap waktu kntes 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 sal A pada menit ke 69 (terhitung dari awal kntes dimulai) dan mendapatkan status ACCEPTED. Maka penalti waktu untuk Tim 1 adalah 69. Jika sebelumnya Tim 1 pernah mengirimkan dua kali jawaban untuk sal A dan tidak berhasil mendapatkan ACCEPTED (sebelum pengiriman ketiga pada menit 69 yang akhirnya ACCEPTED), maka ttal penalti waktu ketika sal A berhasil diselesaikan adalah 69 + 2 * 20 = 109. Pin 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 pin 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 Cnth Ranklist Rank Team Slved Time A B C Att / Slved 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 Rank : Ranking peserta
Team : Nama tim peserta Slved : Jumlah jawaban peserta yang benar Time : Waktu penalti peserta A B C : Status peserta untuk setiap sal (Sal A, B dan C) yaitu jumlah jawaban yang dikirimkan peserta untuk sal tersebut dan waktu yang diperlukan leh peserta untuk menjawab sal tersebut (jika ACCEPTED baru dicatat) dalam hitungan menit. Att / Slved : Jumlah jawaban yang dikirim peserta berbanding jumlah jawaban benar Beberapa hal yang perlu diperhatikan dari cnth ranklist diatas Cara penilaian pin karena pin ini yang akan digunakan sebagai perhitungan tim yang akan lls ke semifinal. Cara penilaian pin telah dijelaskan diatas. Pada cnth diatas, tim Ular berhasil menjawab 2 sal yaitu sal A dan B dan peringkat tim Ular berdasarkan tim lain yang menjawab 2 sal juga adalah peringkat 3. Jumlah peserta yang berhasil menjawab 2 sal adalah 4, Sehingga pin yang didapatkan tim Ular Pin = (JB * 20) ((PJB 1) / JJB) * 20 = (2 * 20) ((3 1) / 4) * 20 = 40 10 = 30 Waktu penalti. Pada cnth diatas, tim Singa mendapatkan ACCEPTED pada sal A, B dan C. Untuk sal 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 sal A menjadi 10 + (2 * 20) = 50. Untuk sal B, tim Singa mendapatkan ACCEPTED pada jawaban mereka yang pertama yaitu pada menit 30, sehingga waktu penaltinya menjadi 30. Untuk sal 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. Sehingga waktu penalti keseluruhan untuk tim Singa adalah 50 + 30 + 80 = 160. Perlu diingat bahwa waktu penalti hanya akan dicatat dari sal yang telah mendapatkan ACCEPTED. Sebagai cnth, perhatikan tim Kuda. Kesalahan yang sering terjadi pada pemula Output yang tidak seharusnya ada Apapun yang dicetak leh prgram kita ke standard utput (stdut) adalah bagian dari utput prgram kita yang nantinya akan diperiksa. Misalnya kita diminta untuk membuat prgram yang membaca sebuah integer dan mencetak integer yang nilainya lima kali lebih besar dari integer input. Cnth input 10 Cnth utput 50
Prgram C/C++ yang dibuat: int main() { int x; printf( "Input Angka: " ); scanf( "%d", &x ); printf( "%d\n", x * 5 ); return 0; Jika prgram di atas diinput dengan 10 Maka utput prgram tersebut adalah Input Angka: 50 Teks Input Angka: akan dianggap sebagai bagian dari utput. Jika teks tersebut tidak diharapkan ada sesuai penjelasan frmat input/utput, maka prgram peserta akan dikategrikan sebagai WRONG ANSWER meskipun angka yang diminta benar (50). Oleh karena itu, JANGAN mencetak utput yang tidak perlu meskipun hal itu bertujuan untuk menjelaskan prses prgram. Yang perlu dicetak sebagai utput telah diatur pada bagian utput pada sal. Prgram yang benar adalah sebagai berikut: int main() { int x; scanf( "%d", &x ); printf( "%d\n", x * 5 ); return 0; Sebagai catatan, untuk pencetakan utput, bleh dilakukan per test case. Jadi, misalkan pada prgram terdapat 5 test case, maka setelah test case pertama diinputkan, utput bleh langsung ditampilkan. Demikian seterusnya hingga test case ke lima. (Java) Penggunaan GUI (JPanel, dsb) Prgram harus membaca input dari standard input (stdin) dan mengutput ke standard utput (stdut) yang keduanya ada di cnsle (bukan GUI). Penggunaan GUI bisa menyebabkan prgram tersebut TIME LIMIT EXCEED (juri tidak memberikan input ke GUI yang ditampilkan sehingga prgram terus menunggu). Hal-Hal Yang Harus Diperhatikan
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: Jangan menggunakan uses crt, gunakanlah "uses wincrt" Jangan menggunakan "clrscr" Jangan menggunakan readln / readkey (atau sejenisnya) Jika maksud dari penggunaan perintah ini adalah menghentikan prgram pada akhir eksekusi, maka saat submit perintah ini harus dihapus terlebih dahulu. Karena akan menghasilkan Time Limit Exceed (prgram akan menunggu user memberi input melalui keybard, yang tidak akan dilakukan juri). Bahasa C/C++: Jangan menggunakan vid main() Cmpiler yang juri gunakan mengharuskan fungsi main() memiliki return value berupa int, sehingga harus ditulis dengan int main(). Jangan menggunakan getch() atau system( pause ) Jika maksud dari penggunaan perintah ini adalah menghentikan prgram pada akhir eksekusi, maka saat submit perintah ini harus dihapus terlebih dahulu. Karena getch() dapat menyebabkan Time Limit Exceed (prgram akan menunggu user memberi input melalui keybard, yang tidak akan dilakukan juri) dan system( pause ) akan menyebabkan Wrng Answer (ada utput tambahan Press any key t cntinue... yang tidak diharapkan). 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 leh prgram anda, tapi tidak demikian jika anda mengcmpile dari cmmand line (yang dilakukan juri). Sehingga submissin yang seperti ini akan mendapatkan NO Cmpile Errr. Jangan menggunakan strrev, fflush(stdin) Karena juri mengcmpile dari cmmand line, maka jika menggunakan perintah ini akan mendapatkan NO-Cmpile Errr. Bahasa Java: Jangan menggunakan Package Karena jika menggunakan package prgram bisa dicmpile tapi tidak bisa dirun, sehingga akan mendapatkan NO Runtime Errr. Pastikan nama class utama adalah "class Main", bukan "Public class Main".