Panduan ILPC 2018

Last Update: 03 Oktober 2017 00.00 WIB

Soal ILPC 2018 terdiri dua (2) jenis, yaitu soal logika dan soal pemrograman. Khusus pada babak penyisihan, soal logika berbentuk soal pilihan ganda. Sedangkan pada babak semifinal dan final, soal logika berbentuk isian dan essay. Soal pemrograman memiliki bentuk yang sama baik pada babak penyisihan, semifinal, maupun final.

Soal Logika

Contoh Soal

1. Diketahui premis-premis:
  1. Adi sedang bermain atau listrik mati
  2. Jika listrik mati, Budi tidak pergi ke rumah Adi
  3. Budi pergi ke rumah Adi
Kesimpulan yang benar adalah ...
  1. Adi tidak sedang bermain
  2. Adi sedang bermain 
  3. Listrik mati
  4. Adi kerumah Budi
  5. Tidak ada jawaban benar
2. Dua buah dadu dilempar secara bersamaan. Berapa peluang mendapatkan jumlah dadu ganjil tidak lebih dari 8?
  1. 11/36
  2. 10/36
  3. 13/36
  4. 12/36 
  5. 24/36

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

Pilih Paket

Author: Christoper W. Rimba (Semifinal ILPC 2014)
Time Limit: 1 s.
Memory Limit: 64 MB.

Di negara Galaxy terdapat salah satu operator telekomunikasi yang terkenal bernama Solarsel. Solarsel baru-baru ini selalu menawarkan pilihan paket tarif gabungan (telepon, sms, dan internet) yang beragam dan sering berganti. Udin, salah satu pengguna setia Solarsel yang juga seorang pelajar, menjadi dibuat bingung oleh paket yang berganti-ganti ini. Ia ingin agar pengeluaran pulsanya tiap bulan tidak membengkak akibat salah pilih paket.

Sebagai teman baik Udin, Ronaldo memiliki ide untuk membuatkan program yang dapat membantu menentukan paket mana yang seharusnya diambil berdasarkan data kebutuhan pemakaian telepon, sms, dan internet tiap bulannya. Sayangnya, Ronaldo tidak bisa membuat programnya. Padahal ia juga berencana menjual program ini kepada orang lain untuk mendapat uang saku tambahan. (tentunya Udin tidak perlu membayar kepada Ronaldo). Oleh sebab itu, bantulah Ronaldo untuk membuat program ini.

Berikut adalah daftar tarif paket yang dikeluarkan Solarsel untuk 3 bulan ke depan:

Nama Paket SMS Telepon Internet
Asyik 20000/bulan, unlimited 20/menit 25000 per 800 MB
Seru 15/sms 25/menit 15000 per 500 MB
Hebat 10/sms 30/menit 35000 per 1,25 GB
Xtra Cepat 30/sms 35/menit 50000 per 2,5 GB
Nelpon Ria 25/sms 10/menit 10000 per 250 MB

Format Input:

Baris pertama diawali dengan bilangan bulat T (T > 0) yang menyatakan banyaknya kasus. Setiap kasus terdiri dari satu baris yang berisi 3 buah bilangan S, N, dan I yang dipisahkan oleh satu spasi. Masing-masing bilangan tersebut secara berurutan menunjukkan jumlah penggunaan sms, telepon, dan internet tiap bulan. 0 < S <= 10000. 0 < N <= 10000 (N dalam menit). 0 < I <= 10240 ( I dalam MB). catatan: 1 GB = 1024 MB.

Format Output:

Untuk setiap kasus, outputkan dalam satu baris "Paket A" , dimana A adalah nama paket yang seharusnya dipilih agar pengeluaran pulsa per bulannya minimum. Apabila hasilnya lebih dari 1 jenis paket, cukup tampilkan 1 jenis paket yang muncul lebih dahulu dalam tabel tarif paket di atas.

Contoh Input:

2
1000 1800 400
60 1500 2048

Contoh Output:

Paket Nelpon Ria
Paket Xtra Cepat

