"; print " �Ʒ� ������ ������ ��� �п� ���� ����Դϴ�.
������ �غ����� ���ǰ��翡�� ������ �ֽñ� �ٶ��ϴ�.
"; print "
���� : o - Accepted, x - Wrong Answer, s - signal out(runtime error), t - Time Limit Exceeded


"; print "4ȸ ���� �ڴ���(Eagle)!! ���

"; print "Eagle Champion - ��3ȸ���� Eagle���� 1���� �����ڴ� Ư��Ʈ������ Champion Trophy�� ȹ���� �� �ֽ��ϴ�. 3ȸ ��ȸ�� Ʈ���Ǵ� �̹��� ���� �ο��˴ϴ�.
"; print "
Gold Medal - �� ���̶� ������ �������� 10%, Silver Medal - �������� 20%, Bronze Medal - �������� 30%

"; print " : dijkstra
"; print " : dijkstra, k5888200
"; print " : gs12065, gs10107, takuma, myungwoo
"; print " : zlzmsrhak56, jerry1259, byeonbi, pl0892029, shinism, nobe0716, gs11008


"; $dir="/var/www/bbs/moi/4st/"; $pnum = 4; $files1 = scandir($dir); $number=1; $iuser = array(); $ip1 = array(); $ip2 = array(); $ip3 = array(); $ip4 = array(); $isc = array(); $rank = array(); for( $i=0 ; $files1[$i] != NULL ; $i++ ) { if(/*$files1[$i]!="admin" && */$files1[$i]!="." && $files1[$i]!=".." && is_dir($files1[$i])==true) { $number++; $score=0; if( $number%2 == 1 ) $bcolor = "ffffff"; else $bcolor = "ececff"; $id_name=""; for($ttt=0;$ttt<= strlen($files1[$i]) ;$ttt++) if(1<=$ttt&&$ttt<=-2) $id_name.= "*"; else $id_name.=SUBSTR($files1[$i],$ttt,1); $iuser[$number] = $id_name; for( $j=1 ; $j <= $pnum ; $j++ ) { $sz = 20; $prob_result = $dir.$files1[$i].'/'.$files1[$i].'.res'.$j; if(file_exists($prob_result)==true) { $score+=($j*0.001); $fp = fopen($prob_result, "r"); $str = fgets($fp, filesize($prob_result)+1); $resres = ""; for( $k=0; $k <= strlen($str) ; $k++ ) if(SUBSTR($str, $k, 1)== "o"){ $resres.=''.SUBSTR($str, $k, 1).''; if($j!=4) $score += 25+($j*0.001); else $score += 12.5+($j*0.001); } else if(SUBSTR($str, $k, 1)=="x") $resres.=''.SUBSTR($str, $k, 1).''; else if(SUBSTR($str, $k, 1)=="t") $resres.=''.SUBSTR($str, $k, 1).''; else if(SUBSTR($str, $k, 1)=="s") $resres.=''.SUBSTR($str, $k, 1).''; } else $resres='Not submited!!'; if($j==1) $ip1[$number] = $resres; else if($j==2) $ip2[$number] = $resres; else if($j==3) $ip3[$number] = $resres; else $ip4[$number] = $resres; } $isc[$number]=$score; } } for($i=2;$i<=$number;$i++) for($j=2;$j<=$number;$j++) if( $isc[$i] < $isc[$j] ) $rank[$i]++; for($i=2;$i<=$number-1;$i++) for($j=$i+1;$j<=$number;$j++) if($isc[$i] < $isc[$j]) { $tttt=$iuser[$i];$iuser[$i]=$iuser[$j];$iuser[$j]=$tttt; $tttt=$ip1[$i];$ip1[$i]=$ip1[$j];$ip1[$j]=$tttt; $tttt=$ip2[$i];$ip2[$i]=$ip2[$j];$ip2[$j]=$tttt; $tttt=$ip3[$i];$ip3[$i]=$ip3[$j];$ip3[$j]=$tttt; $tttt=$ip4[$i];$ip4[$i]=$ip4[$j];$ip4[$j]=$tttt; $ttttt=$isc[$i];$isc[$i]=$isc[$j];$isc[$j]=$ttttt; $ttttt=$rank[$i];$rank[$i]=$rank[$j];$rank[$j]=$ttttt; } print 'Result for All Participant (������ ��쿡 4, 3, 2, 1�� ������ ���� ������ �켱������ �������ϴ�.)'; for($i=2; $i <= $number ; $i++ ) { if( $i%2 == 1 ) $bcolor = "ffffff"; else $bcolor = "ececff"; print ' '; print ' '; print ' '; print ' '; print ' '; print ' '; print ''; print ""; } print "
Rank user Find Constellation(250) Cheese(250) Flip Bowl (250) Word Game(250) Score
'.($rank[$i]+1).''.$iuser[$i].''.$ip1[$i].''.$ip2[$i].''.$ip3[$i].''.$ip4[$i].''.(floor($isc[$i])).'

