首页 > 代码库 > 1029:积雪清理

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         else16                 printf("%02d:%02d\n",(int)t,m);17         return 0;18 }

 

1029:积雪清理