1374:铲雪车(snow)

本文介绍了解决铲雪车在有向图中清理道路问题的方法,利用欧拉回路理论确保覆盖所有道路,并通过两点间距离公式计算总行驶时间,注意单位转换和输出格式要求。
摘要由CSDN通过智能技术生成

【题目考点】
1. 图论:欧拉回路
2. 两点间距离公式

【解题思路】

  • 所有的道路都是双车道,对于一条道路,铲雪车每次经过道路只能铲掉一侧的雪,需要来回走两趟才能完全清除这条道路上的雪。
  • 该图是有向图,将每个路口视为顶点,每条车道是一条有向边,每条道路即为双向的有向边。
  • “铲雪车从起点一定可以到达任何街道”保证了这个图是连通图。
  • 要想完成对所有道路铲雪,也就是要把每条边都走一次,这是一个求欧拉路径的问题。
  • 每个路口连接的每条道路都会提供一个入度和一个出度,每个顶点的入度和出度一定相同。该图一定存在欧拉回路。
  • 铲雪车从起点出发,按照欧拉回路顺序走遍图中的每条边(车道),最后回到起点,可以完成铲雪。整个过程中铲雪车一直在铲雪,速度是20km/h。
  • 根据输入,使用两点间距离公式求出每条道路的长度,乘以2后就是所有车道(所有边)的总长度,除以行车速度,即可得到花费的总时间。

【注意】
注意单位换算:速度是km/h,而距离单位是m。
注意变量类型:要使用long long。
注意输出格式;输出分钟不足2位时,前面要补0。

【参考代码】

#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 = int(time);//小时数
    m = round((time - h)*60);//分钟数
    cout << h << ':' << setw(2) << setfill('0') << m;//输出分钟,不足2位时左边补0 
    return 0;
}
  • setw(2): 这是C++标准库中的一个控制输出宽度的操作符,它指定后面的输出项的最小宽度为2个字符。
  • setfill('0'): 这是C++标准库中的一个操作符,用于设置填充字符。在这里,它将填充字符设置为'0'。
  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值