Felix Halim .NET  
Google 
Name:  Message:

ACM ICPC - Indonesia National Contest (INC) 2010

Sewaktu soal-soal babak final INC dibuat, saya adalah salah satu reviewer yang bertugas membuat alternate solutions dari beberapa soal tersebut. Karena INC 2010 sudah berakhir, saya berpikir untuk merilis alternate solutions saya. Selain itu, saya juga membuat 2 dari 9 soal (soal F dan soal G). Saya berharap postingan saya ini bisa membantu para peserta INC untuk dapat belajar lebih banyak. Pembahasan saya untuk setiap soal dapat dilihat dibawah.

Untuk melihat lebih banyak pembahasan dan cerita seputar INC 2010, bisa kunjungi blog Suhendry, Eko Wibowo, Tim Saklar Lhompat. Kalau ada tambahan cerita dari tim lain, tolong kabari saya :)

Jika ada komentar/saran/pertanyaan singkat, bisa di-post di kotak abu-abu yang ada di kanan atas. Jika ada pertanyaan yang panjang, lebih baik di-post di mailing list indo-algo@yahoogroups.com.

Tampilkan Deskripsi Soal

Pembahasan Soal A - The Best Team

Untuk kasus terburuk dimana N = 50, banyaknya tim berbeda yang bisa dibentuk adalah nCk(50,3) = 50*49*48 / 1/2/3 = 19600 tim. 19600 tim termasuk angka yang sangat sedikit (dalam 2 detik, komputer juri dapat melakukan lebih dari 10 juta operasi), sehingga kita dapat mengecek nilai kompatibilitas untuk setiap tim yang dapat dibentuk (brute-force).

Untuk implementasinya, bisa dilakukan 3 nested loop (untuk murid pertama, kedua, dan ketiga). Untuk membentuk sebuah tim, ketiga murid ini haruslah orang yang berbeda. Untuk setiap tim yang bisa dibentuk, kita tinggal menyimpan kompatibilitas tertinggi. Berikut adalah contoh implementasinya.

#include <stdio.h>

#define REP(i,n) for (int i=0,_n=n; i<_n; i++)

int T,N,P[51][51];

int main(){
    scanf("%d",&T);
    while (T--){
        scanf("%d",&N);
        REP(i,N) REP(j,N) scanf("%d",&P[i][j]);
        int res = 0;
        REP(i,N) REP(j,N) REP(k,N)
            if (i!=j && i!=k && j!=k)
                res >?= P[i][j] * P[j][k] * P[k][i];
        printf("%d\n",res);
    }
}
Tampilkan Deskripsi Soal

Pembahasan Soal B - Largest Labeled Common Ancestor

Misalkan:

  p(N) adalah parent dari node N, dan
  f(A,B) = X, dimana X adalah node dengan label terbesar yang merupakan ancestor dari node A dan B.

Maka bisa dibuktikan bahwa:

  jika A > B, maka f(A,B) = f(p(A),B),
  jika A < B, maka f(A,B) = f(A,p(B)), dan
  jika A = B, maka f(A,B) = X

Apakah ada yang ingin mencoba membuktikan hal ini?

Jika anda bisa membuktikan hal diatas, maka implementasinya akan sangat mudah, seperti dibawah ini.

#include <stdio.h>

#define p(N) ((N-2)/K + 1)

int K;

int f(int A, int B){
    if (A > B) return f(p(A),B);
    if (A < B) return f(A,p(B));
    return A; // A = B = X
}

int main(){
    int T,A,B;
    scanf("%d",&T);
    while (T--){
        scanf("%d %d %d",&K,&A,&B);
        printf("%d\n",f(A,B));
    }
}
Tampilkan Deskripsi Soal

Pembahasan Soal C - Stack Machine Simulator

Soal ini bisa diselesaikan dengan mengikuti langkah-langkah yang diminta. Penggunaan STL sangat membantu untuk melakukan operasi reverse. Berikut adalah contoh implementasinya.

#include <stdio.h>
#include <string>
#include <algorithm>

using namespace std;

char s[1000];
int T;

int main(){
    scanf("%d",&T);
    while (T--){
        scanf("%s",s);
        string r = "";
        for (int i=0; s[i]; i++){
            if (s[i]=='+') r += s[++i];
            else reverse(r.begin(),r.end());
        }
        puts(r.c_str());
    }
}
Tampilkan Deskripsi Soal

Pembahasan Soal D - Sum to Zero

Misalkan kita mempunyai 2 sorted array: B dan C yang masing-masing berisi N bilangan. Untuk mencari index b di array B dan index c di array C dimana B[b] + C[c] = x, dapat dilakukan dalam O(N) operasi. Caranya adalah dengan menelusuri index b secara menaik (dari 0 sampai N-1) dan menelusuri index c secara menurun (dari N-1 sampai 0), atau sebaliknya. Illustrasinya ada di blog Suhendry.

Jika kita bisa memecahkan masalah diatas, maka cara mencari A[a] + B[b] + C[c] = 0 adalah sama dengan cara mencari B[b] + C[c] = -A[a]. Untuk setiap bilangan x di array A, kita cari apakah ada B[b] + C[c] = x. Karena ada N bilangan di array A, total kompleksitasnya adalah O(N^2).

Untuk mencari banyaknya pasangan elemen (b,c) dimana B[b] + C[c] = x, kita bisa menghitung berapa banyak elemen di B yang valuenya adalah B[b] (countB), dan berapa banyak elemen di C yang valuenya adalah C[c] (countC). Maka banyaknya pasangan elemen (b,c) dimana B[b] + C[c] = x adalah countB * countC.

Dibawah ini adalah contoh implementasi O(N^2) untuk problem D.

