High way
 
时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

In the city, there is a one-way straight highway starts from the northern end, traverses the whole city southward, and finishes at the southern end. Due to some financial difficulties, there is only one lane on this highway, which means that overtaking other cars in front is impossible.

The highway is quite busy. Lots of different cars are running on it every day. For each car, it is running on the highway at the point which X km far from the northern end in Minute 0, and will leave at the point which Y km far from the northern end. Each car also has a speed limit L km/min. During the whole trip on the highway, each car should run as fast as possible without exceeding its speed limit or overtaking other cars in front. In addition, no two or more cars will be at the same point at Minute 0. Cars can be regarded as points and the distance between two cars can be infinitely small.

Given the information of N cars, please calculate the leaving time for each car.

输入

The first line contains one integer N. 2 <= N <= 1000.

Then follows N line. Each line contains three integers X, Y and L, showing the information of this car. 0 <= X < Y <= 1000000, 0 < L <= 10.

输出

Output N real numbers, one per line -- the leaving time (in minute) of each car, preserving the input order of cars. Your answers should be rounded to 2 digits after the decimal point and the output must contain exactly 2 digits after the decimal point.

样例输入
3
3 5 1
1 4 2
0 8 3
样例输出
2.00
1.50
3.00 代码:
package carRun;

import java.util.Scanner;

public class carTime {

	public static void main(String argv[]){

		Scanner br=new Scanner(System.in);
car[] c;
c=new car[100];
String[] k;
k = new String[100];
int num=0;
do {
k[num] = br.nextLine();
if (k[num].equals("")) {
break;
}
num++;
} while(true); for(int i=0;i<num;i++){ String[] sf=k[i].split(" ");
c[i]=new car(Float.parseFloat(sf[0]),Float.parseFloat(sf[1]),Float.parseFloat(sf[2])); //车初始化
c[i].foreNumber=i+1;
c[i].NforeNumber=i-1; } for(int i=0;i<num;i++){ // System.out.println(c[i].start+" "+c[i].end+" "+c[i].catchspeed+" "+c[i].foreNumber+" "+c[i].NforeNumber); } float[] minTime;
minTime=new float[1000];
for(int i=0;i<1000;i++){
minTime[i]=1000; //每段的最大时间 (初始化状态)
} int max; max=num-1; int min; min=0;int end=0; for(int j=0;j>=0;j++){ int key; int mode;
key=0; mode=0; // find the minTime
for(int i=min;i<max;){
if(c[i].catchspeed>c[c[i].foreNumber].catchspeed)
c[i].catchTime=(c[c[i].foreNumber].start-c[i].start)/(c[i].catchspeed-c[c[i].foreNumber].catchspeed);
c[i].downTime=(c[i].end-c[i].start)/c[i].catchspeed; if(c[i].catchTime!=0&&c[i].catchTime<=minTime[j]) //0 present catch; 1 present down.
{ minTime[j]=c[i].catchTime; key=i; mode=0;} if(c[i].downTime!=0&&c[i].downTime<=minTime[j])
{ minTime[j]=c[i].downTime;key=i; mode=1;}
i=c[i].foreNumber;
} c[max].downTime=(c[max].end-c[max].start)/c[max].catchspeed;
if(c[max].downTime!=0&&c[max].downTime<=minTime[j])
{ minTime[j]=c[max].downTime;key=max; mode=1;} if(mode==1)
c[key].downTag=j;
System.out.println("minTima["+j+"]: "+minTime[j]+" key: "+key+" mode: "+mode+" "+c[key].downTag);
// make the change of cars.
for(int i=max;i>=min; ){ c[i].start=c[i].start+c[i].catchspeed*minTime[j];
if(c[i].start==c[i].end)
c[i].cardown=1;
i=c[i].NforeNumber;
} //tab the head car number.
for(int i=num-1;i>=0;i-- ){
if(c[i].cardown==0)
{ max=i;
break;}
}
//System.out.println("max:"+max);
//tab the tail car number
for(int i=0;i<=max;i++ ){
if(c[i].cardown==0)
{ min=i;
break;}
}
// System.out.println("min:"+min); //change the foreNumber
for(int i=min;i<max;){ for(int h=i+1;h<=max;h++ ){
if(c[h].cardown==0)
{ c[i].foreNumber=h;
c[h].NforeNumber=i;
// i=h;
break;
}
}
i=c[i].foreNumber; } //change the speed for(int i=c[max].NforeNumber;i>=0;){ // System.out.println(i+c[i].start+c[c[i].foreNumber].start+c[i].catchspeed+c[c[i].foreNumber].catchspeed+c[i].catchspeed+c[c[i].foreNumber].catchspeed); if(c[i].start==c[c[i].foreNumber].start&&c[i].catchspeed>=c[c[i].foreNumber].catchspeed)
c[i].catchspeed=c[c[i].foreNumber].catchspeed;
if(c[i].start!=c[c[i].foreNumber].start)
c[i].catchspeed=c[i].speed;
i=c[i].NforeNumber;
} if(min==max)
{ c[min].catchspeed=c[min].speed;
end++;
}
//test report
/* for(int i=0;i<num;i++){ System.out.println(c[i].start+" "+c[i].end+" "+c[i].catchspeed+" "+c[i].foreNumber+" "+c[i].NforeNumber); }*/ //当只剩最后一辆车时,再循环一次,所有车便下了高速路。
if(end==2)
break; } //Count the time.
for(int i=0; i<num;i++){
int n=c[i].downTag;
c[i].Sum=0;
for(int y=0;y<=n;y++){
c[i].Sum=c[i].Sum+minTime[y];
}
System.out.println("The "+i+"号车的下车时间: "+c[i].Sum);
} } static class car{ float start; //记录起始位置
float end; //记录目的地位置
float speed; //记录初始速度
float catchspeed; //记录每个时间段的真实速度
float downTime; //记录每个状态下距离下高速路的时间
float catchTime; //记录每个状态下距离追上前车的时间
int foreNumber; //前面车的车号
int NforeNumber; //后面车的车号
int cardown; //记录车是否下路
int downTag; //记录车在第几个时间段后下路
float Sum; //记录车下路要用的总时间
public car(float a,float b, float c){
this.start=a;
this.end=b;
this.speed=c;
this.catchspeed=c;
this.downTime=0;
this.catchTime=0;
this.foreNumber=0;
this.cardown=0;
this.NforeNumber=0;
this.downTag=0;
this.Sum=0;
}
} }

 

