Panduan ILPC 2020

Last Update: 6 Januari 2020 00.00 WIB

Soal ILPC 2020 terdiri dua (2) jenis, yaitu soal logika dan soal pemrograman. Khusus pada babak penyisihan, soal logika berbentuk soal pilihan ganda. Sedangkan pada babak final, soal logika berbentuk essay.

Soal Logika

Contoh Soal

Seorang desainer berencana membuat 5 buah baju untuk diproduksi. Desainer tersebut kebingungan memilih model baju mana yang akan digunakan dari 7 model yang ada, yaitu: G, H, I, J, K, L, dan M. Desainer telah membuat kesepakatan dengan pihak penjahit sebagai berikut:
Tidak boleh ada satu model pun yang diproduksi lebih dari satu kali.
Salah satu model J atau M harus dibuat, namun tidak boleh membuat keduanya sekaligus.
Jika model L dipilih, maka model I juga harus dipilih.
Jika model H dipilih, maka J tidak dapat dipilih.
Jika model M adalah salah satu model yang tidak terpilih untuk dibuat, maka model mana lagi yang juga tidak akan diproduksi?

  1. G
  2. H
  3. I
  4. J
  5. K
Tingkat keyakinan :
  1. Yakin 
  2. Tidak Yakin

Soal Pemrograman

Peserta akan diberikan cerita atau deskripsi dari suatu permasalahan. Kemudian peserta diminta untuk membuat program berbasis console (non GUI) untuk menyelesaikan soal tersebut dengan memperhatikan batasan dan kriteria yang berlaku. Untuk menjawab soal pemrograman, peserta bebas menggunakan bahasa C++, Java, atau Pascal .

Peserta dapat langsung mengirimkan source code melalui halaman Submit. Tunggu hingga juri melakukan penilaian. Peserta dapat melihat hasil penilaian juri melalui halaman Submission. Kami menyediakan halaman Scoreboard untuk melihat ranking setiap tim pada sesi pemrograman.

Struktur Soal

  1. Deskripsi

    berisi penjelasan permasalahan yang harus diselesaikan oleh peserta.

  2. Time Limit

    Time Limit merupakan batasan waktu bagi program anda untuk memproses seluruh inputan yang diujikan menjadi output yang diminta pada server ILPC. Apabila program anda berjalan melebihi Time Limit , hasil yang muncul pada halaman Submission adalah Time Limit Exceeded

  3. Memory Limit

    Memory Limit merupakan batasan penggunaan memori ketika memproses seluruh inputan yang diujikan menjadi output tertentu pada server ILPC. Apabila program anda memakan memori melebihi Memory Limit , hasil yang muncul pada halaman Submission adalah Memory Limit Exceeded

  4. Format Input dan Output

    Format Input merupakan deskripsi bagaimana inputan akan diberikan juri kepada program peserta saat dijalankan. Sedangkan Format Output adalah bagaimana seharusnya output jawaban peserta ditampilkan. Apabila peserta tidak mengikuti format input dan output, jawaban peserta dinilai salah (Wrong Answer)

    * Peserta tidak perlu mengecek validitas inputan, karena inputan yang diberikan juri pasti sesuai dengan kriteria yang tertera pada soal.

  5. Contoh Input dan Output

    Merupakan contoh input yang diberikan juri beserta hasil output yang benar berdasarkan input tersebut. Apabila program peserta menghasilkan output yang sama dengan contoh output, jawaban peserta belum tentu 100% benar. Bisa saja solusi peserta salah ketika diberikan kasus uji lain. Data Uji/Inputan selain yang disebutkan pada Contoh Input bersifat RAHASIA.

Contoh Soal

Show / Hide Soal

BASKETBALL TEAM

Time Limit: 1 s.
Memory Limit: 64 MB.

Seorang pelatih basket memiliki kebiasaan yang aneh dalam melatih timnya. Menurut sang pelatih, pemain yang “beruntung” adalah pemain dengan nomor ganjil, sementara pemain dengan nomor genap dianggap “kurang beruntung”. Sebuah tim dianggap “siap bertanding” jika jumlah pemain yang “beruntung” lebih banyak daripada jumlah pemain yang “kurang beruntung”. Tentukan apakah sebuah tim “siap bertanding” atau “tidak siap”.

