#include <bits/stdc++.h>
using namespace std;
char dir[4] = {'N', 'S', 'E', 'W'};
struct Ship {
int x, y, d;
pair<int, int> move;
void init() {
if (d == 0) move = {0, -1};
else if (d == 1) move = {0, 1};
else if (d == 2) move = {1, 0};
else move = {-1, 0};
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
vector<Ship> s(n);
for (int i = 0; i < n; ++i) {
int x, y, d;
char c;
cin >> x >> y >> c;
if (c == 'N') d = 0;
else if (c == 'S') d = 1;
else if (c == 'E') d = 2;
else d = 3;
s[i].x = x;
s[i].y = y;
s[i].d = d;
s[i].init();
}
vector<pair<int, pair<int, int>>> collision;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
int col = (abs(s[i].x-s[j].x)+abs(s[i].y-s[j].y))/2;
if (s[i].x == s[j].x) {
if (s[i].d == 0 && s[j].d == 1) {
if (s[i].y > s[j].y) collision.push_back({col, {i, j}});
} else if (s[i].d == 1 && s[j].d == 0) {
if (s[i].y < s[j].y) collision.push_back({col, {i, j}});
}
} else if (s[i].y == s[j].y) {
if (s[i].d == 2 && s[j].d == 3) {
if (s[i].x < s[j].x) collision.push_back({col, {i, j}});
} else if (s[i].d == 3 && s[j].d == 2) {
if (s[i].x > s[j].x) collision.push_back({col, {i, j}});
}
} else if (s[i].x+s[i].y == s[j].x+s[j].y) {
if (s[i].d == 0) {
if (s[j].d == 3 && s[j].x > s[i].x) collision.push_back({col, {i, j}});
} else if (s[i].d == 1) {
if (s[j].d == 2 && s[j].x < s[i].x) collision.push_back({col, {i, j}});
} else if (s[i].d == 2) {
if (s[j].d == 1 && s[j].x > s[i].x) collision.push_back({col, {i, j}});
} else {
if (s[j].d == 0 && s[j].x < s[i].x) collision.push_back({col, {i, j}});
}
} else if (s[i].x-s[i].y == s[j].x-s[j].y) {
if (s[i].d == 0) {
if (s[j].d == 2 && s[j].x < s[i].x) collision.push_back({col, {i, j}});
} else if (s[i].d == 1) {
if (s[j].d == 3 && s[j].x > s[i].x) collision.push_back({col, {i, j}});
} else if (s[i].d == 2) {
if (s[j].d == 0 && s[j].x > s[i].x) collision.push_back({col, {i, j}});
} else {
if (s[j].d == 1 && s[j].x < s[i].x) collision.push_back({col, {i, j}});
}
}
}
}
sort(collision.begin(), collision.end());
int m = (int)collision.size();
vector<bool> sink(n, false);
int act_col = -1;
vector<int> aux;
for (int i = 0; i < m; ++i) {
int col = collision[i].first, i1 = collision[i].second.first, i2 = collision[i].second.second;
if (col != act_col) {
for (int a: aux) sink[a] = true;
aux = {};
act_col = col;
}
if (!sink[i1] && !sink[i2]) {
aux.push_back(i1);
aux.push_back(i2);
}
}
for (int i: aux) sink[i] = true;
for (int i = 0; i < n; ++i) {
if (!sink[i]) cout << i+1 << endl;
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |