C - Collision 2
这里有 N
个人在 x-y
的二维平面中,第 i
个人在 ( Xi, Yi )
,每个点都不同
我们有一个长度为 N
的 S
,该字符串由 L
和 R
组成。
Si
代表该人的朝向方向,判断是否有人会相撞。
数据范围
- N ∈ [2, 2×1e5]
- X,Y ∈ [0, 1e9]
- 各个点位置不同
- 所有 X , Y 都为整数
- S 由长度为 N 元素为 L 和 R 构成。
输入
N
X1 Y1
X2 Y2
`
`
Xn Yn
S
输出
会碰撞输出 Yes
不会输出 No
样例输入
3
2 3
1 1
4 1
RRL
样例输出
Yes
解题思路
题目要求,我们需要判断是否会有人相撞。
由于题目给出的方向只有左和右,那么我们只需要判断每一行中是否有人会相撞。
那么会相撞的情况只有一种。即在左边的人(x小的人)朝向右,在右边的人(x大的人)朝向左。x[i] < x[j] && s[i] == 'R' && s[j] == 'L'
如果我们直接用循环去一个个判断他们是否符合上述条件,那么耗费的时间为 O(n^2) ,当 N 取最大值的时候显然会超时
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(x[i] < x[j] && s[i] == 'R' && s[j] == 'L'){
cout << "Yes" << endl;
return<