Format Input:

Baris pertama berisi bilangan bulat positif T, jumlah kasus uji.
Untuk setiap kasus uji, input berupa:
Sebuah baris berisi bilangan bulat positif n, jumlah pemain.
Baris berikutnya berisi bilangan A1, A2, ... An di mana Ai menyatakan nomor pemain ke-i.

Format Output:

Untuk setiap kasus uji, output berupa (tanpa tanda kutip):
“SIAP BERTANDING” jika kondisi pemain memenuhi persyaratan, atau “TIDAK SIAP” jika kondisi pemain tidak memenuhi persyaratan.

Constraints

1 ≤ T ≤ 100 1 ≤ Ai ≤ 50

Contoh Input:

3
3
12 23 4
4
2 33 19 11
1
5

Contoh Output:

TIDAK SIAP
SIAP BERTANDING
SIAP BERTANDING

Contoh Solusi yang Benar

Berikut adalah contoh solusi yang benar untuk soal di atas dengan menggunakan bahasa Java:

Show / Hide Soal


import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;

class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int total = sc.nextInt();
        for(int t = 0;t < total;t++){
            int max = sc.nextInt();
            int[] players = new int[max];
            for(int count = 0;count < max;count++){
                players[count] = sc.nextInt();
            }
            int ganjil = 0, genap = 0;
            for(int i:players){
                if(i%2 == 0)
                    genap++;
                else
                    ganjil++;
            }
            
            if(ganjil > genap)
                System.out.println("SIAP BERTANDING");
            else
                System.out.println("TIDAK SIAP");
        }
    }
}
            
            

Contoh Solusi yang Salah

Walaupun algoritma solusi di bawah ini sudah benar, solusi ini akan manghasilkan respon "Wrong Answer" ketika disubmit. Hal ini disebabkan adanya tambahan karakter "Masukan Jumlah " pada saat program membaca inputan, dan ada tambahan karakter titik saat program mencetak output.

Show / Hide Soal

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int howMuch = scanner.nextInt();
        int count = 0;

        List res = new ArrayList<>();

        while (count < howMuch) {
            int ganjilCount = 0;
            int genapCount = 0;

            int pemainCount = scanner.nextInt();
            String input = scanner.nextLine();
            input = scanner.nextLine();
            if (input.contains(" ")) {
                String[] arr = input.split(" ");
                for (int i = 0; i < args.length; i++) {
                    String s = arr[i];
                    int toInt = Integer.parseInt(s);
                    if ((toInt % 2) == 0) {
                        // Genap
                        genapCount++;
                    } else {
                        // Ganjil
                        ganjilCount++;
                    }
                }

                if (ganjilCount > genapCount) {
                    res.add("SIAP BERTANDING");
                } else {
                    res.add("TIDAK SIAP");
                }
            } else {
                input = input.replace(" ", "");
                int noSpace = Integer.valueOf(input);
                if ((noSpace % 2) == 0) {
                    // Genap
                    res.add("TIDAK SIAP");
                } else {
                    // Ganjil
                    res.add("SIAP BERTANDING");
                }
            }
            count++;
        }

        for (int i = 0; i < res.size(); i++) {
            System.out.println(res.get(i));
        }
    }
}

Program

Last Update: 6 Januari 2020 00.00 WIB

Berikut adalah program-program yang akan kami pakai dalam ILPC 2020:

Compiler

Compiler yang akan digunakan juri adalah:

  • C++ : g++ 5.5.0
  • Java : Java 8
  • Pascal : free pascal 3.0.0

Software yang Disediakan

Pada babak semifinal dan final, tiap tim disediakan sebuah laptop dengan OS Windows yang dilengkapi dengan software berikut :

  • Netbeans 8.0.2 (Java dan C++)
  • Codeblocks (C++)
  • Free Pascal IDE 3.0.4 (Pascal)
  • Notepad++ 7.7.1

Penilaian

Last Update: 6 Januari 2020 00.00 WIB

Untuk memahami bagaimana juri melakukan penilaian beserta tips untuk menghindari error, silahkan Download Petunjuk Penilaian