AtCoder Beginner Contest 243 C - Collision 2
题意
题目
给n个点,每个点有移动方向(向左或向右),判断是否会有碰撞
思路
unordered_map<int, vector<PII>>
y坐标相同的存在vecctor中,vector中存x的坐标和移动方向。
枚举每个y,再枚举y中的每个x,选出往右走的最左边的点,和往左走的最右边的点,如果有肯定会碰撞
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
int main()
{
int n;
cin >> n;
vector<PII> p(n + 10);
string s;
unordered_map<int, vector<PII>> h;
for(int i = 0; i < n; i ++ )
scanf("%d%d", &p[i].x, &p[i].y);
cin >> s;
for(int i = 0; i < n; i ++ )
h[p[i].y].push_back({p[i].x, s[i] == 'R'? 1 : 0});
bool flag = false;
for(auto [a, b] : h)
{
int r = 1e9, l = -1e9;
for(auto [c, d] : b)
{
if(d == 1) r = min(r, c);
else l = max(l, c);
}
if(r < l)
{
flag = true;
break;
}
}
if(flag) puts("Yes");
else puts("No");
return 0;
}