#include <algorithm>

#define REP(i,n) for (int i=0,_n=n; i<_n; i++)

int T, N, A[2000], B[2000], C[2000];

int main(){
    scanf("%d",&T);
    while (T--){
        scanf("%d",&N);
        REP(i,N) scanf("%d",&A[i]);
        REP(i,N) scanf("%d",&B[i]); std::sort(B,B+N);
        REP(i,N) scanf("%d",&C[i]); std::sort(C,C+N);

        long long res = 0;
        REP(a,N){
            int x = -A[a];   // kita ingin B[b] + C[c] == -A[a]
            int b=0, c=N-1;  // cari b dan c dimana B[b] + C[c] == x
            while (b<N && c>=0){
                int countB = 1;
                while (b+1 < N && B[b] == B[b+1]) b++, countB++;
                while (c>=0 && B[b] + C[c] > x) c--;
                if (c<0) break;
                if (B[b] + C[c] == x){
                    int countC = 1;
                    while (c>0 && C[c] == C[c-1]) c--, countC++;
                    res += countB * countC;
                }
                b++;
            }
        }
        printf("%lld\n",res);
    }
}
Tampilkan Deskripsi Soal

Pembahasan Soal E - Playing with Boxes

Bagi yang terlalu sering menggunakan top-down approach, soal ini akan menjadi sulit dipecahkan. Misalkan f(N) adalah banyaknya cara kita memisahkan N kotak. Maka banyaknya cara memisahkan kotak-kotak tersebut bisa dihitung secara rekursif:

f(N) = sum(nCk(N-1,i) * f(i+1) * f(N-(i+1)) * (N-2)! / i! / (N-(i+1)-1)!) dimana i = 0..N-1
Cara diatas hanya bisa digunakan untuk menyelesaikan untuk N <= 10. Untuk menjawab N > 10, kita berharap bahwa jawabannya memiliki sebuah pola (atau berpikir terbalik seperti yang dijelaskan di blog Suhendry). Untuk mencari pola tersebut, pertama-tama kita jabarkan jawaban untuk N dari 1 sampai 10 menggunakan program berikut.

#include <stdio.h>

#define REP(i,n) for (int i=0,_n=n; i<_n; i++)

long long nCk(int n, int k){
    long long ret = 1;
    for (int i=1; i<=k; i++)
        ret = ret * (n-i+1) / i;
    return ret;
}

long long fac(int n){
    if (n<=1) return 1;
    return n * fac(n-1);
}

long long f(int N){
    if (N<=2) return 1;
    long long ret = 0;
    REP(i,N-1){
        ret += nCk(N-1,i) * f(i+1) * f(N-(i+1)) * fac(N-2) / fac(i) / fac(N-(i+1)-1);
    }
    return ret;
}

int main(){
    // Generate the first 10 results
    for (int i=1; i<=10; i++)  
        printf("%d = %lld\n",i,f(i));

    /*
    Hasilnya adalah:

    1 = 1
    2 = 1
    3 = 3
    4 = 18
    5 = 180
    6 = 2700
    7 = 56700
    8 = 1587600
    9 = 57153600
    10 = 2571912000
    */
}

Terlihat pola bahwa jawaban untuk f(N) ternyata adalah hasil dari perkalian f(N-1) dengan suatu bilangan. Jika kita telusuri lebih dalam, kita bisa menemukan pola perkalian tersebut. Sehingga kita bisa membuat solusi yang lebih simple dan cepat, seperti berikut ini.

#include <stdio.h>

int T,N,res[100001];

int main(){
    res[1] = 1;
    for (long long i=2,a=1,b=2; i<=100000; i++, a+=b, b++)
        res[i] = res[i-1] * a % 1000000007;

    scanf("%d",&T);
    while (T--){
        scanf("%d",&N);
        printf("%d\n",res[N]);
    }
}
Tampilkan Deskripsi Soal

Pembahasan Soal F - Searching in Tree

Dibawah ini adalah contoh implementasi yang dijelaskan di blog Suhendry. Implementasi dalam C/C++ bisa dilakukan tanpa menggunakan pointer. Untuk membuat node baru, kita tinggal meminta index dari kumpulan node yang bebas. Untuk menghapus node, kita tinggal kembalikan index dari node yang dihapus ke dalam kumpulan node bebas. Catatan: implementasi dibawah ini bukan AVL tree, tetapi tree buatan saya sendiri :P.

Semua queries untuk sub-tree tertentu bisa dikumpulkan terlebih dahulu dan kemudian dijawab sekaligus saat kita membangun tree.

Solusi alternatif menggunakan Segment-tree dijelaskan di blog Eko. Solusi Segment-tree tersebut memerlukan O(N log N) space, sedangkan tree saya hanya membutuhkan O(N) space.

#include <stdio.h>
#include <vector>

using namespace std;

#define REP(i,n) for (int i=0,_n=n; i<_n; i++)
#define H(r) ((r)==-1? 0 : node[r].height)
#define S(r) ((r)==-1? 0 : node[r].size)
#define MAXN 200000 // there can be up to 2 trees of size 100000

struct Node {
    int label;      // this node label (acquired from the input).
    int size;       // the size of this subtree (leaf's size is 1).
    int height;     // the height of this node (leaf's height is 1).
    int L, R;       // the index of the left and right child of this node.
} node[MAXN];

vector<int> fnode;  // free node indices (no pointers needed :)

void update(int r){     // update node r's attributes based on its children
    Node &n = node[r];
    n.size = S(n.L) + S(n.R) + 1;
    n.height = 1 + max(H(n.L), H(n.R));
}