运行效果:

 

输入按照起始位置输入,省去了对原数据的排序。

微软笔试Highway问题解析的更多相关文章

  1. 《PHP程序员面试笔试真题解析》——新书上线

    你好,是我--琉忆.很高兴可以跟你分享我的新书. 很高兴,在出版了PHP程序员面试笔试宝典后迎来了我的第二本书出版--<PHP程序员面试笔试真题解析>. 如果你是一个热爱PHP的程序员,刚 ...

  2. 微软project文件mpp解析

    最近在做一个项目管理的项目,主要是将用户在project文件中写的一些东西,读出来,并将其写入到数据库中. 也是借鉴了好多大佬的思想和代码,感觉自己需要整理一遍,所以,接下来就是表演的时候了. 第一步 ...

  3. 笔试真题解析 ALBB-2015 系统project师研发笔试题

    4)在小端序的机器中,假设 union X {     int x;     char y[4]; }; 假设 X a; a.x=0x11223344;//16进制 则:() y[0]=11 y[1] ...

  4. 笔试真题解析 ALBB-2015 算法project师实习生机试

    1.用十进制计算30!(30的阶乘),将结果转换成3进制进行表示的话,该进制下的结果末尾会有____个0. [解析] 计算N.下3进制结果末尾有多少个0,事实上就是计算3进制中的3被进位多少次,仅仅要 ...

  5. java笔试之参数解析(正则匹配)

    在命令行输入如下命令: xcopy /s c:\ d:\, 各个参数如下: 参数1:命令字xcopy 参数2:字符串/s 参数3:字符串c:\ 参数4: 字符串d:\ 请编写一个参数解析程序,实现将命 ...

  6. 《PHP面试笔试真题库》——PHP面试的好帮手

    你好,是我琉忆. 一个文艺的PHP开发工程师. 很荣幸能够在这里带来我的第一本新书--<PHP程序员面试笔试真题库>. 一.创作过程 <PHP 程序员面试笔试真题库>是我的第三 ...

  7. 赠送4本《 PHP 程序员面试笔试宝典》

    < PHP 程序员面试笔试宝典>历时一年,由机械工业出版社出版,在 2018 年 11 月问世.全书共八个章节,涉及 面试笔试经验技巧.PHP 基础知识.PHP 进阶知识,PHP 面向对象 ...

  8. 别语言之争了,最牛逼的语言不是.NET,也不是JAVA!

    谁都不用说,博客园明显的偏.NET,C#的讨论一出现,推荐讨论热火朝天,而发点JAVA的东西,应者寥寥.一旦有出现两大派系的竞争,那绝对是头条.每天都看,早就麻木了. 研二的我浸淫.NET已经三四年, ...

  9. RazorEngine 3.3 在Mono 3.2上正常运行

    RazorEngine 是一个简化的模板引擎基于微软新的Razor 解析引擎, Razor是在 ASP.NET MVC3 和 Web Pages中引入的.RazorEngine 提供了一个外包装和额外 ...

