【题目链接】
ybt 1374:铲雪车(snow)
洛谷 UVA10203 Snow Clearing
注:原题输入要求更复杂,本文代码无法通过。
【题目考点】
1. 图论:欧拉回路
2. 两点间距离公式
d i s = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 dis = \sqrt{(x_1-x_2)^2+(y_1-y_2)^2} dis=(x1−x2)2+(y1−y2)2
【解题思路】
所有的道路都是双车道,对于一条道路,铲雪车每次经过道路只能铲掉一侧的雪,需要来回走两趟才能完全清除这条道路上的雪。
该图是有向图,将每个路口视为顶点,每条车道是一条有向边,每条道路即为双向的有向边。
“铲雪车从起点一定可以到达任何街道”保证了这个图是弱连通图。
要想完成对所有道路铲雪,也就是要把每条边都走一次,这是一个求欧拉路径的问题。
每个路口连接的每条道路都会提供一个入度和一个出度,每个顶点的入度和出度一定相同。该图一定存在欧拉回路。
铲雪车从起点出发,按照欧拉回路顺序走遍图中的每条边(车道),最后回到起点,可以完成铲雪。整个过程中铲雪车一直在铲雪,速度是20km/h。
根据输入,使用两点间距离公式求出每条道路的长度,乘以2后就是所有车道(所有边)的总长度,除以行车速度,即可得到花费的总时间。文章来源:https://www.toymoban.com/news/detail-677300.html
【注意】
注意单位换算:速度是km/h,而距离单位是m。
注意变量类型:要使用long long。
注意输出格式;输出分钟不足2位时,前面要补0。文章来源地址https://www.toymoban.com/news/detail-677300.html
【题解代码】
#include<bits/stdc++.h>
using namespace std;
int main()
{
double dis = 0, time;
long long h, m, ax, bx, ay, by;
cin >> ax >> ay;
while(cin >> ax >> ay >> bx >> by)
dis += 2*sqrt((ax-bx)*(ax-bx)+(ay-by)*(ay-by));//dis:总距离 单位:米
time = dis / 1000 / 20;//time:总时间,单位:小时
h = floor(time);//小时数
m = round((time - h)*60);//分钟数
cout << h << ':' << setw(2) << setfill('0') << m;//输出分钟,不足2位时左边补0
return 0;
}
到了这里,关于信息学奥赛一本通 1374:铲雪车(snow)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!