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


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

"; print "Gold Medal : august14, gs10107, gs10087
"; print "Silver Medal : myungwoo, wclee2265, gs12065, zlzmsrhak56, teram
"; print "Bronze Medal : pl0892029, ryanch1, shinism, kk1401, commaster0, cjmp1

"; $dir="/var/www/bbs/moi/3st/"; $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).''; $score += 25+($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 Number Card(250) Commuting Road(250) Direction Deaf(250) Good Patten(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!!


1. Number Card

CHICK 4�� �ع��� �����ϼ���"; print "

2. Commuting Road (by commaster0)"; print '
  1. #include<cstdio>  
  2. long long int a[102][102],b[102][102],c[102][102],d[102][102];  
  3. int main()  
  4. {  
  5.     long long int w,h,i,j;  
  6.     scanf("%lld%lld",&w,&h);  
  7.     for(i=1;i<=100;i++)  
  8.     {  
  9.         b[1][i]=1;  
  10.         d[i][1]=1;  
  11.     }  
  12.     for(i=4;i<=100;i++)  
  13.     {  
  14.         for(j=2;j<=i-2;j++)  
  15.         {  
  16.             a[j][i-j]=d[j][i-j-1]%100000;  
  17.             b[j][i-j]=a[j][i-j-1]%100000+b[j][i-j-1]%100000;  
  18.             c[j][i-j]=b[j-1][i-j]%100000;  
  19.             d[j][i-j]=c[j-1][i-j]%100000+d[j-1][i-j]%100000;  
  20.         }  
  21.     }  
  22.     for(j=2;j<=99;j++)  
  23.         {  
  24.             a[j][101-j]=d[j][101-j-1]%100000;  
  25.             b[j][101-j]=a[j][101-j-1]%100000+b[j][101-j-1]%100000;  
  26.             c[j][101-j]=b[j-1][101-j]%100000;  
  27.             d[j][101-j]=c[j-1][101-j]%100000+d[j-1][101-j]%100000;  
  28.         }  
  29.     for(i=102;i<=200;i++)  
  30.     {  
  31.         for(j=i-100;j<=100;j++)  
  32.         {  
  33.             a[j][i-j]=d[j][i-j-1]%100000;  
  34.             b[j][i-j]=a[j][i-j-1]+b[j][i-j-1]%100000;  
  35.             c[j][i-j]=b[j-1][i-j]%100000;  
  36.             d[j][i-j]=c[j-1][i-j]%100000+d[j-1][i-j]%100000;  
  37.         }  
  38.     }  
  39.     printf("%lld",(a[w][h]+b[w][h]+c[w][h]+d[w][h])%100000);  
  40.     return 0;  
  41. }     

'; print "

Here is another solution 2. Commuting Road(by teram)"; print '
  1. #include<stdio.h>  
  2. #define mod 100000  
  3.   
  4. struct ROAD {  
  5.     int left;  
  6.     int up;  
  7. } road[110][110];  
  8.   
  9. int main() {  
  10.   
  11.     int w,h;  
  12.     int i,j;  
  13.       
  14.     scanf("%d %d", &w, &h);  
  15.     for(i=1 ; i<=w ; i++)  
  16.         road[1][i].left=1;  
  17.     for(i=1 ; i<=h ; i++)  
  18.         road[i][1].up=1;  
  19.   
  20.     for(i=2 ; i<=h ; i++) {  
  21.         for(j=2 ; j<=w ; j++) {  
  22.             road[i][j].left=road[i][j-1].left+road[i-1][j-1].up;  
  23.             road[i][j].up=road[i-1][j].up+road[i-1][j-1].left;  
  24.             road[i][j].left %= mod, road[i][j].up %= mod;  
  25.         }  
  26.     }  
  27.   
  28.     printf("%d\n", (road[h][w].left+road[h][w].up)%mod);  
  29.   
  30.     return 0;  
  31. }  

'; print "
3, 4�� ������ �����ڰ� �����ϴ�. ��� �� �� ������ TLE���� �� ���� �ޱ� ����� ���������ϴ�. TLE�� �ɷ����� ���� ������ �� �ҽ��ڵ带 �����մϴ�. �ð��� ����ϴٸ� ��� ���� ���� �� �ִ� solution���Դϴ�.

