package delya;
import tool.readfile;
public class pro {
double[][] p=new double[3][3];
double[][] q=new double[3][3];
int[] point=new int[600];
int[] delta=new int[600];
double[][] v=new double[600][3];
int[][] gotok=new int[600][3];
int[] op=new int[600];
double[] vs=new double[600];
String[] data=new String[600];
int datanumber;
public static void main(String[] args) {
pro t=new pro();
}
pro(){
readfile sub3=new readfile();
sub3.makedata("d.txt","UTF-8");
data=sub3.data;
datanumber=sub3.datanumber;
int s;
point[1]=1;
vs[1]=Double.parseDouble(data[1]);
for(s=2;s<datanumber+1;s++){
double x1=Double.parseDouble(data[s-1]);
double x2=Double.parseDouble(data[s]);
point[s]=2;
if(x2>x1)point[s]=1;
vs[s]=x1;
}
p[1][1]=0.8;
p[2][2]=0.8;
p[1][2]=0.2;
p[2][1]=0.2;
q[1][1]=0.8;
q[2][2]=0.8;
q[1][2]=0.2;
q[2][1]=0.2;
int de;
for(de=1;de<101;de++){
int sx=point[1];
v[1][1]=p[1][sx];
v[1][2]=p[2][sx];
int tx;
for(s=2;s<datanumber+1;s++){
int p1=point[s];
for(sx=1;sx<3;sx++){
double u1=p[p1][sx];
double maxv=-999;
int sxs=0;
for(tx=1;tx<3;tx++){
double v1=v[s-1][tx]*u1*q[sx][tx];
if(v1>maxv)sxs=tx;
if(v1>maxv)maxv=v1;
}
gotok[s][sx]=sxs;
v[s][sx]=maxv;
}
}
sx=1;
if(v[datanumber][2]>v[datanumber][1])sx=2;
op[datanumber]=sx;
for(s=1;s<datanumber;s++){
sx=datanumber+1-s;
int k=op[sx];
op[sx-1]=gotok[sx][k];
}
int[][] count=new int[3][3];
int[][] ch=new int[3][3];
count[1][1]=0;
count[1][2]=0;
count[2][1]=0;
count[2][2]=0;
ch[1][1]=0;
ch[1][2]=0;
ch[2][1]=0;
ch[2][2]=0;
for(s=1;s<datanumber+1;s++){
int s1=point[s];
int s2=op[s];
count[s2][s1]=count[s2][s1]+1;
}
for(s=1;s<datanumber+1;s++){
int s1=op[s];
int s2=op[s+1];
ch[s1][s2]=ch[s1][s2]+1;
}
int c1=count[1][1]+count[1][2];
double p1=0;
if(c1>0)p1=100*count[1][1]/c1;
p1=p1/100;
if(p1<0.6)p1=0.6;
if(p1<0.9*p[1][1])p1=0.9*p[1][1];
if(p1>1.1*p[1][1])p1=1.1*p[1][1];
p[1][1]=p1;
p[1][2]=1-p1;
c1=count[2][1]+count[2][2];
p1=0;
if(c1>0)p1=100*count[2][2]/c1;
p1=p1/100;
if(p1<0.6)p1=0.6;
if(p1<0.9*p[2][2])p1=0.9*p[2][2];
if(p1>1.1*p[2][2])p1=1.1*p[2][2];
p[2][2]=p1;
p[2][1]=1-p1;
c1=ch[2][1]+ch[2][2];
p1=0;
if(c1>0)p1=100*ch[2][2]/c1;
p1=p1/100;
if(p1>0.9)p1=0.9;
if(p1<0.6)p1=0.6;
if(p1<0.9*q[2][2])p1=0.9*q[2][2];
if(p1>1.1*q[2][2])p1=1.1*q[2][2];
q[2][2]=p1;
q[2][1]=1-p1;
c1=ch[1][1]+ch[1][2];
p1=0;
if(c1>0)p1=100*ch[1][1]/c1;
p1=p1/100;
if(p1<0.6)p1=0.6;
if(p1>0.9)p1=0.9;
if(p1<0.9*q[1][1])p1=0.9*q[1][1];
if(p1>1.1*q[1][1])p1=1.1*q[1][1];
q[1][1]=p1;
q[1][2]=1-p1;
}
for(s=1;s<datanumber+1;s++){ ;
if(op[s]==1)System.out.println(s+","+110+","+vs[s]);
if(op[s]==2)System.out.println(s+","+90+","+vs[s]);
}
}
}
最終更新:2016年04月30日 00:55