#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);
map<int, int> comp;
set<int> diagonals;
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();
diagonals.insert(s[i].x+s[i].y);
}
int cnt = 0;
for (int a: diagonals) {
comp[a] = cnt;
++cnt;
}
int m = (int)diagonals.size();
vector<vector<pair<int, int>>> D(m);
for (int i = 0; i < n; ++i) {
D[comp[s[i].x+s[i].y]].push_back({s[i].x, i});
}
vector<bool> sink(n, false);
for (int i = 0; i < m; ++i) {
sort(D[i].begin(), D[i].end());
vector<int> v;
for (int j = 0; j < (int)D[i].size(); ++j) {
int idx = D[i][j].second;
if (s[idx].d == 1) {
if (!v.empty()) {
sink[idx] = true;
int idx2 = v[(int)v.size()-1];
sink[idx2] = true;
v.pop_back();
}
} else v.push_back(idx);
}
}
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... |