void add(int &root, int label){ // insert a new node with the specified label
    if (root==-1){
        root = fnode.back(); fnode.pop_back();          // take a free node
        node[root] = (Node){ label, 1, 1, -1, -1 };     // fill in the new node
    } else {
        Node &n = node[root];
        if (n.label == label) return; // label already exists, ignore add
        if (label < n.label){
            add(n.L, label);
            if (H(n.L) > H(n.R)+1){ // rotate right
                int t = node[n.L].R;
                node[n.L].R = root, root = n.L, n.L = t;
                update(node[root].R);
            }
        } else if (label > n.label){
            add(n.R, label);
            if (H(n.L)+1 < H(n.R)){ // rotate left
                int t = node[n.R].L;
                node[n.R].L = root, root = n.R, n.R = t;
                update(node[root].L);
            }
        }
        update(root);
    }
}

int kth(int root, int k){
    Node &n = node[root];
    if (S(n.L) > k) return kth(n.L, k);
    if (S(n.L) == k) return n.label;
    return kth(n.R, k - S(n.L) - 1);
}

void addAll(int r, int &to){    // add all nodes in 'r' to 'to'
    if (r == -1) return;
    addAll(node[r].L, to);
    addAll(node[r].R, to);
    add(to, node[r].label);
}

void removeAll(int r){      // free all nodes in 'r'
    if (r == -1) return;
    removeAll(node[r].L);
    removeAll(node[r].R);
    fnode.push_back(r);     // r is free, claim back the index
}

vector<int> con[MAXN], qk[MAXN], qi[MAXN];
int T,N,Q,L,a,b,k,x, ans[MAXN], label[MAXN];

int dfs(int x){
    int root = -1; // new tree
    REP(i,con[x].size()) if (x || con[x][i]){ // avoid 0's parent
        int r = dfs(con[x][i]);
        if (S(root) < S(r)) swap(root,r);   // pick the largest tree as the root
        addAll(r, root);    // transfer r's nodes to root's
        removeAll(r);       // delete unused tree
    }
    add(root,label[x]);     // post order insert
    REP(i,qk[x].size())     // answer all queries for node x (this node)
        ans[qi[x][i]] = kth(root, qk[x][i] - 1);
    return root;
}

int main(){
    REP(i,MAXN) fnode.push_back(i); // setup free indices
    scanf("%d",&T);
    REP(t,T){
        scanf("%d %d",&N,&Q);
        REP(i,N) con[i].clear(), qk[i].clear(), qi[i].clear(), scanf("%d",&label[i]);
        REP(a,N) scanf("%d",&b), con[b].push_back(a);
        REP(i,Q) scanf("%d %d",&k,&x), qk[x].push_back(k), qi[x].push_back(i);
        int root = dfs(0);  // traverse tree, and answer queries
        removeAll(root);    // delete tree
        printf("Case #%d:\n",t+1);
        REP(i,Q) printf("%d\n",ans[i]);
    }
}
Tampilkan Deskripsi Soal

Pembahasan Soal G - Finding The Right Song

Soal ini saya buat karena ter-inspirasi oleh Shazam. Shazam adalah suatu applikasi iPhone yang dapat mengenali lagu yang sedang dimainkan dengan cara merekam 10 detik di bagian manapun dari lagu yang sedang dimainkan. Rekaman 10 detik tersebut kemudian dikirim ke server Shazam dan servernya akan memberitahu nama lagu tersebut. Shazam memiliki 20 ribu lagu dan hanya membutuhkan beberapa milisecond untuk pencariannya.

Soal ini adalah versi simplenya dari masalah yang dihadapi Shazam dan tentunya dapat diselesaikan dengan cara yang sama dengan Shazam, yaitu menggunakan hash table. Hash table ini akan diisi dengan potongan-potongan 10 detik dari semua bagian dari semua lagu yang ada. Sehingga, kalau kita memiliki query yang berisi 10 detik potongan lagu, kita dapat mencari (lookup) nama lagu tersebut dan posisi dimulainya potongan tersebut dari dalam hash table dalam O(1) expected.

Linear probing mungkin adalah cara termudah yang dapat digunakan untuk mengatasi hash collisions dimana ada dua melodi mempunyai hash value yang sama. Saya sengaja membuat soal ini untuk hanya bisa solve menggunakan hash table buatan sendiri atau dengan meng-override HashMap (bagi pengguna Java). Mereka yang menggunakan STL-map akan mendapatkan TLE karena STL-map di-implementasi menggunakan Red-Black tree yang membutuhkan O(log N) operasi untuk mengakses elemen di dalamnya. Berikut adalah contoh implementasinya.

#include <stdio.h>
#include <assert.h>

#define REP(i,n) for (int i=0,_n=n; i<_n; i++)

#define HSIZE 3000001
#define IS_EMPTY(key) (e[key].song == -1)
#define QLEN 10

struct Entry { short song, pos; } e[HSIZE];
int songs[2001][1001], query[10], N,Q,S;

bool equal(int *a, int *b){
    REP(i,QLEN) if (a[i]!=b[i]) return false;
    return true;
}

int lookup(int *melody){
    unsigned int H = 0;                     // the hash of the melody
    REP(i,QLEN) H += (H*13) ^ melody[i];    // simple hash function
    REP(i,HSIZE){
        int key = (H + i) % HSIZE;          // http://en.wikipedia.org/wiki/Linear_probing
        if (IS_EMPTY(key)) return -key;
        int *this_melody = songs[e[key].song] + e[key].pos;
        if (equal(melody, this_melody)) return key;
    }
    assert(false);                          // hash table is full!
}

