This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
typedef long long ll;
#define FOR(i,x,y) for(ll i=x; i<y; i++)
#define FORNEG(i,x,y) for(ll i=x; i>y; i--)
using namespace std;
vector<vector<ll>> stuff;
vector<vector<ll>> collisions;
int main(){
ll n; cin >> n;
FOR(i,0,n){
ll x,y;
cin >> x >> y;
char s;
cin >> s;
stuff.push_back({x,y,s, i});
}
FOR(i,0,n){
FOR(j,i+1,n){
ll time1, time2;
set<ll> up = {'S','N'};
set<ll> left = {'E','W'};
if (up.count(stuff[i][2]) && up.count(stuff[j][2]) && stuff[i][0] != stuff[j][0]) continue;
if (left.count(stuff[i][2]) && left.count(stuff[j][2]) && stuff[i][1] != stuff[j][1]) continue;
if (stuff[i][2] == 'S'){
time1 = stuff[i][1] - stuff[j][1];
}
if (stuff[i][2] == 'N'){
time1 = stuff[j][1] - stuff[i][1];
}
if (stuff[i][2] == 'E'){
time1 = stuff[i][0] - stuff[j][0];
}
if (stuff[i][2] == 'W'){
time1 = stuff[j][0] - stuff[i][0];
}
if (stuff[j][2] == 'S'){
time2 = stuff[j][1] - stuff[i][1];
}
if (stuff[j][2] == 'N'){
time2 = stuff[i][1] - stuff[j][1];
}
if (stuff[j][2] == 'E'){
time2 = stuff[j][0] - stuff[i][0];
}
if (stuff[j][2] == 'W'){
time2 = stuff[i][0] - stuff[j][0];
}
if (time1 < 0 && time1==time2){
if (up.count(stuff[i][2]) && up.count(stuff[j][2])) time1 /= 2;
if (left.count(stuff[i][2]) && left.count(stuff[j][2])) time1 /= 2;
collisions.push_back({-time1,i+1, j+1});
}
}
}
sort(collisions.begin(), collisions.end());
reverse(collisions.begin(), collisions.end());
set<ll> destroyed;
set<ll> times;
for (auto&i : collisions) times.insert(i[0]);
ll cur;
for (auto&i : times){
vector<ll> temp;
while (collisions.size() && collisions[collisions.size()-1][0] == i){
if (!(destroyed.count(collisions[collisions.size()-1][1]) || destroyed.count(collisions[collisions.size()-1][2]))){
temp.push_back(collisions[collisions.size()-1][1]);
temp.push_back(collisions[collisions.size()-1][2]);
}
collisions.pop_back();
}
for (auto&i : temp) destroyed.insert(i);
}
FOR(i,1,n+1) if (destroyed.count(i) == 0) cout << i << endl;
}
Compilation message (stderr)
Main.cpp: In function 'int main()':
Main.cpp:68:5: warning: unused variable 'cur' [-Wunused-variable]
68 | ll cur;
| ^~~
Main.cpp:55:26: warning: 'time2' may be used uninitialized in this function [-Wmaybe-uninitialized]
55 | if (time1 < 0 && time1==time2){
| ~~~~~^~~~~~~
Main.cpp:56:63: warning: 'time1' may be used uninitialized in this function [-Wmaybe-uninitialized]
56 | if (up.count(stuff[i][2]) && up.count(stuff[j][2])) time1 /= 2;
| ~~~~~~^~~~
# | 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... |