"; print "�̹� ��ȸ�� �����Ͻ� ".($number)."�� ��� �����ϼ̽��ϴ�!! ���� �濬�� ����ϼ���~
"; print "������ ��ȸ�� �ȴٸ� ����ǰ�� �غ��� ^^;"; print "


Here is some User's perfect Solution!!

"; print "
[Problem 1]
�� ������ CHICK�� 4�� ������ �����մϴ�. CHICK�� 4�� �ع��� �����ϼ���"; print "

"; print "

[Problem 2]
�� ������ �׷��� ó���� �����ϴµ� ������ �Ǵ� �����Դϴ�. BFS�� ������� �� Ž���� �����Ͻñ� �ٶ��ϴ�. 2���� �ַ���� �����մϴ�.

2. Cheese(by ainta)"; print '
  1. #include<stdio.h>  
  2. int a,b,n,i,j,k,q[1000002][2],w[10][2],sx,sy,h,t,v[1001][1001],D[1001][1001],s;  
  3. char p[1001][1001];             // by ainta  
  4. void BFS(int x,int y)  
  5. {  
  6.     if(x>0&&v[x-1][y]==0&&p[x-1][y]!='X'){  
  7.         v[x-1][y]=1,q[t][0]=x-1,q[t++][1]=y,D[x-1][y]=D[x][y]+1;}  
  8.     if(x<a-1&&v[x+1][y]==0&&p[x+1][y]!='X'){  
  9.         v[x+1][y]=1,q[t][0]=x+1,q[t++][1]=y,D[x+1][y]=D[x][y]+1;}  
  10.     if(y>0&&v[x][y-1]==0&&p[x][y-1]!='X'){  
  11.         v[x][y-1]=1,q[t][0]=x,q[t++][1]=y-1,D[x][y-1]=D[x][y]+1;}  
  12.     if(y<b-1&&v[x][y+1]==0&&p[x][y+1]!='X'){  
  13.         v[x][y+1]=1,q[t][0]=x,q[t++][1]=y+1,D[x][y+1]=D[x][y]+1;}  
  14. }  
  15. int main(){  
  16.     scanf("%d%d%d",&a,&b,&n);  
  17.     for(i=0;i<a;i++){  
  18.         scanf("%s",p[i]);  
  19.         for(j=0;j<b;j++){  
  20.             if(p[i][j]>='1'&&p[i][j]<='9'){  
  21.                 w[p[i][j]-'0'][0]=i,w[p[i][j]-'0'][1]=j;  
  22.             }  
  23.             if(p[i][j]=='S'){  
  24.                 sx=i,sy=j;  
  25.             }  
  26.         }  
  27.     }  
  28.     for(i=1;i<=n;i++){  
  29.         t=h=0;  
  30.         q[t][0]=sx,q[t++][1]=sy;  
  31.         D[sx][sy]=0;  
  32.         v[sx][sy]=1;  
  33.         while(v[w[i][0]][w[i][1]]==0){  
  34.             BFS(q[h][0],q[h][1]);  
  35.             h++;}  
  36.         for(j=0;j<a;j++)for(k=0;k<b;k++)v[j][k]=0;  
  37.         s+=D[w[i][0]][w[i][1]];  
  38.         sx=w[i][0],sy=w[i][1];  
  39.     }  
  40.     printf("%d\n",s);  
  41. }  
  42.       

