package k;
import tool.*;
public class pro {
String[] data=new String[6000];
int s,datanumber;
String file;
double[] point=new double[600];
double[] px=new double[600];
double[] m=new double[700];
double[] v=new double[700];
int k;
double v1,minv;
int[] gotom=new int[700];
int[] gotov=new int[700];
int ks;
int[] mou=new int[700];
int[] val=new int[700];
int[] m2=new int[700];
int[] v2=new int[700];
int number;
public static void main(String[] args) {
pro test=new pro();
}
pro(){
file="data.txt";
readfile sub=new readfile();
sub.makedata(file,"UTF-8");
data=sub.data;
datanumber=sub.datanumber;
for(s=1;s<datanumber+1;s++){
point[s]=Double.parseDouble(data[s]);
}
for(s=2;s<7;s++){
m[s]=mfast(s);
v[s]=vfast(s);
}
for(s=7;s<datanumber+1;s++){
minv=mfast(s);
ks=0;
for(k=2;k<s-5;k++){
v1=seekm(s,k);
if(v1<minv)ks=k;
if(v1<minv)minv=v1;
}
m[s]=minv;
gotom[s]=ks;
minv=vfast(s);
ks=0;
for(k=2;k<s-5;k++){
v1=seekv(s,k);
if(v1<minv)ks=k;
if(v1<minv)minv=v1;
}
v[s]=minv;
gotov[s]=ks;
}
int s1,s2,mode,sx;
s2=datanumber;
mode=0;
sx=0;
while(mode<50){
s1=gotom[s2];
s2=gotov[s1];
if(s1<10)mode=100;
if(s2<10)mode=100;
sx=sx+1;
v2[sx]=s1;
m2[sx]=s1;
}
number=sx;
for(s=1;s<number+1;s++){
mou[s]=m2[number+1-s];
val[s]=v2[number+1-s];
}
s=1;
px[s]=point[s];
for(sx=2;sx<mou[s]+1;sx++){
px[sx]=point[sx];
if(point[s]<px[s-1])px[s]=px[s-1];
}
for(s=1;s<number;s++){
for(sx=mou[s]+1;sx<val[s]+1;sx++){
px[sx]=point[sx];
if(point[sx]>px[sx-1])px[sx]=px[sx-1];
}
for(sx=val[s]+1;sx<mou[s+1]+1;sx++){
px[sx]=point[sx];
if(point[sx]<px[sx-1])px[sx]=px[sx-1];
}
}
for(s=1;s<datanumber+1;s++){
System.out.println(s+","+point[s]+","+px[s]);
}
}
double seekm(int s,int k){
int sx;
double e1;
double[] p=new double[600];
p[k]=point[k];
for(sx=k+1;sx<s+1;sx++){
p[sx]=point[sx];
if(p[sx-1]>point[sx])p[sx]=p[sx-1];
}
e1=0;
for(sx=k+1;sx<s+1;sx++){
e1=e1+(point[sx]-p[sx])*(point[sx]-p[sx]);
}
e1=e1+v[k];
return e1;
}
double seekv(int s,int k){
int sx;
double e1;
double[] p=new double[600];
p[k]=point[k];
for(sx=k+1;sx<s+1;sx++){
p[sx]=point[sx];
if(p[sx-1]<point[sx])p[sx]=p[sx-1];
}
e1=0;
for(sx=k+1;sx<s+1;sx++){
e1=e1+(point[sx]-p[sx])*(point[sx]-p[sx]);
}
e1=e1+m[k];
return e1;
}
double mfast(int s){
int sx;
double e1;
double[] p=new double[600];
p[1]=point[1];
for(sx=2;sx<s+1;sx++){
p[sx]=point[sx];
if(p[sx-1]>point[sx])p[sx]=p[sx-1];
}
e1=0;
for(sx=1;sx<s+1;sx++){
e1=e1+(point[sx]-p[sx])*(point[sx]-p[sx]);
}
return e1;
}
double vfast(int s){
int sx;
double e1;
double[] p=new double[600];
p[1]=point[1];
for(sx=2;sx<s+1;sx++){
p[sx]=point[sx];
if(p[sx-1]<point[sx])p[sx]=p[sx-1];
}
e1=0;
for(sx=1;sx<s+1;sx++){
e1=e1+(point[sx]-p[sx])*(point[sx]-p[sx]);
}
return e1;
}
}
最終更新:2014年02月28日 05:07