"; print "
3. Direction Deaf(by wclee2265)"; print '
  1. #include <stdio.h>      //Dynamic Programming Solution  
  2.   
  3. #define N 15  
  4. #define M 15  
  5.   
  6. FILE *in=stdin;  
  7. FILE *out=stdout;  
  8.   
  9. int n,m,map[N][M],ans,cnt,mat[30][30],dy[1200000][22];  
  10.   
  11. struct data  
  12. {  
  13.     int x,y;  
  14. }a[30];  
  15.   
  16. void process()  
  17. {  
  18.     int i,j,k,x;  
  19.     for(i=1;i<(1<<cnt);i++)  
  20.     {  
  21.         for(j=1;j<=cnt;j++)  
  22.         {  
  23.             if((i>>(j-1))&1)  
  24.             {  
  25.                 x=i^(1<<(j-1));  
  26.                 if(x==0)  
  27.                 {  
  28.                     if(mat[0][j]!=-1) dy[i][j]=1;  
  29.                 }  
  30.                 else  
  31.                 {  
  32.                     for(k=1;k<=cnt;k++)  
  33.                     {  
  34.                         if((x>>(k-1))&1 && mat[j][k]!=-1 && (mat[j][k]&x)==0)   
  35.                             dy[i][j]+=dy[x][k];  
  36.                     }  
  37.                 }  
  38.             }  
  39.         }  
  40.     }  
  41.     for(i=1;i<=cnt;i++)  
  42.     {  
  43.         if(mat[i][0]==0)   
  44.             ans+=dy[(1<<cnt)-1][i];  
  45.     }  
  46. }  
  47.   
  48. bool check_in(int l, int r, int t)  
  49. {  
  50.     if(l<r)  
  51.     {  
  52.         if(l<t && t<r) return true;  
  53.         return false;  
  54.     }  
  55.     if(r<t && t<l) return true;  
  56.     return false;  
  57. }  
  58.   
  59. void get_house()  
  60. {  
  61.     int i,j,k;  
  62.     for(i=1;i<=n;i++)  
  63.     {  
  64.         for(j=1;j<=m;j++)  
  65.         {  
  66.             if(map[i][j]==1)  
  67.             {  
  68.                 cnt++;  
  69.                 a[cnt].y=i;  
  70.                 a[cnt].x=j;  
  71.             }  
  72.             else if(map[i][j]==2)  
  73.             {  
  74.                 a[0].y=i;  
  75.                 a[0].x=j;  
  76.             }  
  77.         }  
  78.     }  
  79.     for(i=0;i<=cnt;i++)  
  80.     {  
  81.         for(j=i+1;j<=cnt;j++)  
  82.         {  
  83.             if(a[i].x!=a[j].x && a[i].y!=a[j].y) mat[i][j]=mat[j][i]=-1;  
  84.             if(a[i].x==a[j].x)  
  85.             {  
  86.                 for(k=1;k<=cnt;k++)  
  87.                 {  
  88.                     if(a[k].x==a[i].x && check_in(a[i].y,a[j].y,a[k].y))  
  89.                     {  
  90.                         mat[i][j]|=(1<<(k-1));  
  91.                         mat[j][i]|=(1<<(k-1));  
  92.                     }  
  93.                 }  
  94.             }  
  95.             else  
  96.             {  
  97.                 for(k=1;k<=cnt;k++)  
  98.                 {  
  99.                     if(a[k].y==a[i].y && check_in(a[i].x,a[j].x,a[k].x))  
  100.                     {  
  101.                         mat[i][j]|=(1<<(k-1));  
  102.                         mat[j][i]|=(1<<(k-1));  
  103.                     }  
  104.                 }  
  105.             }  
  106.         }  
  107.     }  
  108. }  
  109.   
  110. int main()  
  111. {  
  112.     int i,j;  
  113.     fscanf(in,"%d %d",&m,&n);  
  114.     for(i=1;i<=n;i++)  
  115.     {  
  116.         for(j=1;j<=m;j++) fscanf(in,"%d",&map[i][j]);  
  117.     }  
  118.     get_house();  
  119.     process();  
  120.     fprintf(out,"%d",ans);  
  121.     fclose(in);  
  122.     fclose(out);  
  123.     return 0;  
  124. }  