'; print "
Here is another solution 2. Flip Bowl(by myungwoo)"; print '
  1. #include <stdio.h>  
  2.   
  3. int yy[]={-1,0,1,0},xx[]={0,1,0,-1};  
  4. int H,W,N,Y[10],X[10],D[1004][1004],ans;  
  5. int head,tail;  
  6. char map[1004][1004];  
  7.                         //by myungwoo  
  8. struct QUE{  
  9.     int y,x;  
  10. } que[1000*1000+9];  
  11.   
  12. void iq(int y,int x){ QUE q={y,x}; que[tail++] = q; }  
  13.   
  14. void bfs(int t)  
  15. {  
  16.     int i,j,y=Y[t],x=X[t];  
  17.     QUE q;  
  18.     head = tail = 0;  
  19.     for (i=1;i<=H;i++) for (j=1;j<=W;j++) D[i][j] = 1e9;  
  20.     D[y][x] = 0;  
  21.     iq(y,x);  
  22.     while (head != tail){  
  23.         q = que[head++];  
  24.         for (i=0;i<4;i++){  
  25.             y = q.y+yy[i], x = q.x+xx[i];  
  26.             if (y < 1 || y > H || x < 1 || x > W || map[y][x] == 'X' || D[y][x] < 1e9) continue;  
  27.             D[y][x] = D[q.y][q.x]+1;  
  28.             iq(y,x);  
  29.         }  
  30.     }  
  31. }  
  32.   
  33. int main()  
  34. {  
  35.     int i,j;  
  36.     scanf("%d%d%d",&H,&W,&N);  
  37.     for (i=1;i<=H;i++){  
  38.         scanf("%s",map[i]+1);  
  39.         for (j=1;j<=W;j++){  
  40.             if (map[i][j] == 'S') map[i][j] = '0';  
  41.             if ('0' <= map[i][j] && map[i][j] <= '9'){  
  42.                 Y[map[i][j]-'0'] = i, X[map[i][j]-'0'] = j;  
  43.             }  
  44.         }  
  45.     }  
  46.     for (i=0;i<N;i++){  
  47.         bfs(i);  
  48.         ans += D[Y[i+1]][X[i+1]];  
  49.     }  
  50.     printf("%d",ans);  
  51. }  
  52.       

'; print "

[Problem 3]
�� ������ KOI-2004 �������� 4������ �����Ǿ� �����ڰ� ������ �����Դϴ�. �̹� ��ȸ�� 2���� �����ڰ� �ֽ��ϴ�. ��� �޸���ƽ�� Ȱ���Ͽ����ϴ�. 1���� ������ ����Ž���� ���������� ���� Accept�� �� ��°�� Simulatied Annealing�� ���� Accepted�� �޾ҽ��ϴ�. �� ��� ��� �����ϼ���~"; print "