int main(){
    REP(i,HSIZE) e[i].song = -1;            // set hash table to empty
    scanf("%d %d",&N,&Q);
    REP(i,N){
        scanf("%d",&S);
        REP(j,S) scanf("%d",&songs[i][j]);
        REP(j,S-QLEN+1){
            int key = -lookup(songs[i]+j);  // expected O(1)
            assert(key >= 0);               // should have no duplicate!
            e[key] = (Entry){i,j};          // insert into hash table
        }
    }
    REP(i,Q){
        REP(j,QLEN) scanf("%d",&query[j]);
        int key = lookup(query);            // expected O(1)
        if (key < 0) puts("not found");
        else printf("%d %d\n", e[key].song+1, e[key].pos+1);
    }
}
Tampilkan Deskripsi Soal

Pembahasan Soal H - Disconnected Graph

Soal ini bisa disederhanakan dengan membuang semua edge yang dihancurkan. Dari graph yang ada, kita cari ada berapa banyak node yang spesial dalam suatu komponen yang terhubung. Suatu komponen yang terhubung bisa dicari dengan DFS atau disjoint set. Setelah kita mengetahui banyaknya node yang special di dalam komponen-komponen terhubung yang ada, untuk menghitung banyaknya pair antara 2 special node yang berada di komponen berbeda dapat dilakukan dengan mengalikan banyaknya special node yang ada di dalam komponen dengan banyaknya special node yang ada di luar komponen.

Berikut adalah contoh implementasi menggunakan disjoint set.

#include <stdio.h>

#define REP(i,n) for (int i=0,_n=(n); i<_n; i++)

int T,N,E,Q,R,a,b,P[50010],pset[50010],ea[200010],eb[200010],D[200010];
int findSet(int i){ return (pset[i]==i)? i : (pset[i] = findSet(pset[i])); }
void merge(int i, int j){ pset[findSet(i)] = findSet(j); }
int sameSet(int i, int j){ return findSet(i)==findSet(j); }

int main(){
    scanf("%d",&T);
    while (T--){
        scanf("%d %d %d %d",&N,&E,&Q,&R);
        REP(i,N+1) pset[i] = i, P[i] = 0;
        REP(i,E) scanf("%d %d",&ea[i],&eb[i]), D[i] = 0;
        REP(i,Q) scanf("%d",&a), P[a] = 1;
        REP(i,R) scanf("%d",&a), D[a-1] = 1;
        REP(i,E) if (!D[i] && !sameSet(ea[i],eb[i])){
            a = P[findSet(ea[i])];   // a = banyaknya special node di komponen ea[i]
            b = P[findSet(eb[i])];   // b = banyaknya special node di komponen eb[i]
            merge(ea[i],eb[i]);      // gabung komponen ea[i] dengan eb[i]
            P[findSet(ea[i])] = a+b; // banyaknya special node gabungan adalah a+b
        }
        long long res = 0;
        REP(i,N){
            a = findSet(i+1);        // a = komponen dari node i
            b = P[a];                // b = banyaknya special node di komponen a
            res += (Q-b)*b;          // (banyaknya special node di luar komponen a) * b
            P[a] = 0;                // komponen a telah diprocess
        }
        printf("%lld\n",res/2);      // double counting
    }
}
Tampilkan Deskripsi Soal

Pembahasan Soal I - Maximum Sum in Matrix

States dari dynamic programming nya adalah dp[n][m][k] seperti yang dijelaskan di blog Suhendry dan Eko. Dalam implementasinya, kita hanya membutuhkan value dari dua state terakhir: dp[i] dan dp[i-1]. Sehingga kita dapat menghemat memory. Banyak yang bilang ini adalah "dp terbang" atau "dp on the fly". Berikut adalah contoh implementasinya.

#include <stdio.h>

#define REP(i,n) for (int i=0,_n=n; i<_n; i++)

int T,N,M,K,X,dp[2][102][102];

