アットウィキロゴ

あl

package th4;
 
 
public class pro {
 
    int s;
    int[] th=new int[101];
    int[] c=new int[101];
    int[] y=new int[101];
    int[] rank=new int[201];
     double[] us=new double[201];
  double[] du=new double[201];
     double delta;
     int[] count=new int[201];
     int number;
     int n;
 
    public static void main(String[] args) {
        pro test=new pro();
    }
 
    pro(){
 
        ps();
 
        delta=0.01;
 
      for(s=1;s<101;s++){  
      th[s]=10*s; 
      c[s]=5*s;
      y[s]=5*s;
      }  
 
      int tp;
 
 for(tp=1;tp<10000;tp++){
 
 for(s=1;s<101;s++){
 us[s]=u(c[s],y[s],th[s]);  
 }
 
 for(s=1;s<101;s++){
 du[s]=u(c[s]+1,y[s],th[s])-us[s];
 } 
 
for(s=1;s<101;s++){
du[s+100]=-(u(c[s],y[s]+1,th[s])-us[s]);  
}   
 
ranking();  
 
int tr,t,h,b1;
 
for(tr=1;tr<100;tr++){
 
b1=bud();
 
if(b1>-5)point();
 
if(b1<5)point2();
 
 
}
 
}
 
 
 
for(s=1;s<101;s++){ 
 System.out.println(c[s]+","+y[s]);
}
 
}
 
 
 void point(){
 int n,t,h;
 
n=select();
t=1;
if(n>100)t=2;
if(n>100)n=n-100;
h=0;
if(t==2)h=h+1;
if(y[n]>0)h=h+1;
if(h==2)y[n]=y[n]-1;
if(t==1)c[n]=c[n]+1;
 
 
    }
 int bud(){
 int b1;
     b1=0;
  for(s=1;s<101;s++){   
  b1=b1+y[s]-c[s];
  } 
 return b1;    
 }
 void point2(){
 int n,t,h;
 
n=rselect();
t=1;
if(n>100)t=2;
if(n>100)n=n-100;
h=0;
if(t==1)h=h+1;
if(c[n]>0)h=h+1;
if(h==2)c[n]=c[n]-1;
if(t==2)y[n]=y[n]+1;
 
 
    }
 
 
  void ps(){
 
      count[1]=200;
      for(s=2;s<201;s++){
    count[s]=count[s-1]+201-s;
      }
    number=count[200];
 
 
  }
 
 int select(){
 
 int n=(int)(number*Math.random());
 int sx;
 
 sx=1;
 for(s=1;s<201;s++){
 if(n>count[s])sx=s+1;    
 }    
 sx=rank[sx];
 return sx;
 }
 
 int rselect(){
 
 int n=(int)(number*Math.random());
 int sx;
 
 sx=1;
 for(s=1;s<201;s++){
 if(n>count[s])sx=s+1;    
 }    
 sx=rank[201-sx];
 return sx;
 }    
 
 
 void ranking(){ 
int r,s,sx,h; 
int[] ch=new int[201];
double maxu;
int t;
 
for(r=1;r<201;r++){ 
sx=0; 
maxu=-999; 
for(s=1;s<201;s++){ 
h=0; 
if(du[s]>maxu)h=h+1; 
if(ch[s]<50)h=h+1; 
if(h==2)maxu=du[s]; 
if(h==2)sx=s; 
}
rank[r]=sx; 
ch[sx]=100; 
}
 
 
}
 
double u(int c1,int y1,int th1){
double u1;
u1=Math.log(c1*delta)+Math.log(1-(double)y1/th1); 
return u1;
}
 
}
 
最終更新:2014年03月24日 13:36