import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;
public class Main6 {
static boolean is_right_overtaking_need(int j,car[] eachcar,int rightbefore,int []danger_times,int []not_danger_times){
double safety_dist=eachcar[j].sd+10;
double danger_dist=eachcar[j].sd;
if(rightbefore!=-1){
if(eachcar[rightbefore].dist-eachcar[j].dist<=safety_dist&&eachcar[rightbefore].v<eachcar[j].want_v){
if(eachcar[rightbefore].dist-eachcar[j].dist<danger_dist&&eachcar[j].lane==1){
//System.out.println("危险!");
danger_times[0]++;
}else{
not_danger_times[0]++;
}
return true;
}
return false;
}
return false;
}
static boolean is_left_overtaking_need(int j,car[] eachcar,int leftbefore,int []danger_times,int []not_danger_times){
double safety_dist=eachcar[j].sd+10;
double danger_dist=eachcar[j].sd;
if(leftbefore!=-1){
if(eachcar[leftbefore].dist-eachcar[j].dist<=safety_dist&&eachcar[leftbefore].v<eachcar[j].want_v){
if(eachcar[leftbefore].dist-eachcar[j].dist<danger_dist&&eachcar[j].lane==1){
//System.out.println("危险!");
danger_times[0]++;
}else{
not_danger_times[0]++;
}
return true;
}
return false;
}
return false;
}
static boolean is_to_left(int j,car[] eachcar,int carnum,int outcar,int leftbefore,int leftafter){
double safety_dist=eachcar[j].sd+10;
if(leftbefore==-1||eachcar[leftbefore].dist-eachcar[j].dist>safety_dist){
if(leftafter==-1||eachcar[j].dist-eachcar[leftafter].dist-eachcar[leftafter].v>safety_dist){
return true;
}
return false;
}
return false;
}
static boolean is_to_right(int j,car[] eachcar,int carnum,int outcar,int rightbefore,int rightafter){
double safety_dist=eachcar[j].sd+10;
if(rightbefore==-1||eachcar[rightbefore].dist-eachcar[j].dist>safety_dist){
if(rightafter==-1||eachcar[j].dist-eachcar[rightafter].dist-eachcar[rightafter].v>safety_dist){
return true;
}
return false;
}
return false;
}
/*static int is_left_following(int j,car[] eachcar,int carnum,int outcar,int []danger_times,int [] not_danger_times){
double danger_dist=eachcar[j].sd;
double safety_dist=eachcar[j].sd+10;
int leftbefore=-1;//记录左侧前方
for(int s=j-1;s>=outcar;s--){
if(eachcar[s].lane==2){
leftbefore=s;//前方有车
break;
}
}
if(leftbefore==-1||eachcar[leftbefore].dist-eachcar[j].dist>safety_dist){
return 0;
}else{
if(eachcar[leftbefore].dist-eachcar[j].dist<danger_dist){
danger_times[0]++;
//System.out.println("危险!");
}else{
not_danger_times[0]++;
}
return eachcar[leftbefore].v;
}
}*/
static double gaussrand(double E, double V) {
double V1, V2 = 0, S = 0;
int phase = 0;
double X;
Random r = new Random();
if (phase == 0) {
do {
double U1 = (double)r.nextDouble();
double U2 = (double)r.nextDouble();
V1 = 2 * U1 - 1;
V2 = 2 * U2 - 1;
S = V1 * V1 + V2 * V2;
} while (S >= 1 || S == 0);
X = V1 * Math.sqrt(-2 * Math.log(S) / S);
}
else X = V2 * Math.sqrt(-2 * Math.log(S) / S);
phase = 1 - phase;
return X * V + E;
}
public static void main(String[] args){
int carnum=0;
int outcar=0;//行驶过的车号
int highway_length=8000;//8km
//int safety_dist=100;//100m
int max_car_num=5000;
int overtaking_dist=800;
car eachcar[]=new car[max_car_num];
int overtake_num=0;//记录超车辆数
int return_num=0;
double is_busy=0.012;
int danger_times[]={0};
int not_danger_times[]={0};
int left_out=0;
//int danger_dist=40;//危险距离40m
int left_in=0;
int right_in=0;
double beta=0.1;
double gama=0.8;
double mu=12;
double std=3;
double tenmini_dg=0;
double tenmini_dist=0;
int lastcarnum=0;
for(int i=0;i<3600*24*10;i++){//时间
if(i==36000){
is_busy=0.0105*0.2;
System.out.println("第1h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==72000){
is_busy=0.005*0.2;
System.out.println("第2h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==108000){
is_busy=0.004*0.2;
System.out.println("第3h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==144000){
is_busy=0.0058*0.2;
System.out.println("第4h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==180000){
is_busy=0.008*0.2;
System.out.println("第5h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==216000){
is_busy=0.009*0.2;
System.out.println("第6h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==252000){
is_busy=0.012*0.2;
System.out.println("第7h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==288000){
is_busy=0.0215*0.2;
System.out.println("第8h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==324000){
is_busy=0.041*0.2;
System.out.println("第9h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==360000){
is_busy=0.075*0.2;
System.out.println("第10h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==396000){
is_busy=0.006*0.2;
System.out.println("第11h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==432000){
is_busy=0.038*0.2;
System.out.println("第12h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==468000){
is_busy=0.042*0.2;
System.out.println("第13h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==504000){
is_busy=0.062*0.2;
System.out.println("第14h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==540000){
is_busy=0.067*0.2;
System.out.println("第15h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==576000){
is_busy=0.06*0.2;
System.out.println("第16h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==612000){
is_busy=0.033*0.2;
System.out.println("第17h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==648000){
is_busy=0.031*0.2;
System.out.println("第18h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==684000){
is_busy=0.024*0.2;
System.out.println("第19h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==720000){
is_busy=0.02*0.2;
System.out.println("第20h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==756000){
is_busy=0.016*0.2;
System.out.println("第21h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==792000){
is_busy=0.0105*0.2;
System.out.println("第22h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}else if(i==828000){
is_busy=0.0105*0.2;
System.out.println("第23h开进"+(carnum-lastcarnum)+"辆车");
lastcarnum=carnum;
}
Random r = new Random();
double u = r.nextDouble();
/*if(i>14400&&i<14800){
if(u<0.0058){
System.out.println("满足!前一个距离:"+eachcar[carnum-1].dist+"前一个安全距离:"+eachcar[carnum-1].sd);
}
}*/
if(i%10==0&&u<is_busy&&(carnum==0||eachcar[carnum-1].dist>eachcar[carnum-1].v||eachcar[carnum-1].dist==-1)){
eachcar[carnum]=new car();
eachcar[carnum].dist=0;
if(r.nextDouble()<0.55){
eachcar[carnum].lane=1;
right_in++;
}else{
eachcar[carnum].lane=2;
left_in++;
}
//eachcar[carnum].v=(int)Math.floor(r.nextDouble()*16)+17;
eachcar[carnum].v=gaussrand((double)25,2.8);
if(eachcar[carnum].v<16.7){
eachcar[carnum].v=16.7;
}
if(eachcar[carnum].v>33.3){
eachcar[carnum].v=33.3;
}
eachcar[carnum].want_v=eachcar[carnum].v;
eachcar[carnum].i=carnum;
eachcar[ca