Pembahasan IPSC 2013

Welcome June! Finally exam had done! *fiuh

Lega, karena beban sudah lepas (gak juga sih, masih banyak remedial dan kawan-kawan). Tetapi dibalik itu udah lega dan ga sabar karena sebentar lagi naik ke kelas XI! Yang berarti bakal nentuin jurusan nanti.

Oke lanjut, kembali ke bahasan postingan. Baru-baru ini gw ikutan kontes lagi yang bernama IPSC 2013 atau Internet Problem Solving Contest 2013 (soal bisa dilihat disini). Jadi kontes ini sifatnya online dan formatnya tim. Awalnya yang ngajakin gw buat ikutan kontes ini adalah Faisal (OSK 2013, SMAN 2 Bandung) buat gabung sama team dia. Nah, satu anggota team lagi yaitu Muhammad Alif Mi’raj Jabbar (OSK 2013, SMAN 5 Bandung). Nama teamnya Anu, cuma nama itu yang kepikiran karena Anu itu maknanya luas =))

Kembali ke kontes. Hmm menurut gw (karena baru pertama kali ikut), kontesnya unik. Jadi problemnya ga cuma ngetik source code, tapi ada kalanya cuma ngirim file output, bahkan di kontes ini gw nemu task yang nyuruh kita buat maen game =))

Btw, di kontes ini kita cuma solve 1 soal😦, itupun yang game. Sebenernya kita bisa solve 2 task lagi, tapi sayang untuk problem A gw ngebug parah, dan baru nyadar bugnya itu pas kontes selesai T.T

Langsung saja ke pembahasan

Problem A : Advice for Olivia

Solusi yang kepikiran dari gw untuk task ini yaitu greedy. Intinya ngambil nilai yang paling besar, jika si variabel sudah tidak memenuhi untuk nilai yang paling besar, maka dibandingkan ke nilai yang lebih kecil. Setelah didiskusiin, ternyata ada yang bilang pake dp, ada juga yang bilang gausah pake greedy.

(Note : karena di task ini dimintanya file output, maka memakai fin dan fout. Jika kalian ingin melihat output di layar, maka untuk fin>> dan fout<< bisa diubah dengan cin dan cout untuk mengecek output)

Berhubung gw pake greedy, ini source codenya,


#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
int main() {
ifstream fin("a1.in");
ofstream fout("a1.out");
int m[13]={10000,5000,2000,1000,500,200,100,50,20,10,5,2,1};
int t;
fin >> t;
for (int i=1;i<=t;i++) {
//inisialisasi array buat jumlah uang
int z[13];
for (int s=0;s<=t;13;s++) {
z[s]=0;
}
//ngebaca nilai euro sama sen
int e,c,tot,a;
fin >> e >> c;
a=e*100;
tot=a+c;
//ngitung jumlah uang
if (tot>=0) {
for (int j=0;j<13;j++) {
while (tot>=m[j]) {
z[j]=z[j]+1;
tot=tot-m[j];
}
}
}
//nulis jumlah pecahan uang yang digunakan
for (int j=13-1;j>=0;j--) {
fout << z[j] << " ";
}
fout << endl;
}
}

Problem J : Labyrinth

Soal yang unik yang beda dari kontes lainnya, yaitu GAME. Jadi intinya kita mainin game yang nyuruh player di game itu buat nemu jalan finish. Langkahnya ga boleh lebih dari 1.000.000 kali. Kalo udah nyampe, dicopas langkah-langkah tadi ke file output tersendiri. Antara stage 1 dan stage 2 langkah-langkahnya dipisah dengan enter 2 kali.

Btw, gw hanya bisa solve untuk problem easynya aja. Untuk problem hard susah banget. Gw lihat ada satu tim yang bisa solve problem hard, rajin amet –”

~~~

Mungkin sekian dari pembahasan gw kali ini. Untuk soal lain kalo ada yang bisa bantu logikanya, bisa dikomen di post ini dan didiskusiin bareng, thanks!😀

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s