'; print "
3. Here is another solution Direction Deaf(by gs12065)"; print '
  1. #include <stdio.h>  
  2. #include <vector>  
  3.   
  4. struct pos{  
  5.     int x,y;  
  6. };  
  7.   
  8. int n, m;  
  9. int map[12][12], numHouse, res;  
  10. bool chk[12][12];  
  11.   
  12. pos church;  
  13. std::vector < pos > dir[5][12][12];  
  14.   
  15. void fly(int x, int y, int cnt){  
  16.     if(numHouse == cnt){  
  17.         if(x == church.x || y == church.y) res++;  
  18.         return;  
  19.     }  
  20.     int i, j;  
  21.     for(i=0; i<4; i++){  
  22.         for(j=0; j<dir[i][y][x].size(); j++){  
  23.             if(!chk[dir[i][y][x][j].y][dir[i][y][x][j].x]){  
  24.                 chk[dir[i][y][x][j].y][dir[i][y][x][j].x] = 1;  
  25.                 fly(dir[i][y][x][j].x, dir[i][y][x][j].y, cnt+1);  
  26.                 chk[dir[i][y][x][j].y][dir[i][y][x][j].x] = 0;  
  27.                 break;  
  28.             }  
  29.         }  
  30.     }  
  31. }  
  32.   
  33. int main(){  
  34.     scanf("%d%d", &m, &n);  
  35.   
  36.     int i, j, k;  
  37.     for(i=1; i<=n; i++){  
  38.         for(j=1; j<=m; j++){  
  39.             scanf("%d", &map[i][j]);  
  40.             if(map[i][j] == 2) church.x = j, church.y = i;  
  41.             else if(map[i][j] == 1) numHouse++;  
  42.         }  
  43.     }  
  44.   
  45.     pos tmp;  
  46.     for(i=1; i<=n; i++){  
  47.         tmp.y = i;  
  48.         for(j=1; j<=m; j++){  
  49.             if(map[i][j] == 1){  
  50.                 tmp.x = j;  
  51.                 for(k=j-1; k>=1; k--)  
  52.                     if(map[i][k] > 0) dir[0][i][k].push_back(tmp);  
  53.             }  
  54.         }  
  55.         for(j=m; j>=1; j--){  
  56.             if(map[i][j] == 1){  
  57.                 tmp.x = j;  
  58.                 for(k=j+1; k<=m; k++)  
  59.                     if(map[i][k] > 0) dir[1][i][k].push_back(tmp);  
  60.             }  
  61.         }  
  62.     }  
  63.     for(j=1; j<=m; j++){  
  64.         tmp.x = j;  
  65.         for(i=1; i<=n; i++){  
  66.             if(map[i][j] == 1){  
  67.                 tmp.y = i;  
  68.                 for(k=i-1; k>=1; k--)  
  69.                     if(map[k][j] > 0) dir[2][k][j].push_back(tmp);  
  70.             }  
  71.         }  
  72.         for(i=n; i>=1; i--){  
  73.             if(map[i][j] == 1){  
  74.                 tmp.y = i;  
  75.                 for(k=i+1; k<=n; k++)  
  76.                     if(map[k][j] > 0) dir[3][k][j].push_back(tmp);  
  77.             }  
  78.         }  
  79.     }  
  80.   
  81.     fly(church.x, church.y, 0);  
  82.   
  83.     printf("%d\n", res);  
  84.   
  85.     return 0;  
  86. }  

'; print "

