������ �غ����� ���ǰ��翡�� ������ �ֽñ� �ٶ��ϴ�.
";
print "
���� : o - Accepted, x - Wrong Answer, s - signal out(runtime error), t - Time Limit Exceeded
";
print "
Gold Medal - �� ���̶� ������ �������� 10%, Silver Medal - �������� 20%, Bronze Medal - �������� 30%
";
print "[ Winner!! ] (614pts)
: gs11008
";
print "
Gold Medal List!! (over 420pts)
: gs11008, gs12065, dijkstra, teram, gs10107, gs12059, gs12117
";
print "
Silver Medal List (over 308pts)
: issac, xxxxx, kk1401, seotos, gs12122, ainta, ryanchl, gs11135, ajou709
";
print "
Bronze Medal List (over 218pts)
: gs12047, jyj0312, gs12120, gs11098, gs11028, gs11117, gs11018, commaster0, gs12116, gs11103, woo960131, gs12115, mufflin, gs10102, gs12019
";
print "��ü ����ǥ
";
$dir="/var/www/bbs/moi/11st/";
$pnum = 5;
$files1 = scandir($dir);
$number=1;
$iuser = array();
$ip1 = array();
$ip2 = array();
$ip3 = array();
$ip4 = array();
$ip5 = 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)
{
$fp = fopen("./$files1[$i].tm", "r");
if($fp==NULL) print "can't open!!";
$buffer = fread($fp, filesize("./$files1[$i].tm"));
$solve = explode("\n", $buffer);
$ftime = $solve[0];
//print "./$files1[$i].tm($ftime,$fp)[".time()."]
";
$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;
$ttt = 18600-(time()-$ftime);
$hh=($ttt-($ttt%3600))/3600;
$mm=(($ttt-$hh*3600)-(($ttt-$hh*3600)%60))/60;
$ss = intval($ttt-(time()-$ftime))%60;
if(time()-$ftime <= 15000) $iuser[$number] = "".$iuser[$number]."(".$hh."h".$mm."m)";
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==1) $score += 16+($j*0.001);
else if($j==2) $score += 18+($j*0.001);
else if($j==3) $score += 18.2+($j*0.001);
else if($j==4) $score += 22+($j*0.001);
else if($j==5) $score += 12+($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 if($j==4) $ip4[$number] = $resres;
else $ip5[$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;
$tttt=$ip5[$i];$ip5[$i]=$ip5[$j];$ip5[$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 (������ ��쿡 5, 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 "";
}
print "
Rank
|
user
|
Faucet (160)
|
Rope Cutting (180)
|
Virus (200)
|
Polygon (220)
|
Festival (240)
|
Score
|
'.($rank[$i]+1).' | '.$iuser[$i].' | '.$ip1[$i].' | '.$ip2[$i].' | '.$ip3[$i].' | '.$ip4[$i].' | '.$ip5[$i].' | '.(floor($isc[$i])).' |
";
print "�̹� ��ȸ�� �����Ͻ� ".($number)."�� ��� �����ϼ̽��ϴ�!! ���� �濬�� ����ϼ���~
";
print "������ ��ȸ�� �ȴٸ� ����ǰ�� �غ��� ^^;";
print "
Here is some User's perfact Solution!!
1. Faucet (by dijkstra)";
print '- #include<stdio.h>
- main()
- {
- int i,n;
- scanf("%d",&n);
- for(i=1;i*i<=n;i++);
- printf("%d",i-1);
- }
#include<stdio.h>
main() // by dijkstra
{
int i,n;
scanf("%d",&n);
for(i=1;i*i<=n;i++);
printf("%d",i-1);
}
';
print "
2. Rope cutting (by gs12065) ";
print '- #include <stdio.h>
- #include <algorithm>
-
- #define MAX 123456789 // by gs12065 (O(n^3) DP MAX n is 50)
-
- int length, n, pos[55], dp[55][55];
-
- int main(){
- scanf("%d%d", &length, &n);
-
- int i, j, k;
- pos[0] = 0;
- for(i=1; i<=n; i++) scanf("%d", &pos[i]);
- pos[n+1] = length;
-
- std::sort(pos, pos+n+2);
-
- for(i=2; i<=n+1; i++){
- for(j=0; j+i<=n+1; j++){
- dp[j][j+i] = MAX;
- for(k=1; k<i; k++){
- dp[j][j+i] =
- std::min(dp[j][j+i], pos[j+i]-pos[j]+dp[j][j+k]+dp[j+k][j+i]);
- }
- }
- }
-
- printf("%d\n", dp[0][n+1]);
-
- return 0;
- }
#include <stdio.h>
#include <algorithm>
#define MAX 123456789 // by gs12065 (O(n^3) DP MAX n is 50)
int length, n, pos[55], dp[55][55];
int main(){
scanf("%d%d", &length, &n);
int i, j, k;
pos[0] = 0;
for(i=1; i<=n; i++) scanf("%d", &pos[i]);
pos[n+1] = length;
std::sort(pos, pos+n+2);
for(i=2; i<=n+1; i++){
for(j=0; j+i<=n+1; j++){
dp[j][j+i] = MAX;
for(k=1; k<i; k++){
dp[j][j+i] =
std::min(dp[j][j+i], pos[j+i]-pos[j]+dp[j][j+k]+dp[j+k][j+i]);
}
}
}
printf("%d\n", dp[0][n+1]);
return 0;
}
';
print "
Here is another solution (by gs12117) ";
print '- #include<stdio.h>
- int line[1010];
- int ce[1010][1010];
- int cut(int s,int e){
- if(ce[s][e]>0)return ce[s][e];
- int i,energy=999999999;
- for(i=s+1;i<e;i++){
- if(line[i]==1){
- if(energy>cut(s,i)+cut(i,e)){
- energy=cut(s,i)+cut(i,e);
- }
- }
- }
- if(energy==999999999)energy=0;
- ce[s][e]=energy+e-s;
- return ce[s][e];
- }
- int main(){
- int a,b,c,i;
- scanf("%d%d",&a,&b);
- for(i=0;i<b;i++){
- scanf("%d",&c);
- line[c]=1;
- }
- printf("%d",cut(0,a)-a);
- }
#include<stdio.h>
int line[1010];
int ce[1010][1010]; // gs12117 (O(L^2) Memoization(DP) MAX L is 1000)
int cut(int s,int e){
if(ce[s][e]>0)return ce[s][e];
int i,energy=999999999;
for(i=s+1;i<e;i++){
if(line[i]==1){
if(energy>cut(s,i)+cut(i,e)){
energy=cut(s,i)+cut(i,e);
}
}
}
if(energy==999999999)energy=0;
ce[s][e]=energy+e-s;
return ce[s][e];
}
int main(){
int a,b,c,i;
scanf("%d%d",&a,&b);
for(i=0;i<b;i++){
scanf("%d",&c);
line[c]=1;
}
printf("%d",cut(0,a)-a);
}
';
print "
3. Virus (by k5888200)
";
print'- #include <stdio.h>
- #include <math.h>
- #include <algorithm>
- #define MIN(x,y) ((x)<(y)?(x):(y))
-
- int n;
- double ANS;
-
- struct X{
- double x,y;
- }a[10005];
-
- bool cmp_x(X aa, X bb){
- if(aa.x!=bb.x) return aa.x<bb.x;
- return aa.y<bb.y;
- }
- bool cmp_y(X aa, X bb){
- if(aa.y!=bb.y) return aa.y<bb.y;
- return aa.x<bb.x;
- }
-
- double len(X aa, X bb){return sqrt((aa.x-bb.x)*(aa.x-bb.x)+(aa.y-bb.y)*(aa.y-bb.y));}
-
-
- double f(int left, int right){
- if(left==right) return ANS;
- if(left+1==right) return len(a[left],a[right]);
-
- double min1, min2, min, Min;
- int mid;
- mid=(left+right)>>1;
-
- min1=f(left,mid);
- printf("",min1);
- min2=f(mid+1,right);
- ANS=min=Min=MIN(min1,min2);
-
- int i,j,k,l;
-
- for(i=mid;i>left;i--) if(a[mid].x-min>a[i].x) break; left=i+1;
- for(i=mid;i<=right;i++) if(a[i].x>a[mid].x+min) break; right=i-1;
-
-
- std::sort(a+left,a+right+1,cmp_y);
-
- for(i=j=left;j<=right;j++){
- while(a[j+1].y<a[i].y+min && j+1<=right) j++;
- for(k=i;k<=j;k++){
- for(l=k+1;l<=j;l++){
- Min=MIN(Min,len(a[k],a[l]));
- }
- }
-
- }
-
- std::sort(a+left,a+right+1,cmp_x);
-
- return Min;
- }
- int main(){
- int i;
- scanf("%d",&n);
- for(i=1;i<=n;i++) scanf("%lf%lf",&a[i].x,&a[i].y);
- std::sort(a+1,a+1+n,cmp_x);
- ANS=len(a[1],a[2]);
- printf("%.2lf",f(1,n));
- }
#include <stdio.h>
#include <math.h>
#include <algorithm>
#define MIN(x,y) ((x)<(y)?(x):(y))
int n;
double ANS; // by k5888200 (Divide & Conquer Solution)
struct X{
double x,y;
}a[10005];
bool cmp_x(X aa, X bb){
if(aa.x!=bb.x) return aa.x<bb.x;
return aa.y<bb.y;
}
bool cmp_y(X aa, X bb){
if(aa.y!=bb.y) return aa.y<bb.y;
return aa.x<bb.x;
}
double len(X aa, X bb){return sqrt((aa.x-bb.x)*(aa.x-bb.x)+(aa.y-bb.y)*(aa.y-bb.y));}
double f(int left, int right){
if(left==right) return ANS;
if(left+1==right) return len(a[left],a[right]);
double min1, min2, min, Min;
int mid;
mid=(left+right)>>1;
min1=f(left,mid);
printf("",min1);
min2=f(mid+1,right);
ANS=min=Min=MIN(min1,min2);
int i,j,k,l;
for(i=mid;i>left;i--) if(a[mid].x-min>a[i].x) break; left=i+1;
for(i=mid;i<=right;i++) if(a[i].x>a[mid].x+min) break; right=i-1;
std::sort(a+left,a+right+1,cmp_y);
for(i=j=left;j<=right;j++){
while(a[j+1].y<a[i].y+min && j+1<=right) j++;
for(k=i;k<=j;k++){
for(l=k+1;l<=j;l++){
Min=MIN(Min,len(a[k],a[l]));
}
}
}
std::sort(a+left,a+right+1,cmp_x);
return Min;
}
int main(){
int i;
scanf("%d",&n);
for(i=1;i<=n;i++) scanf("%lf%lf",&a[i].x,&a[i].y);
std::sort(a+1,a+1+n,cmp_x);
ANS=len(a[1],a[2]);
printf("%.2lf",f(1,n));
}
';
print "
4. Polygon (by gs11008)
";
print'- #include<stdio.h>
- #include<memory.h>
- int pre,n,qqq[510][2],x[510],chk[510],dap=1<<30,lll[510],z;
- struct data{
- int a,b;
- } indextree[1<<12];
-
- int i,j,maxx;
-
- int f(int a,int b){
- int M=0;
- while(a<b){
- if(~b&1){
- if(M<indextree[b].b)
- M=indextree[b].b;
- b--;
- }
- a>>=1,b>>=1;
- }
- if(a==b&&M<indextree[a].b)M=indextree[a].b;
- return M;
- }
- int main(){
- scanf("%d",&n);
- for(i=1;i<=n;i++)scanf("%d%d",qqq[i],qqq[i]+1);
- pre=x[0]=chk[1]=1;
- for(i=1;i<n;i++){
- if(chk[qqq[pre][0]]==0){
- chk[qqq[pre][0]]=1;
- x[i]=qqq[pre][0];
- pre=qqq[pre][0];
- }
- else if(chk[qqq[pre][1]]==0){
- chk[qqq[pre][1]]=1;
- x[i]=qqq[pre][1];
- pre=qqq[pre][1];
- }
- else break;
- }
- if(i!=n || (qqq[x[n-1]][0]!=1 && qqq[x[n-1]][1]!=1))return printf("-1");
-
- for(z=0;z<n;z++){
- memset(indextree,0,sizeof(indextree));
- for(i=0;i<n;i++)
- lll[i]=x[(i+z)%n];
- int p;
- for(p=1;p<=n;p*=2);
- for(i=0;i<n;i++){
- int t=p+lll[i]-1;
- indextree[t].a=1;
- indextree[t].b=f(p,t-1)+1;
- for(j=t;j>1;j>>=1){
- if(indextree[j>>1].a==0)indextree[j>>1]=indextree[j];
- else if(indextree[j>>1].b<indextree[j].b)indextree[j>>1]=indextree[j];
- }
- }
- if(n-indextree[1].b<dap)dap=n-indextree[1].b;
- }
- for(i=0;i<n/2;i++){
- int t=x[i];
- x[i]=x[n-i-1];
- x[n-i-1]=t;
- }
- for(z=0;z<n;z++){
- memset(indextree,0,sizeof(indextree));
- for(i=0;i<n;i++)
- lll[i]=x[(i+z)%n];
- int p;
- for(p=1;p<=n;p*=2);
- for(i=0;i<n;i++){
- int t=p+lll[i]-1;
- indextree[t].a=1;
- indextree[t].b=f(p,t-1)+1;
- for(j=t;j>1;j>>=1){
- if(indextree[j>>1].a==0)indextree[j>>1]=indextree[j];
- else if(indextree[j>>1].b<indextree[j].b)indextree[j>>1]=indextree[j];
- }
- }
- if(n-indextree[1].b<dap)dap=n-indextree[1].b;
- }
- printf("%d",dap);
- }
#include<stdio.h>
#include<memory.h>
int pre,n,qqq[510][2],x[510],chk[510],dap=1<<30,lll[510],z;
struct data{
int a,b; // by gs11008 (using IndexTree) almost Perfect
} indextree[1<<12];
int i,j,maxx;
int f(int a,int b){
int M=0;
while(a<b){
if(~b&1){
if(M<indextree[b].b)
M=indextree[b].b;
b--;
}
a>>=1,b>>=1;
}
if(a==b&&M<indextree[a].b)M=indextree[a].b;
return M;
}
int main(){
scanf("%d",&n);
for(i=1;i<=n;i++)scanf("%d%d",qqq[i],qqq[i]+1);
pre=x[0]=chk[1]=1;
for(i=1;i<n;i++){
if(chk[qqq[pre][0]]==0){
chk[qqq[pre][0]]=1;
x[i]=qqq[pre][0];
pre=qqq[pre][0];
}
else if(chk[qqq[pre][1]]==0){
chk[qqq[pre][1]]=1;
x[i]=qqq[pre][1];
pre=qqq[pre][1];
}
else break;
}
if(i!=n || (qqq[x[n-1]][0]!=1 && qqq[x[n-1]][1]!=1))return printf("-1");
for(z=0;z<n;z++){
memset(indextree,0,sizeof(indextree));
for(i=0;i<n;i++)
lll[i]=x[(i+z)%n];
int p;
for(p=1;p<=n;p*=2);
for(i=0;i<n;i++){
int t=p+lll[i]-1;
indextree[t].a=1;
indextree[t].b=f(p,t-1)+1;
for(j=t;j>1;j>>=1){
if(indextree[j>>1].a==0)indextree[j>>1]=indextree[j];
else if(indextree[j>>1].b<indextree[j].b)indextree[j>>1]=indextree[j];
}
}
if(n-indextree[1].b<dap)dap=n-indextree[1].b;
}
for(i=0;i<n/2;i++){
int t=x[i];
x[i]=x[n-i-1];
x[n-i-1]=t;
}
for(z=0;z<n;z++){
memset(indextree,0,sizeof(indextree));
for(i=0;i<n;i++)
lll[i]=x[(i+z)%n];
int p;
for(p=1;p<=n;p*=2);
for(i=0;i<n;i++){
int t=p+lll[i]-1;
indextree[t].a=1;
indextree[t].b=f(p,t-1)+1;
for(j=t;j>1;j>>=1){
if(indextree[j>>1].a==0)indextree[j>>1]=indextree[j];
else if(indextree[j>>1].b<indextree[j].b)indextree[j>>1]=indextree[j];
}
}
if(n-indextree[1].b<dap)dap=n-indextree[1].b;
}
printf("%d",dap);
}
';
print "
5���� ����� Ǯ���� ����� �����ϴ�. �����ϼ���!!! �� �ع��� �м��Ͽ� ������ �����սô�. ���� ��ϵǸ� �����ϼ���!!";
print '';
?>