1029:积雪清理
题目描述
小明所在的城市昨晚下了一场大雪,所有道路都被积雪覆盖了。为了保证交通畅通,需要动用除雪车清理道路上的积雪,但是整个城市只有一辆除雪车。
城市的每条道路都有两条行车道,除雪车可以单向清除一条道路的一条行车道上的积雪,并且除雪车可以在任意一个路口改变方向(包括U形转弯),同时在任意一条道路的尽头可以掉头(U形)到另一条行车道行驶。
除雪车在除雪时以20km/h的速度行驶,在积雪已经被清除的车道上则以50km/h的速度行驶。
现请你计算,除雪车清理完所有道路的所有车道,并且最后回到车库最少需要多长时间?
输入格式
输入的第一行包含两个整数x和y,表示停放除雪车的车库的坐标。
接下来若干行,每行输入四个实数x1,y1,x2,y2,表示某条道路的起始点坐标,所有道路均为直路。
车库的坐标一定位于某条道路的线段上。
输入中的所有坐标单位均为米。
输出
输出除雪车清理完所有道路的所有车道,并且最后回到车库最少需要多长时间,格式为hh:mm,结果将秒四舍五入到分。
样例输入
0 0
0 0 10000 10000
5000 -10000 5000 10000
5000 10000 10000 10000
样例输出
03:55
怎样才是最短呢?
一条道分两行,清理到尽头可以跳跃到另一条道清理,最少时间就是清理完雪就回到原点,清理时要记得是清理两行的积雪
1 #include<stdio.h> 2 #include<math.h> 3 4 int main() 5 { 6 double x1,y1,x2,y2,s=0,t; 7 int m; 8 scanf("%*d%*d"); 9 while(scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2)!=EOF) 10 s+=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); 11 t=s/20000*2; 12 m=(t-(int)t)*60+0.5; 13 if(m==60) 14 printf("%02d:00\n",(int)t+1); 15 else 16 printf("%02d:%02d\n",(int)t,m); 17 return 0; 18 }