4. Good Pattern(by august14)"; print '
  1.       
  2. #include <stdio.h>    // Best solution for Good Pattern By Winner!!  
  3.                                                  // using mem cutting 2^21*2^21 -> 2*2^21  
  4. const int mod = 100000;  
  5. int N,M,C; char S[22][22];  
  6. int D[2][3][1<<21],f;  
  7.   
  8. void sum(int& a, int b){a = (a + b) % mod;}  
  9.   
  10. int main()  
  11. {  
  12.     int i,j,k,c;  
  13.   
  14.     scanf ("%d %d",&N,&M); C = 1;  
  15.     for (i=0;i<N;i++){  
  16.         scanf ("%s",S[i]);  
  17.         for (j=0;j<M;j++){  
  18.             if (S[i][j] == '?') C = (C * 3) % mod;  
  19.         }  
  20.     }  
  21.   
  22.     D[1][0][0] = 1;  
  23.     for (i=0;i<N;i++) for (j=0;j<M;j++){  
  24.         for (k=0;k<(1<<M);k++) D[f][0][k] = D[f][1][k] = D[f][2][k] = 0;  
  25.         for (k=0;k<(1<<M);k++){  
  26.             c = (D[!f][0][k] + D[!f][1][k] + D[!f][2][k]) % mod;  
  27.   
  28.             if (S[i][j] == 'K' || S[i][j] == '?') sum(D[f][0][k>>1],c);  
  29.             if ((S[i][j] == 'I' || S[i][j] == '?') && (k & 1) == 0) sum(D[f][2][k>>1],c);  
  30.             if (j == 0){  
  31.                 if (S[i][j] == 'O' || S[i][j] == '?') sum(D[f][1][k>>1],c);  
  32.             }  
  33.             else{  
  34.                 if(S[i][j] == 'O' || S[i][j] == '?'){  
  35.                     sum(D[f][1][k>>1],D[!f][1][k]+D[!f][2][k]);  
  36.                     sum(D[f][1][(k>>1)+(1<<(M-2))],D[!f][0][k]);  
  37.                 }  
  38.             }  
  39.         }  
  40.   
  41.         f = !f;  
  42.     }  
  43.   
  44.     c = 0;  
  45.     for (k=0;k<(1<<M);k++){  
  46.         c = (c + D[!f][0][k] + D[!f][1][k] + D[!f][2][k]) % mod;  
  47.     }  
  48.     printf ("%d",(C-c+mod)%mod);  
  49.   
  50.     return 0;  
  51. }  

'; /* print "

Here is solution 4. Comeback vault 101(by dijkstra)"; print '
  1. #include<stdio.h>                     // This is Dynamic Programming (named Bitonic Tour) best solution!!  
  2. #define max(a,b) (a>b?(a):(b))  
  3. int d[220][110][110],n,m;  
  4. int s[110][110];  
  5. main()  
  6. {  
  7.     int i,j,k;  
  8.     scanf("%d%d",&m,&n);  
  9.     for(i=1;i<=n;i++) for(j=1;j<=m;j++) scanf("%1d",&s[i][j]);  
  10.     for(i=1;i<=n;i++) for(j=1;j<=m;j++)   s[i][j]=s[i][j]==1?1:s[i][j]==0?0:-1;  
  11.     for(k=2,d[1][1][1]=s[1][1]+1;k<n+m;k++) for(i=1;i<=n;i++)  
  12.     {  
  13.         if(s[i][k-i+1]==-1) continue;  
  14.         for(j=i;j<=n;j++)  
  15.         {  
  16.             int score=0;  
  17.             if(i!=j) score = s[i][k-i+1]+s[j][k-j+1];  
  18.             else score = s[i][k-i+1];  
  19.             if(s[j][k-j+1]==-1) continue;  
  20.             d[k][i][j] = max(d[k-1][i-1][j],max(d[k-1][i][j-1],max(d[k-1][i][j],d[k-1][i-1][j-1])));  
  21.             d[k][i][j] = d[k][i][j]?d[k][i][j]+score:0;  
  22.         }  
  23.     }  
  24.     printf("%d\n",d[n+m-1][n][n]?d[n+m-1][n][n]-1:0);  
  25. }  


'; */ print "�� �ع��� �м��Ͽ� ������ �����սô�. �̹��� 3, 4���� �����ڰ� �����ϴ�. �Խõ� �ַ���� ������ ������ Discuss Board�� �ۼ��� �ֽø� ����� �帳�ϴ�."; print ''; ?>