《信息学奥赛一本通 (C++)版》铲雪车(snow)

文章介绍了如何利用欧拉回路理论解决一个关于扫雪车在双向车道街道上除雪的问题,关键在于计算街道长度并考虑行驶方向。通过编程实现,输入街道顶点坐标计算总行驶时间,注意使用longlong处理可能的大数值和距离计算。
摘要由CSDN通过智能技术生成

题目出处:《信息学奥赛一本通 (C++)版》P467页

线上OJ: 信息学奥赛一本通(C++版)在线评测系统

核心思想

  1. 把街道看到边 e,街道的两端看成顶点 v
  2. 每条马路都是双向 + 每个方向都有一根车道且都要扫雪 → 有向边
  3. 从起点出发,扫完每一根车道,最终回到起点 → 一定存在欧拉回路
  4. 通过画图分析可知,最短路径是每个街道都正反各走一次(即每条有向边仅走除雪的一次,不走空车)
  5. 所以,本题实际上只要求出街道的长度,除以铲雪时的速度即可
  6. 由于每个街道要正反各走一次,所以长度要*2

注意1:由于涉及到距离公式 d=\sqrt{(x_{1}-x_{2})^{2}+(y_{1}-y_{2})^{2}))} ,本题应用 long long

注意2:题目中的“且都是双向一个车道”有歧义,原本以为是只有一根车道,又能正向走又能反向走。但根据题目样例输出的 3:55 推出,实际上是双向各有一根车道。

题中的样例输出 3:55 推导如下图:

题解代码: 

#include<bits/stdc++.h>
#define ll long long

using namespace std;

/*
核心思想:
1. 把街道看到边e,街道的两端看成顶点v 
2. 每条马路都是双向 + 每个方向都有一根车道且都要扫雪 →有向边 
3. 从起点出发,扫完每一根车道,最终回到起点 →一定存在欧拉回路 
4. 通过画图分析可知,最短路径是每个街道都正反各走一次(即每条有向边仅走除雪的一次,不走空车)
5. 所以,本题实际上只要求出街道的长度,除以铲雪时的速度即可
6. 由于每个街道要正反各走一次,所以长度要*2 

注意:由于涉及到距离公式 d = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2)),本题应用 long long 
*/
int main()
{
	ll a0, y0, x1, y1, x2, y2;
    cin >> a0 >> y0;	// 读入初始坐标。由于题中已保证从起点一定可以到达任何街道,所以这组坐标其实没用 
    
    // 每读入街道的两个顶点,就计算这个街道的长度,并*2倍 
    double d;
    while(cin >> x1 >> y1 >> x2 >> y2)
        d += 2*sqrt(pow((x1 - x2), 2) + pow((y1 - y2), 2)); 
    
    ll h, m;
	h = d/20000;	// t:时间 = 距离 / 速度 , 自动取整就是 h 
    m = round((double(d/20000) - h) * 60); // 计算分钟数。举例:(3.914-3)*60=54.84分钟,四舍五入为55
	// 如果四舍五入后,分钟数m变为60,则手动更新h和m 
	if(m == 60) 
	{
		h++;
		m = 0;
	}

	printf("%lld:%02lld\n", h, m);
    return 0;
}

  • 16
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
信息学奥赛一本通C》是一本电子书,专为准备参加信息学竞赛的学生而编写的。该书内容丰富,系统性强,对信息学相关知识进行了全面的介绍和解析。它旨在帮助读者全面了解和掌握信息学的基本概念、算法设计和编程技巧。 《信息学奥赛一本通C》的主要特点是: 1.全面的知识点覆盖:该书涵盖了信息学竞赛常见的核心知识点,包括数据结构、算法设计与分析、图论、动态规划等。读者可以系统地学习每个知识点,掌握其原理和应用方法。 2.详细的解题思路:书中为每个知识点的典型题目都提供了详细的解题思路和步骤分析。这些解题思路能够帮助读者理解算法的设计过程,并能够应用到不同的实际问题中。 3.丰富的编程实例:书中配有丰富的编程实例,涵盖了各个知识点的不同应用场景。读者可以通过这些实例来巩固所学的知识,并提升编程能力。 4.易于阅读和学习:该电子书采用清晰简洁的语言,结构也很清晰,方便读者进行阅读和学习。同时,配有大量图表和示意图,便于理解和记忆。 总之,《信息学奥赛一本通C》是一本理论与实践相结合的电子书,适合参加信息学竞赛的学生使用。它不仅提供了全面的理论知识,还提供了实际问题的解决思路和实例,帮助读者系统地学习和掌握信息学竞赛所需的基本知识和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值