Here is solution 3. Flip Bowl(by k5888200)"; print '
  1. #include <stdio.h>  
  2. #include <time.h>  
  3. #include <stdlib.h>  
  4.   
  5. int n;  
  6. int a[40][40];  
  7. int s1[40],s2[40],s;  
  8. int max;  
  9. int T;  
  10.   
  11. void print(){  
  12.     int i,j;  
  13.     for(i=1;i<=n;i++){  
  14.         for(j=1;j<=n;j++) printf("%d",a[i][j]==-1?0:1);  
  15.         printf("\n");  
  16.     }  
  17.     printf("\n");  
  18. }  
  19.   
  20. void R(){  
  21.     int i,j;  
  22.     for(i=1;i<=n;i++){  
  23.         if(rand()&1){  
  24.             for(j=1;j<=n;j++){  
  25.                 s1[i]=-s1[i];  
  26.                 for(j=1;j<=n;j++) a[i][j]=-a[i][j], s2[j]+=a[i][j]*2, s+=a[i][j]*2;  
  27.             }  
  28.         }  
  29.     }  
  30.     for(j=1;j<=n;j++){  
  31.         if(rand()&1){  
  32.             for(i=1;i<=n;i++){  
  33.                 s2[j]=-s2[j];  
  34.                 for(i=1;i<=n;i++) a[i][j]=-a[i][j], s1[i]+=a[i][j]*2, s+=a[i][j]*2;  
  35.             }  
  36.         }  
  37.     }  
  38. }  
  39. int main(){  
  40.     T=clock();  
  41.     srand(time(NULL));  
  42.   
  43.     int i,j;  
  44.   
  45.     scanf("%d",&n);  
  46.     for(i=1;i<=n;i++) for(j=1;j<=n;j++){  
  47.         scanf("%1d",&a[i][j]);  
  48.         if(!a[i][j]) a[i][j]=-1;  
  49.         s1[i]+=a[i][j];  
  50.         s2[j]+=a[i][j];  
  51.         s+=a[i][j];  
  52.     }  
  53.     //for(i=1;i<=n;i++) for(j=1;j<=n;j++) printf("%d ",a[i][j]);  
  54.     max=s;  
  55.   
  56.     for(;;){  
  57.         for(i=1;i<=n;i++) if(s1[i]<0) break;  
  58.         if(i!=n+1){  
  59.             s1[i]=-s1[i];  
  60.             for(j=1;j<=n;j++) a[i][j]=-a[i][j], s2[j]+=a[i][j]*2, s+=a[i][j]*2;  
  61.         }  
  62.         else {  
  63.             for(j=1;j<=n;j++) if(s2[j]<0) break;  
  64.             if(j!=n+1){  
  65.                 s2[j]=-s2[j];  
  66.                 for(i=1;i<=n;i++) a[i][j]=-a[i][j], s1[i]+=a[i][j]*2, s+=a[i][j]*2;  
  67.             }  
  68.             else {  
  69.                 R();  
  70.             }  
  71.         }  
  72.         if(s>max) max=s;  
  73.         if(clock()-T>10000) break;  
  74.     }  
  75.     printf("%d",max+(n*n-max)/2);  
  76. }  
  77.       

'; print "
Here is another solution 3. Cheese(by dijkstra)"; print '
  1. #include<stdio.h>  
  2. #include<math.h>  
  3. #include<stdlib.h>  
  4. #include<time.h>  
  5.   
  6. #define MAXN 32  
  7. // SA setting  
  8. #define _K 0.000015  
  9. #define _TBOUND 0.0000001  
  10. #define _TIMELIMIT 390000  
  11. #define _TUP 0.995  
  12.                     //by dijkstra  
  13. unsigned int map[MAXN+1][MAXN+1];  
  14. int getX(int n)  
  15. {  
  16.     int i, j, rev=0;  
  17.     for(i=0;i<n;i++)  
  18.         for(j=0;j<n;j++)  
  19.             if(!map[i][j]) rev++;  
  20.     return rev;  
  21. }  
  22. int Perturb(int t, int n)  
  23. {  
  24.     int i;  
  25.     if(t<n)  
  26.         for(i=0;i<n;i++)  
  27.             if(map[t][i]) map[t][i] = 0;  
  28.             else map[t][i] = 1;  
  29.     else  
  30.         for(i=0;i<n;i++)  
  31.             if(map[i][t-n]) map[i][t-n] = 0;  
  32.             else map[i][t-n] = 1;  
  33.     return getX(n);  
  34. }  
  35. main(void)  
  36. {  
  37.     double T=1.0;  
  38.     char temp[33];  
  39.     int n, i, j, X_init, X_update, t, min = 100000;  
  40.     unsigned long a = clock();  
  41.     srand(time(NULL));  
  42.     scanf("%d", &n);  
  43.     for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%1d",&map[i][j]);  
  44.     X_init = getX(n);  
  45.     while(T > _TBOUND)  
  46.     {  
  47.         for(i=0; i<500;i++)    
  48.         {  
  49.             if(clock() - a > _TIMELIMIT) break;  
  50.             t = rand() % (n*2);  
  51.             X_update = Perturb(t, n);  
  52.             if( exp(X_init-X_update)/(_K*T) > ((double)rand() / 31975) ) X_init = X_update;  
  53.             else Perturb(t, n);  
  54.             if(min > X_init) min = X_init;  
  55.         }  
  56.         T *= _TUP;  
  57.     }  
  58.     printf("%d\n", n*n-min);  
  59. }  
  60.   
  61.       

