AT_arc054_a [ARC054A] 動く歩道 题解

题面

题面戳这

分析

一道纯物理题,不过题面的翻译有些问题,终点其实是不随人行道动的(手推一下样例就能推出来),还有 \(x\) 是人行道的速度,不过这一点翻译里面并没有给出来。

题意读懂了,题目就好做了。通过物理公式 \(t=\frac{x}{v}\) 很容易得出我们需要计算的物理量。

不过需要注意的是,这个人行道是环形的,所以当起点和终点相对位置不一样的时候走的路程也会不一样,所以我们可以进行分类讨论。

关于速度的处理,我们可以讲人行道看作静止的,来计算人和人行道的相对速度,值得注意的是,如果你按逆时针放向跑,你的速度是有可能小于或者等于 \(0\) 的,在这种情况下,肯定比沿着顺时针跑更慢(仔细思考可以发现其实这样路程是一样的,但是速度却相差了两倍的 \(y\) 呀)。

代码

题目分析完了,代码也不难写出了

#include<bits/stdc++.h>
using namespace std;

const double eps = 1e-7;

int l , x , y , s , d;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	
	cin >> l >> x >> y >> s >> d;
	
	double shun_v = (double)y+x , ni_v = (double)y-x;
	double shun_len , ni_len;
	if (s>d)
	{
		shun_len = (double)d-s+l , ni_len = (double)s-d;
	}
	else if (s<d)
	{
		shun_len = (double)d-s , ni_len = (double)s-d+l;
	}
	else 
	{
		cout << "0.000000000" << endl;
		return 0;
	}
	
	if (ni_v<=0)
	{
		cout << fixed << setprecision(10) <<shun_len/shun_v << endl;
	} 
	else 
	{
		cout << fixed << setprecision(10) << min(shun_len/shun_v , ni_len/ni_v) << endl;
	}
	return 0;
}

结语

这是一道红题难度的黄题,不过由于翻译的不准确加大了一丝题目的难度,需要认真思考才能不出问题。

posted @ 2024-02-22 19:12  hh20080501hh  阅读(10)  评论(0)    收藏  举报