首页 > 其他分享 >【施工中】2020 ICPC 上海(TeamVP)

【施工中】2020 ICPC 上海(TeamVP)

时间:2022-10-12 23:23:27浏览次数:59  
标签:正解 double ICPC 此时 2020 vx vy 思路 TeamVP

D - Walker

小评

赛后补题。赛时很容易的想到了二分,但是尴尬的点在于我们想的是对时间进行二分,然后分类讨论两个人的位置关系,这就导致代码很长,而且一直存在错误没有找到。

总体来说这是一道偏简单的题目,想到了正解之后代码极其精炼,且没有多少细节,能够很轻易的解决。

题意

长度为 \(N\) 的数轴上有两个人分别位于 \(x、y\) ,两个人的步行速度分别为 \(v_x、v_y\) ,在任何时刻他们都能转换方向,求解他们走遍整根数轴需要的最短时间。

思路

由于赛时主要是我在写,所以我补这道题将从赛时思路进行转换。

赛时思路(复杂,且有错)

设 \(A\) 为左边那个人,\(B\) 为右边那个人。

二分时间,对所有的情况进行讨论:\(A\) 向左、向右,\(B\) 向左、向右。

以 \(A\) 向左进行举例,有以下几种状态:

  • \(A\) 向左跑,并停在 \(0、x\) 中间:此时 \(B\) 需要跑完全程;
  • \(A\) 向左跑到 \(0\) ,并停在 \(0、x\) 中间:此时 \(B\) 最左到 \(x\) ,最右到 \(N\) ;
  • \(A\) 向左跑到 \(0\) ,并停在 \(x、y\) 中间:此时 \(B\) 最左到 \(A\) ,最右到 \(N\) ;
  • \(A\) 向左跑到 \(0\) ,并停在 \(y、N\) 中间:此时 \(B\) 要停止在 \(N\) ;
  • \(A\) 向左跑到 \(0\) 、再向右跑到 \(N\) 后停止:此时 \(B\) 不需要移动。

再以 \(A\) 向右进行举例:

  • \(A\) 向右跑,并停在 \(x、N\) 中间:此时 \(B\) 需要跑完全程;
  • \(A\) 向右跑到 \(N\) ,并停在 \(0、N\) 的中间:此时 \(B\) 要停止在 \(0\) ;
  • \(A\) 向右跑到 \(N\) 、再向左跑到 \(0\) 后停止:此时 \(B\) 不需要移动。

可见,该方法非常复杂,但是理论能解。

正解

设 \(A\) 为左边那个人,\(B\) 为右边那个人。

两个人有如下几种方式走遍整根数轴:

  • \(A\) 或者 \(B\) 一个人跑完;
  • \(A、B\) 向着对方的方向一直走,直到边界;
  • \(A、B\) 最终在中间的某一个点碰到(且这个位置一定在 \(x、y\) 之间)。

以上前两种情况可以直接得解,最后一种情况可以通过二分碰到的位置得解。

我的思路到这个思路有一些需要转换的地方,如下:

  • 我思路II的第二种情况相当于正解的第二种情况;
  • 我思路I的第二种情况相当于正解的第三种情况,碰到的位置在 \(x\) ;
  • 我思路I的第四种情况相当于正解的第三种情况,碰到的位置在 \(y\) 。

AC代码

点击查看代码
double n, x, vx, y, vy;
double clac(double n, double x, double v) {
	return min((n + x) / v, (n + n - x) / v); //分别计算x向左、向右跑需要的时间
}
void Solve() {
	cin >> n >> x >> vx >> y >> vy;
	if (x > y) swap(x, y), swap(vx, vy);
	double ans = min(clac(n, x, vx), clac(n, y, vy)); //分别计算A, B跑完全程需要的时间
	ans = min(ans, max((n - x) / vx, y / vy)); //分别计算A, B对穿需要的时间

	double l = x, r = y, ansl = INF, ansr;
	for (int i = 1; i <= 100; ++ i) {
		double mid = (l + r) / 2;
		ansl = clac(mid, x, vx);
		ansr = clac(n - mid, y - mid, vy);
		// _(mid, ansl, ansr);
		if (ansl < ansr) l = mid;
		else r = mid;
	}
	cout << min(ans, max(ansl, ansr)) << endl;
}

标签:正解,double,ICPC,此时,2020,vx,vy,思路,TeamVP
From: https://www.cnblogs.com/WIDA/p/16786502.html

相关文章

  • 2020版本idea version control 不见了 解决办法
    2020版本ideaversioncontrol不见了解决办法2020版本ideaversioncontrol不见了解决办法以前窗口底部是有个VersionControl的窗口的(如下图所示),但是现在没有了......
  • 【人脸表情识别】不得不读的重要论文推荐(2019-2020篇)
    上一篇专栏文章我们介绍了2015-2018年基于图片的人脸表情识别代表性方法。本文将延续上一篇的内容,继续盘点2019-2020基于图片的人脸表情识别的代表性工作。作者&编辑|Menp......
  • 【人脸表情识别】情绪识别相关会议、比赛汇总(2018-2020)
    前面专栏中,我们介绍了有关基于图片/视频的人脸表情识别的相关内容,也了解了通过回归的方式来理解表情的方式——基于连续模型的人脸表情识别。在专栏的最后一篇文章中,我们将......
  • 2019 浙江省赛(TeamVP)
    比赛相关信息比赛信息比赛名称:The16thZhejiangProvincialCollegiateProgrammingContest比赛地址:Vjudge全部参赛队伍:292+5*金:9题,1031m银:8题,839m铜......
  • 2020年2月编程语言排行榜
    TIOBE公布了2月份编程语言排行榜。相比上个月编程语言Top5并没有太大的变化,其中Java依旧稳坐榜首,随后分别是C、Python、C++、C#。Java,C和Python。牢牢占据前三的位置对于......
  • IDEA 2020 右键没有Servlet选项 解决办法
    在配置好了Tomcat依赖后,本来是可以创建Servlet的,但是第二天打开就会没有Servlet选项解决方法1、选中项目file-projectstructure-modules2、选中src标记为resources......
  • 2020年,计算机视觉领域会有哪些新的研究方向值得提前探索?
    整理:3D视觉工坊2020年,计算机视觉领域会有哪些新的研究方向值得提前探索?作者:罗浩.ZJU​​https://www.zhihu.com/question/330153893/answer/721238966​​作者:育心​​http......
  • 2020年20个大的SEO优化趋势
    ​翻译|web前开发(ID:web_qdkf)你是否曾经想过掌握SEO的艺术?如果是,那么你必须完成一项艰巨的任务,即寻找最新的Google搜索趋势,以更好的提升你的网站排名。由于SEO是一个非常......
  • IDEA2020增加试用期-适用于30天试用期已过
    IDEA版本:2020.1.1情况描述:之前使用的试用期30天已经到期,现在被限制每次只能使用半小时搜了好几个破解教程,但都是需要在未开启试用的情况下破解;或者是将之前的IDEA卸载,再......
  • P6560 [SBCOI2020] 时光的流逝(DAG图上博弈模板)
    P6560[SBCOI2020]时光的流逝(DAG图上博弈模板)题意:​ 给出一个有向图(可能有环),每轮游戏有一个起点和终点,A和B一起玩游戏。A先移动,然后他们交替移动,当谁把棋子移动至终点,谁......