'; print "

[Problem 4]
�� ������ ������ �����ϴ�. �� ������ �ܱ��� ������ǥ ���� ����ķ������ �����Ǿ��� �����Դϴ�. 500,000�� 5�ʿ� Ǯ����ϴ� ���̵��� ���� �����Դϴ�. ���� ������ �ַ���� 50%������ ������ ȹ���Ͽ����ϴ�. ������ �ʿ��� ���̵����� ����� �ݿ��� �Ǿ��ֽ��ϴ�. �� ����� ���̵�� �� ���� �� �߰��ϸ� Accepted�� ���� �� ���� ������ �����˴ϴ�. �����ϼ���"; print "


Here is solution 4. Word Game(by gs12065)"; print '
  1. #include <stdio.h>  
  2. #include <algorithm>  
  3. #include <vector>  
  4.                 // by gs12065  
  5. struct word{  
  6.     int a[5];  
  7.     bool operator <(const word x) const{  
  8.         int i;  
  9.         for(i=0; i<5; i++)  
  10.             if(a[i] != x.a[i]) return a[i] < x.a[i];  
  11.     }  
  12. };  
  13.   
  14. word tmp, list[500020];  
  15. bool chk[500020], rEnd;  
  16.   
  17. int n, pre[105], suf[105], first[105], cnt[105];  
  18. int start, end, out;  
  19.   
  20. int res[500020], rFull=0;  
  21.   
  22. std::vector < int > vec[105];  
  23.   
  24. void print(int index){  
  25.     int i;  
  26.     for(i=0; i<5; i++){  
  27.         if(list[index].a[i] < 10) printf("0");  
  28.         printf("%d", list[index].a[i]);  
  29.     }  
  30.     printf("\n");  
  31. }  
  32.   
  33. void findPath(int target){  
  34.     if(rEnd) return;  
  35.     int i;  
  36.     if(rFull == n){  
  37.         for(i=0; i<n; i++)  
  38.             print(res[i]);  
  39.         rEnd = 1;  
  40.         return;  
  41.     }  
  42.     for(i=0; i<vec[target].size() && !rEnd; i++){  
  43.         if(!chk[vec[target][i]]){  
  44.             chk[vec[target][i]] = 1;  
  45.             res[rFull++] = vec[target][i];  
  46.             findPath(list[vec[target][i]].a[4]);  
  47.             rFull--;  
  48.             chk[vec[target][i]] = 0;  
  49.         }  
  50.     }  
  51. }  
  52.   
  53. int main(){  
  54.     scanf("%d", &n);  
  55.   
  56.     int i;  
  57.     for(i=0; i<n; i++){  
  58.         scanf("%2d%2d%2d%2d%2d", &tmp.a[0], &tmp.a[1], &tmp.a[2], &tmp.a[3], &tmp.a[4]);  
  59.         list[i] = tmp;  
  60.         pre[tmp.a[0]]++;  
  61.         suf[tmp.a[4]]++;  
  62.     }  
  63.   
  64.     std::sort(list, list+n);  
  65.       
  66.     start=end=-1;  
  67.     for(i=0; i<100; i++){  
  68.         first[i] = -1;  
  69.         if(pre[i] == suf[i]+1){  
  70.             if(start == -1) start = i;  
  71.             else {  
  72.                 printf("impossible\n");  
  73.                 return 0;  
  74.             }  
  75.         } else if(suf[i] == pre[i]+1){  
  76.             if(end == -1) end = i;  
  77.             else {  
  78.                 printf("impossible\n");  
  79.                 return 0;  
  80.             }  
  81.         } else if(suf[i] != pre[i]){  
  82.             printf("impossible\n");  
  83.             return 0;  
  84.         }  
  85.     }  
  86.   
  87.     int last=list[0].a[0];  
  88.     first[list[0].a[0]] = 0;  
  89.     for(i=1; i<n; i++){  
  90.         if(list[i].a[0] != last){  
  91.             last = list[i].a[0];  
  92.             first[list[i].a[0]] = i;  
  93.         }  
  94.     }  
  95.   
  96.     last = start;  
  97.     while(rFull < n){  
  98.         if(list[first[last]+cnt[last]].a[0] != last)  
  99.             break;  
  100.         res[rFull++] = first[last]+cnt[last];  
  101.         cnt[last]++;  
  102.         last = list[first[last]+cnt[last]-1].a[4];  
  103.     }  
  104.   
  105.     if(rFull == n)  
  106.         for(i=0; i<rFull; i++)  
  107.             print(res[i]);  
  108.     else {  
  109.         rFull = 0;  
  110.         for(i=0; i<n; i++)  
  111.             vec[list[i].a[0]].push_back(i);  
  112.         findPath(start);  
  113.     }  
  114.   
  115.     return 0;  
  116. }  
  117.       

