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;
}
结语
这是一道红题难度的黄题,不过由于翻译的不准确加大了一丝题目的难度,需要认真思考才能不出问题。

浙公网安备 33010602011771号