随机推荐

  1. 【Python学习】解决pandas中打印DataFrame行列显示不全的问题

    在使用pandas的DataFrame打印时,如果表太长或者太宽会自动只给前后一些行列,但有时候因为一些需要,可能想看到所有的行列. 所以只需要加一下的代码就行了. #显示所有列 pd.set_opt ...

  2. TCP之connect

    1. connect函数: #include <sys/socket.h> int connect(int sockfd, const struct sockaddr *servaddr, ...

  3. Mel倒谱系数

    Mel倒谱系数:MFCC Mel频率倒谱系数(Mel Frequency Cepstrum Coefficient)的缩写是MFCC,Mel频率是基于人耳听觉特性提出来的,它与Hz频率成非线性对应关系 ...

  4. Laravel 调试器 Debugbar 和数据库导出利器 DbExporter 扩展安装及注意事项

    一.Debugbar安装 参考:Laravel 调试利器 —— Laravel Debugbar 扩展包安装及使用教程 的“2.安装”部分 二.DbExporter安装 参考:Laravel 扩展推荐 ...

  5. python 学记笔记 SQLalchemy

    数据库表是一个二维表,包含多行多列.把一个表的内容用Python的数据结构表示出来的话,可以用一个list表示多行,list的每一个元素是tuple,表示一行记录,比如,包含id和name的user表 ...

  6. python基础===python基础知识问答(转)

    1.到底什么是Python?你可以在回答中与其他技术进行对比 Python是一种解释型语言.与C语言和C的衍生语言不同,Python代码在运行之前不需要编译.其他解释型语言还包括PHP和Ruby. P ...

  7. 阿里云ECS的使用

    一.阿里云ECS的使用 1.Linux CentOS Ubuntu Readhat 2.远程登录 xshell 远程登录 winScp 远程文件操作 3.Linux命令 cd 目录名 ls . ls ...

  8. ArcGIS Server 基于Token安全验证

    写在前面:只使用token并不能起到安全验证的作用,ArcGIS Server文件夹的权限是开放的,我们不需要登录Server平台即可访问服务,所以我们应该将Token验证和文件夹的安全性结合起来使用 ...

  9. 生成RSA2公钥、私钥

    RSA2是一种被使用广泛的非对称加密算法. openssl OpenSSL> genrsa -out app_private_key.pem # 私钥RSA2 OpenSSL> rsa - ...

  10. 几个例子理解对称加密与非对称加密、公钥与私钥、签名与验签、数字证书、HTTPS加密方式

    # 原创,转载请留言联系 为什么会出现这么多加密啊,公钥私钥啊,签名啊这些东西呢?说到底还是保证双方通信的安全性与完整性.例如小明发一封表白邮件给小红,他总不希望给别人看见吧.而各种各样的技术就是为了 ...