'; print "
Here is another solution 4. Word Game(by dijkstra)"; print '
  1. #include<stdio.h>  
  2. #include<stdlib.h>            // by dijkstra  
  3. #include<vector>  
  4. struct WORD{int a,b,c;} w[500010]={0}, sol[500010]={0};  
  5. int compare(const void*a, const void*b)  
  6. {  
  7.     WORD *pa=(WORD *)a;  
  8.     WORD *pb=(WORD *)b;  
  9.     if(pa->a==pb->a && pa->b == pb->b)  
  10.         return pa->c - pb->c;  
  11.     else if(pa->a==pb->a)  
  12.         return pa->b - pb->b;  
  13.     return pa->a-pb->a;  
  14. }  
  15. std::vector<WORD> G[110];  
  16. int pre[110]={0}, post[110]={0},st,n;  
  17. int chk[110][500010]={0}, flag;  
  18. void dfs(WORD v,int id, int ed)  
  19. {  
  20.     int i;  
  21.     if(flag) return;  
  22.     if(id==ed-1)  
  23.     {  
  24.         for(i=0;i<ed-1;i++)  
  25.             printf("%02d%06d%02d\n",sol[i].a,sol[i].b,sol[i].c);  
  26.         printf("%02d%06d%02d\n",v.a,v.b,v.c);  
  27.         flag=1;  
  28.         return;  
  29.     }  
  30.     sol[id]=v;  
  31.     for(i=0;i<G[v.c].size();i++)  
  32.         if(!chk[v.c][i]){   
  33.             chk[v.c][i]=1;  
  34.             dfs(G[v.c][i],id+1,n);  
  35.             chk[v.c][i]=0;  
  36.         }  
  37. }  
  38. main()  
  39. {  
  40.     int i, c, l=0;  
  41.     scanf("%d",&n);  
  42.     for(i=0;i<n;i++)  
  43.     {  
  44.         scanf("%02d%06d%02d",&w[i].a,&w[i].b,&w[i].c);  
  45.         pre[w[i].a]++,post[w[i].c]++;  
  46.     }  
  47.     qsort(w,n,sizeof(WORD),compare);  
  48.     for(i=0;i<100;i++) if(pre[i]-post[i]>0) break;st=i;  
  49.     for(i=c=0;i<100;i++) while(w[c].a==i) G[i].push_back(w[c++]);  
  50.     for(i=0;i<G[st].size();i++)  
  51.         chk[st][i]=1,dfs(G[st][i],0,n),chk[st][i]=0;  
  52.     return 0;  
  53. }  
  54.       

'; print "
�� �ع��� �м��Ͽ� ������ �����սô�. ���� ��ϵǸ� �����ϼ���!!"; print ''; ?>