CF传送门
题意:
1. n个粒子排列在正x轴上
2. L,R代表对应粒子的运动方向,每秒运动一个单位
3. 求粒子能相撞的
最短时间
4. 如果粒子永远无法相撞,就输出-1
题解:
1. 相邻的两个粒子的运动只有满足左粒子向右运动(R),右粒子向左运动(L)才有机会相撞
2. 遍历所有粒子的过程中用一个变量维护可以相撞的两个粒子的最短距离
以下是我的AC代码:
#include <cstdio>
#define maxn 200000+5
#define minn 1000000005
using namespace std;
long a[maxn];
char s[maxn];
int main()
{
int n;
scanf("%d",&n);
getchar(); //清理缓冲区的回车,防止被接下来的字符数组读入
for(int i=0;i<n;i++)
scanf("%c",&s[i]);
for(int i=0;i<n;i++)
scanf("%ld",&a[i]);
long mina=minn; //初始化最短距离为正无穷
for(int i=0;i<n;i++)
if(s[i]=='R' && s[i+1]=='L' && a[i+1]-a[i]<mina) //维护最短距离
mina=a[i+1]-a[i];
if(mina==minn) //如果不能相撞,那就打印-1
printf("-1\n");
else
printf("%ld\n",mina/2); //如果可以相撞,输出最短距离,由于粒子运动速度都是一个单位,所以要除以2
return 0;
}