int main(){
    scanf("%d",&T);
    while (T--){
        scanf("%d %d %d",&N,&M,&K);
        REP(i,N) REP(j,M){
            int (*c)[102] = dp[i%2];
            int (*p)[102] = dp[1-(i%2)];
            scanf("%d",&X);
            if (i==0){
                REP(k,K+1) c[j][k] = 0;
                c[j][0] = X;
            } else {
                REP(k,K+1) c[j][k] = p[j][k] + X;
                REP(k,K+1) REP(m,M)
                    c[j][k+(j==m?0:1)] >?= p[m][k] + X;
            }
        }
        int res = 0;
        REP(i,M) REP(j,K+1) res >?= dp[1-N%2][i][j];
        printf("%d\n",res);
    }
}
Rank Team Name Solved Time A B C D E F G H I Total att/solv
1 Dongskar Pedongi II
Institut Teknologi Bandung
9 1348 1/6 1/25 1/26 10/269 1/94 2/295 8/260 1/23 1/10 26/9
2 Eleazar
University of Indonesia
88761/51/541/105/1831/722/--1/1464/1932/5318/8
3Hope
BINUS University
89691/31/251/225/2041/2560/--3/2741/511/1414/8
4TePeBe
Institut Teknologi Bandung
74291/51/141/362/620/--0/--2/1621/861/249/7
5Saklar Lhompat
University of Indonesia
62331/91/251/76/--1/751/--6/--3/521/2521/6
6lolypop
STMIK Mikroskil
65121/71/411/213/1490/--0/--1/--3/1811/3311/6
7Faith
BINUS University
65881/51/721/199/--1/2810/--0/--4/1132/1819/6
8TC Pacifista
Institut Teknologi Sepuluh Nopember
67051/61/541/201/--4/1820/--2/--3/1132/21015/6
9H2S
BINUS University
67611/62/1161/288/--2/2590/--1/--2/2291/6318/6
10Deadlock
BINUS University
53931/331/581/432/--1/1600/--0/--11/--1/9918/5
11ein
Gadjah Mada University
54051/51/551/192/--5/1740/--1/--6/--1/7218/5
12ITT Vida
Institut Teknologi Telkom
58562/342/1031/102/--2/2090/--0/--9/2803/--21/5
13playfunfun
BINUS University
43192/352/922/101/--0/--0/--0/--8/--1/12216/4
14Law Let Me AC
BINUS University
43321/186/1471/271/--0/--0/--0/--8/--1/4018/4
15wFa2.0
University of Indonesia
43541/171/2091/178/--0/--0/--0/--0/--2/9113/4
16Autovajin
Institut Teknologi Sepuluh Nopember
43843/1013/1181/425/--1/--1/--0/--2/--1/4317/4
17Coding's Angels
University of Indonesia
44231/182/1251/481/--0/--0/--0/--0/--1/2126/4
18KueKiaTheng
BINUS University
44461/162/1632/1031/--0/--1/--0/--3/--1/12411/4
19ITT Guntur
Institut Teknologi Telkom
45202/741/1191/531/--1/2540/--0/--0/--0/--6/4
20inspanning
Parahyangan University
45311/523/1841/221/--0/--1/--1/--1/--4/17313/4
21ITT SOS Brigade
Institut Teknologi Telkom
45372/782/1151/330/--3/2310/--0/--0/--2/--10/4
22Padawan
Institut Teknologi Sepuluh Nopember
45392/423/1301/101/--2/2770/--2/--0/--0/--11/4
23ITT LUCKY
Institut Teknologi Telkom
46512/842/2511/317/--1/2450/--0/--0/--0/--13/4
24Ditolak jadi asdos programming
University of Indonesia
47898/1722/1631/1002/--0/--0/--0/--0/--1/19414/4
25ITT DividedByZero
Institut Teknologi Telkom
49324/2801/2441/193/--6/2290/--4/--0/--0/--19/4
26ITT VCIOUS
Institut Teknologi Telkom
410224/2763/2841/151/--4/2870/--2/--0/--0/--15/4
27kulikoding
Universitas Pelita Harapan
31362/372/391/201/--1/--1/--2/--2/--2/--14/3
28Joglosemar
Institut Teknologi Bandung
31481/731/301/452/--0/--0/--0/--0/--3/--8/3
29ShadowEvil
Sekolah Tinggi Teknik Surabaya
31501/501/492/3123/--0/--1/--7/--13/--4/--52/3
30Nerd
Sekolah Tinggi Teknik Surabaya
31651/531/791/330/--0/--0/--0/--0/--0/--3/3
31Numpang Ngoding
University of Indonesia
31821/332/881/413/--0/--0/--0/--0/--0/--7/3
32Satijan
University of Indonesia
31841/132/1091/423/--0/--0/--1/--0/--0/--8/3
33CrossEdge
Sekolah Tinggi Teknik Surabaya
31961/1101/511/350/--0/--0/--0/--0/--0/--3/3
34Sphinx
BINUS University
31971/340/--1/456/--0/--0/--0/--0/--1/1189/3
35PlugNPlay
Sekolah Tinggi Teknik Surabaya
31992/761/801/230/--0/--4/--6/--3/--0/--17/3
36yoonA
Petra Christian University
32041/463/971/212/--2/--0/--0/--2/--1/--12/3
37TheLastCodeBlender
University of Surabaya
32201/254/851/502/--0/--0/--5/--0/--3/--16/3
38DnD
Parahyangan University
32231/831/1271/137/--0/--0/--1/--3/--1/--15/3
39Legendroid
Parahyangan University
32381/741/1032/411/--0/--0/--0/--0/--4/--9/3
40almostGraduate
University of Indonesia
32405/621/691/291/--0/--0/--0/--5/--0/--13/3
41HantuPuskom
University of Sumatera Utara
32831/340/--1/565/--1/1930/--1/--0/--0/--9/3
4210-2
Binus University
32951/422/1303/630/--0/--0/--4/--0/--1/--11/3
43numpang_Makan
University of Indonesia
33103/921/1421/365/--0/--0/--4/--0/--0/--14/3
44JoRoGe
Petra Christian University
33152/404/1631/324/--0/--0/--5/--6/--0/--22/3
45HantuPuskom.Jr
University of Sumatera Utara
33181/303/--1/441/--4/1840/--1/--0/--0/--11/3
46Tpl08
University of Sumatera Utara
33201/380/--1/530/--2/2090/--0/--0/--0/--4/3
47pssst...
University of Sumatera Utara
33431/445/1662/330/--0/--0/--0/--0/--0/--8/3
48kode racun
University of Sumatera Utara
33481/463/2003/227/--0/--0/--0/--0/--0/--14/3
49TouchEvent
Sekolah Tinggi Teknik Surabaya
33672/893/943/841/--0/--0/--1/--1/--0/--11/3
50kulikodingHy
Universitas Pelita Harapan
34213/1714/1341/162/--5/--0/--0/--0/--0/--15/3
51MCU_Bless
Maranatha Christian University
34251/376/2611/271/--4/--0/--0/--0/--8/--21/3
52winner
Institut Teknologi Sepuluh Nopember
34322/921/2571/633/--1/--0/--0/--2/--0/--10/3
53saigoNoChansu
University of Indonesia
34413/2083/1221/319/--0/--0/--0/--0/--0/--16/3
54An-nahl
University of Indonesia
34484/2001/1151/734/--0/--0/--0/--0/--0/--10/3
55kulikodingJr
Universitas Pelita Harapan
34481/1852/1561/873/--0/--0/--0/--0/--0/--7/3
56moonlight
University of Surabaya
34561/904/2621/441/--0/--0/--1/--0/--0/--8/3
57zwei
Gadjah Mada University
34582/1033/2141/810/--0/--0/--0/--0/--0/--6/3
58leciKW!
Petra Christian University
34594/1882/1422/293/--2/--0/--7/--2/--3/--25/3
59Unduh
University of Indonesia
34724/2121/1182/620/--1/--0/--1/--4/--0/--13/3
60namespace
Satya Wacana Christian University
34731/247/2971/325/--0/--0/--1/--0/--0/--15/3
61BLINK
Institut Bisnis Dan Informatika Indonesia
35083/1353/2211/725/--0/--0/--4/--0/--0/--16/3
62c0123
BINUS University
35131/1494/1494/951/--0/--0/--0/--0/--1/--11/3
63runtime error
Institut Teknologi Bandung
36094/1941/1801/1750/--0/--1/--0/--0/--0/--7/3
64Binary Beats
Institut Teknologi Bandung
36132/2971/235/1932/--0/--0/--0/--0/--0/--10/3
65HSBC
University of Surabaya
36482/2521/2971/791/--0/--0/--0/--0/--0/--5/3
66happy3friends
Petra Christian University
36539/1911/1353/12715/--6/--0/--0/--0/--0/--34/3
67ITT Hysteria
Institut Teknologi Telkom
37032/2431/2482/1728/--2/--0/--0/--0/--0/--15/3
68newGen
Satya Wacana Christian University
37776/2974/2781/424/--0/--0/--4/--0/--0/--19/3
69AD-Kodingan
University of Indonesia
38698/2843/2464/990/--0/--3/--5/--0/--0/--23/3
70Fivian
Petra Christian University
388512/2812/2692/757/--0/--0/--7/--0/--0/--30/3
71Cisituers
Institut Teknologi Bandung
2481/315/--1/170/--0/--0/--0/--1/--0/--8/2
72Big-O
BINUS University
2711/310/--1/400/--0/--0/--0/--0/--1/--3/2
73STMIKSBY2
STMIK Surabaya
21071/504/--1/574/--0/--0/--0/--0/--0/--10/2
74Underdog
Ciputra University
21141/555/--2/393/--0/--0/--3/--0/--0/--14/2
75Invisible
Ciputra University
21161/620/--1/548/--3/--0/--0/--0/--0/--13/2
76Masih Muda
Ciputra University
21241/650/--1/590/--0/--0/--1/--0/--0/--3/2
77Nehemiaz
Ciputra University
21432/630/--1/604/--0/--0/--0/--0/--0/--7/2
78Babak Belur
Ciputra University
21581/1053/--1/534/--0/--0/--4/--0/--0/--13/2
79Wish Accepted
University of Surabaya
21661/392/--3/870/--0/--0/--2/--0/--0/--8/2
80Emil ia Kontesa
Ciputra University
21671/770/--2/704/--0/--0/--2/--0/--0/--9/2
81Team X
BINUS University
21731/305/--3/1032/--0/--0/--4/--0/--1/--16/2
82Indosmart
BINUS University
21971/730/--1/1240/--0/--0/--0/--0/--0/--2/2
83koach
Institut Teknologi Sepuluh Nopember
21975/--1/1332/441/--0/--0/--0/--0/--0/--9/2
84ModuloDiv
BINUS University (International)
22011/1210/--1/806/--0/--0/--2/--0/--0/--10/2
85Timun
Ciputra University
22131/990/--2/940/--0/--0/--0/--0/--0/--3/2
86Terong
Ciputra University
22432/1040/--2/990/--0/--0/--0/--0/--0/--4/2
87null
Gadjah Mada University
22472/1541/--1/734/--1/--0/--2/--0/--0/--11/2
88NaDI UPM
Paramadina University
22481/1941/--1/542/--0/--0/--0/--0/--0/--5/2
89D'Bodors
Widyatama University
22501/1303/--1/1202/--0/--0/--0/--0/--0/--7/2
90doaEmak
Widyatama University
22531/1391/--1/1147/--10/--0/--0/--0/--0/--20/2
91Infinite
Ciputra University
23081/1370/--2/1514/--3/--0/--0/--0/--1/--11/2
92UAJY_Meister
Universitas Atma Jaya Yogyakarta
23145/1300/--3/642/--2/--0/--0/--0/--0/--12/2
93MangaFreax
Widyatama University
23283/1690/--2/992/--1/--0/--0/--0/--0/--8/2
94MCU_Grace
Maranatha Christian University
23496/--2/2541/751/--0/--0/--0/--0/--0/--10/2
95Tegg
Institut Teknologi Sepuluh Nopember
23591/713/2483/--2/--0/--0/--0/--0/--0/--9/2
96MCU_Hope
Maranatha Christian University
23694/2683/--1/412/--0/--0/--0/--0/--0/--10/2
97Integrated2010
Institut Teknologi Sepuluh Nopember
23721/1180/--3/2141/--0/--0/--0/--0/--0/--5/2
98sion
Widyatama University
23901/1920/--2/1781/--0/--0/--0/--0/--0/--4/2
99STMIKSBY1
STMIK Surabaya
23994/2751/--1/640/--0/--0/--0/--0/--0/--6/2
100petagman
STMIK Mikroskil
24014/2400/--1/1010/--0/--0/--0/--0/--0/--5/2
101Guts
BINUS University
24061/2685/588/--1/--0/--0/--0/--0/--0/--15/2
102STMIKSBY3
STMIK Surabaya
24365/2761/--1/800/--0/--0/--7/--0/--0/--14/2
103STMIKSBY5
STMIK Surabaya
24366/2719/--1/650/--0/--0/--1/--0/--0/--17/2
104MCU_Joy
Maranatha Christian University
24446/2900/--1/540/--0/--0/--0/--0/--0/--7/2
105RES
University of Surabaya
24622/25411/--2/1683/--0/--0/--0/--0/--0/--18/2
106the one
University of Surabaya
24873/2282/--5/1391/--0/--0/--1/--0/--0/--12/2
107Garuda
BINUS University
25564/1931/--7/1839/--0/--0/--0/--0/--0/--21/2
108STMIKSBY6
STMIK Surabaya
260714/2810/--1/662/--0/--0/--2/--0/--0/--19/2
109Ace
Petra Christian University
26318/--1/24510/2068/--0/--0/--1/--0/--0/--28/2
110G.S.Chrome
Sekolah Tinggi Teknik Surabaya
26687/2363/--7/1922/--0/--0/--1/--0/--0/--20/2
111code warriors
University of Surabaya
26974/2610/--6/2760/--0/--0/--0/--0/--0/--10/2
112Rogue
Binus University
1434/--0/--1/432/--0/--0/--0/--0/--0/--7/1
113Kamen Programmer H2S
Petra Christian University
1480/--6/--1/484/--10/--0/--0/--0/--0/--21/1
114chi square
Sekolah Tinggi Ilmu Statistik
1601/600/--1/--2/--0/--0/--0/--0/--0/--4/1
115Tempe
Institut Teknologi Sepuluh Nopember
1660/--0/--1/660/--0/--0/--4/--0/--0/--5/1
116kolgomorov-smirnov
Sekolah Tinggi Ilmu Statistik
1671/670/--0/--1/--0/--0/--1/--0/--0/--3/1
117varians
Sekolah Tinggi Ilmu Statistik
1701/700/--1/--0/--0/--0/--0/--0/--0/--2/1
118MCU_Faith
Maranatha Christian University
1710/--4/--2/512/--0/--0/--0/--0/--0/--8/1
119STMIKSBY4
STMIK Surabaya
1710/--1/--1/710/--0/--0/--0/--0/--0/--2/1
120binom
Sekolah Tinggi Ilmu Statistik
1761/760/--0/--1/--0/--0/--0/--0/--1/--3/1
121fti-uksw-1
Satya Wacana Christian University
1891/--1/--1/891/--1/--1/--3/--0/--1/--10/1
122fti-uksw-2
Satya Wacana Christian University
1931/--1/--1/933/--1/--1/--1/--2/--1/--12/1
123fti-uksw-3
Satya Wacana Christian University
11020/--2/--2/822/--0/--0/--0/--0/--0/--6/1
124BrainPlusPlus
State Islamic University Jakarta
11030/--0/--1/1030/--0/--0/--1/--0/--0/--2/1
125seven
Widyatama University
11160/--0/--1/1163/--0/--0/--0/--0/--0/--4/1
126Cavalieurs
Widyatama University
11191/--0/--1/1190/--0/--0/--0/--0/--0/--2/1
127HexaDec
BINUS University
11218/--4/--1/1211/--0/--0/--2/--0/--0/--16/1
128nyengir
Widyatama University
11260/--0/--1/1260/--0/--0/--0/--0/--0/--1/1
129Cyclopes
Binus University (International)
11290/--0/--1/1292/--0/--0/--0/--0/--0/--3/1
130IF-UPT2010
Universitas Komputer Indonesia
11321/--0/--3/923/--0/--0/--0/--0/--0/--7/1
131Madara
BINUS University
11420/--0/--1/1420/--0/--0/--0/--0/--0/--1/1
132IDR
Yarsi University
11510/--0/--2/1310/--0/--0/--0/--0/--0/--2/1
133zeromind
State Islamic University Jakarta
11530/--0/--1/1532/--0/--0/--0/--0/--0/--3/1
134QuadPro
BINUS University (International)
11594/--2/--1/1591/--0/--0/--0/--0/--0/--8/1
135injury time
Binus University
11622/--0/--4/1021/--0/--0/--0/--0/--1/--8/1
136Trunojoyo C++
Universitas Trunojoyo Madura
11840/--0/--2/1644/--0/--0/--8/--0/--0/--14/1
137DeathByComputer
State Islamic University Jakarta
11850/--0/--1/1850/--0/--0/--0/--0/--0/--1/1
138drei
Gadjah Mada University
12152/1950/--6/--1/--0/--0/--0/--0/--0/--9/1
139IBII 2009
Institut Bisnis Dan Informatika Indonesia
12212/2010/--0/--5/--0/--0/--0/--0/--0/--7/1
140beginners
Widyatama University
12310/--0/--3/1910/--0/--0/--0/--0/--0/--3/1
141UII9
Universitas Islam Indonesia
12325/--0/--1/2321/--0/--0/--0/--0/--0/--7/1
142Code Hunter
BINUS University
12496/1490/--4/--16/--0/--0/--0/--0/--0/--26/1
143G.A.Pro
BINUS University
12503/--0/--3/2107/--0/--0/--0/--0/--0/--13/1
144E.N.T.R.E
BINUS University
12772/--2/2572/--0/--0/--0/--0/--0/--0/--6/1
145TIYRS2
Yarsi University
12911/--0/--1/2910/--0/--0/--0/--0/--0/--2/1
146sadhar4
Sanata Dharma University
13255/2450/--0/--2/--0/--0/--0/--0/--0/--7/1
147burningcode
STMIK Mikroskil
13626/2620/--0/--0/--0/--0/--0/--0/--0/--6/1
148ExpressOurAbility
Binus University
13936/--0/--10/2131/--0/--0/--9/--0/--0/--26/1
149TheSolve
BINUS University
001/--0/--5/--2/--0/--0/--0/--0/--0/--8/0
149UII8
Universitas Islam Indonesia
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149ceRIA
Universitas Komputer Indonesia
004/--0/--5/--0/--0/--0/--0/--0/--0/--9/0
149ILM
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149UII1
Universitas Islam Indonesia
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149PerXenogami
BINUS University
000/--0/--0/--3/--0/--0/--0/--0/--0/--3/0
149Bebas
Yarsi University
000/--2/--0/--0/--0/--0/--0/--0/--0/--2/0
149Pasti Bisa
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Reale
BINUS University
001/--0/--0/--0/--0/--0/--0/--0/--0/--1/0
149Autobanned
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Red Loader
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149UII4
Universitas Islam Indonesia
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Pac-man
Institut Teknologi Sepuluh Nopember
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Vanguard
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Re-tidy
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Baby Brain
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Calibri
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Afuza
Universitas Nasional PASIM
000/--0/--1/--4/--0/--0/--0/--0/--0/--5/0
149sadhar1
Sanata Dharma University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149LinearPro
BINUS University (International)
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149sadhar2
Sanata Dharma University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149TRY
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149sadhar3
Sanata Dharma University
000/--0/--1/--0/--0/--0/--0/--0/--0/--1/0
149UII2
Universitas Islam Indonesia
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Over Dying Day
Widyatama University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149UII6
Universitas Islam Indonesia
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149BZZD
Universitas Bakrie
000/--0/--5/--0/--0/--0/--0/--0/--0/--5/0
149Aurochs
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149One
BINUS University
000/--2/--0/--2/--0/--0/--0/--0/--0/--4/0
149vier
Gadjah Mada University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Coba
BINUS University
000/--1/--3/--1/--0/--0/--0/--0/--0/--5/0
149Gavin
Universitas Nasional PASIM
004/--0/--0/--0/--0/--0/--0/--0/--1/--5/0
149Juragan Cendol
BINUS University
000/--0/--0/--1/--0/--0/--0/--0/--0/--1/0
149Angelo
BINUS University
000/--0/--4/--3/--0/--0/--0/--0/--0/--7/0
149Code Breaker
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149nezumi
BINUS University
002/--1/--1/--2/--0/--1/--1/--2/--0/--10/0
149WIN
BINUS University
005/--1/--13/--0/--0/--0/--0/--0/--0/--19/0
149newline
Gadjah Mada University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149BISA
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149SPD
Universitas Ma Chung
000/--0/--1/--1/--0/--0/--0/--0/--0/--2/0
149AGREE
Universitas Bakrie
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Boma
Universitas Nasional PASIM
000/--0/--2/--0/--0/--0/--0/--0/--1/--3/0
149binus@DEEP
BINUS University
000/--0/--0/--6/--0/--0/--0/--0/--0/--6/0
149SPIDEY TEAM
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
1493PLUS
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Invinsible
BINUS University
000/--0/--1/--0/--0/--0/--0/--0/--0/--1/0
149DigitEx
BINUS University (International)
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149BlackBinusian
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149UII10
Universitas Islam Indonesia
000/--0/--9/--0/--0/--0/--0/--0/--0/--9/0
149cone boy
Institut Teknologi Sepuluh Nopember
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149UII3
Universitas Islam Indonesia
002/--0/--0/--0/--0/--0/--0/--0/--0/--2/0
149Fallen
BINUS University
001/--0/--0/--0/--0/--0/--0/--0/--0/--1/0
149UII5
Universitas Islam Indonesia
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149CoVaNes
BINUS University
000/--0/--5/--0/--0/--0/--0/--0/--0/--5/0
149UII7
Universitas Islam Indonesia
000/--0/--1/--0/--0/--0/--0/--0/--0/--1/0
149Falcer 3
Indonusa Esa Unggul University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Algorythm
BINUS University
001/--2/--15/--0/--0/--0/--0/--0/--0/--18/0
149AcT
BINUS University
000/--0/--4/--0/--0/--0/--0/--0/--0/--4/0
149Bee
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Falcer 2
Indonusa Esa Unggul University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Draken
BINUS University
000/--0/--0/--0/--0/--2/--0/--0/--0/--2/0
149Falcer 1
Indonusa Esa Unggul University
002/--0/--1/--2/--1/--1/--0/--0/--0/--7/0
149vi-TELL
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149DAT
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149BAROKAH
Universitas Bakrie
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Maverick
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149X-Man
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149ExE
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149ASA
BINUS University
000/--0/--3/--0/--0/--0/--0/--0/--0/--3/0
149The Krabby Paty
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149KKR
Petra Christian University
004/--0/--8/--2/--9/--0/--8/--0/--0/--31/0
149the Luck
BINUS University
001/--1/--1/--0/--1/--1/--0/--0/--0/--5/0
149RAY
Binus University
000/--0/--2/--0/--0/--0/--0/--0/--0/--2/0
149AntiGerigi
Institut Teknologi Sepuluh Nopember
000/--2/--0/--1/--0/--0/--0/--0/--0/--3/0
149Azeroth
BINUS University
002/--0/--1/--0/--0/--0/--0/--0/--0/--3/0
149The World
BINUS University
000/--0/--2/--16/--0/--0/--0/--0/--0/--18/0
149JUNIOR
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149BST
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149Pastel
BINUS University
000/--0/--0/--0/--0/--0/--0/--0/--0/--0/0
149QWERTY
BINUS University
000/--0/--6/--0/--0/--0/--0/--0/--0/--6/0
Total (attempt/solved)366/117252/72357/136442/5111/1925/1173/4118/1072/201916/384

© Felix Halim 2009 (Loaded in 0.11772 secs)