题目保证保证:铲雪车从起点一定可以到达任何街道。因此说明这一定是一个连通图。
第二,因为一条路只有一个出度和入度,因此一定是一个欧拉回路。(满足欧拉回路的条件)
因此我们一定可以满足所有的路都只走一次,这样铲雪车就能保证一直行驶在铲雪的路上,速度保持在20km/h。
我们只需要计算出比每条路的长度/20就可以计算出铲完所有的学所花费的时间。
注意,因为题目说了每一条路都是双向道,因此每次铲学都只会铲清一侧的学,我们需要来回一趟才能把一条路的上的学清理干净。因此我们计算路的长度之后需要把长度*2。
因为题目只给我们一条路入口的坐标和终点的坐标,因此我们可以用曼哈顿距离算式求出这条路的长度:
code
#include<bits/stdc++.h>
using namespace std;
int main()
{
double x1, y1, x2, y2; cin >> x1 >> y1;
double dist=0;
while (cin >> x1 >> y1 >> x2 >> y2)
{
double dx = x1 - x2;
double dy = y1 - y2;
dist += sqrt(dx*dx+dy*dy)*2;
}
int minutes = round(dist / 1000 / 20*60); //双向道 转化为km /速度20 求出花费的小时
//int hour = minutes / 60; //转化为小时
int hour = minutes / 60; //看一下剩多少分钟
minutes %= 60;
printf("%d:%02d\n",hour,minutes);
return 0;
}