Penjelasan:

Contoh 1 :
Asyik: (20000) + (20 * 1800) + 25000 = 81000
Seru: (15 * 1000) + (25 * 1800) + 15000 = 75000
Hebat: (10 * 1000) + (30 * 1800) + 35000 = 99000
Xtra Cepat: (30 * 1000) + (35 * 1800) + 50000 = 143000
Nelpon Ria: (25 * 1000) + (10 * 1800) + (2*10000) = 63000

Contoh 2:
Asyik: (20000) + (20 * 1500) + (3 * 25000) = 125000
Seru: (15 * 60) + (25 * 1500) + (5 * 15000) = 113400
Hebat: (10 * 60) + (30 * 1500) + (2 * 35000) = 115600
Xtra Cepat: (30 * 60) + (35 * 1500) + 50000 = 104300
Nelpon Ria: (25 * 60) + (10 * 1500) + (9*10000) = 106500

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;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner (System.in);
        int t = sc.nextInt();
        //urutan data dalam array di bawah ini: tarifSms, tarifTelepon, tarifInternet, kuotaDataPerTarifInternet
        int[][] tarif = {{20000, 20, 25000, 800}, {15,25,15000,500}, {10,30,35000,1280}, {30,35,50000,2560}, {25,10,10000,250}};
        String[] paket = {"Paket Asyik","Paket Seru","Paket Hebat","Paket Xtra Cepat","Paket Nelpon Ria"};
        for(int tc=1; tc<= t; tc++)  {
            int sms = sc.nextInt();
            int telp = sc.nextInt();
            double inet = sc.nextDouble();
            int bayar = 0, min = 0, minIndex = 0;
            for(int i=0; i < tarif.length; i++) {
                bayar = tarif[i][1] * telp + (int) Math.ceil(inet / tarif[i][3]) * tarif[i][2];
                if(i==0) {
                    bayar += tarif[i][0]; 
                    min = bayar;
                }
                else 
                    bayar += tarif[i][0] * sms;
                if(bayar < min) {
                    min = bayar;
                    minIndex = i;
                }
            }
            System.out.println(paket[minIndex]);
        }
    }
}

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.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner (System.in);
        int t = sc.nextInt();
        int[][] tarif = {{20000, 20, 25000, 800}, {15,25,15000,500}, {10,30,35000,1280}, {30,35,50000,2560}, {25,10,10000,250}};
        String[] paket = {"Paket Asyik","Paket Seru","Paket Hebat","Paket Xtra Cepat","Paket Nelpon Ria"};
        for(int tc=1; tc<= t; tc++)  {
            System.out.println("Masukkan Jumlah SMS: ");
            int sms = sc.nextInt();
            System.out.println("Masukkan Jumlah Telp: ");
            int telp = sc.nextInt();
            System.out.println("Masukkan Jumlah Data Internet: ");
            double inet = sc.nextDouble();
            int bayar = 0, min = 0, minIndex = 0;
            for(int i=0; i < tarif.length; i++) {
                bayar = tarif[i][1] * telp + (int) Math.ceil(inet / tarif[i][3]) * tarif[i][2];
                if(i==0) {
                    bayar += tarif[i][0]; 
                    min = bayar;
                }
                else 
                    bayar += tarif[i][0] * sms;
                if(bayar < min) {
                    min = bayar;
                    minIndex = i;
                }
            }
            System.out.println(paket[minIndex]);
        }
    }
}

Program

Last Update: 14 Oktober 2017 22.51 WIB

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

Compiler

Compiler yang akan digunakan juri adalah:

  • C++ : g++ 4.8
  • Java : Java 7
  • Pascal : free pascal 2.6

Software yang Disediakan

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

  • Netbeans 8 (Java dan C++)
  • Orwell Dev-C++ (C++)
  • Codeblocks (C++)
  • Free Pascal IDE (Pascal)
  • Lazarus IDE (Pascal)
  • Notepad++

Penilaian

Last Update: 14 Oktober 2017 22.51 WIB

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