class pro{
int s,sx,s1,s2,sx1,sx2;
double[][] a=new double[51][51];
int[] gr=new int[51];
int[][] route=new int[51][51];
int[] b=new int[51];
int[] rank=new int[51];
double mx,minmx,minr;
int t,z,h,r;
public static void main(String[] args){
pro test=new pro();
}
pro(){
for(s=1;s<51;s++){
for(sx=1;sx<51;sx++){
a[s][sx]=s*sx;
}
}
for(s=1;s<51;s++){
gr[s]=s;
}
for(s=1;s<51;s++){
route[50][s]=gr[s];
}
for(t=1;t<50;t++){
sx1=0;
sx2=0;
minmx=9999;
for(s1=1;s1<51;s1++){
for(s2=1;s2<51;s2++){
mx=met(s1,s2);
if(s1==s2)mx=9999;
if(mx<minmx)sx1=s1;
if(mx<minmx)sx2=s2;
if(mx<minmx)minmx=mx;
}
}
for(s=1;s<51;s++){
if(gr[s]==sx2)gr[s]=sx1;
}
for(s=1;s<51;s++){
route[50-t][s]=gr[s];
}
}
for(r=1;r<50;r++){
for(s=1;s<51;s++){
b[s]=0;
}
z=0;
t=1;
while(z<50){
minr=9999;
for(s=1;s<51;s++){
h=0;
if(minr>route[t][s])h=h+1;
if(b[s]<50)h=h+1;
if(rank[s]<1)h=h+1;
if(h==3)minr=route[t][s];
}
for(s=1;s<51;s++){
if(route[t][s]>minr)b[s]=100;
}
h=0;
for(s=1;s<51;s++){
if(b[s]<50)h=h+1;
}
if(h<2)z=100;
t=t+1;
}
for(s=1;s<51;s++){
if(b[s]<50)rank[s]=r;
}
}
for(s=1;s<51;s++){
System.out.println(rank[s]);
}
}
double met(int s1,int s2){
int t,tx,h;
double minx,mx;
minx=9999;
for(t=1;t<51;t++){
for(tx=1;tx<51;tx++){
mx=9999;
h=0;
if(gr[t]==s1)h=h+1;
if(gr[tx]==s2)h=h+1;
if(h==2)mx=a[t][tx];
if(mx<minx)minx=mx;
}
}
return minx;
}
}
最終更新:2011年06月23日 14:39