제출 #1222488

#제출 시각아이디문제언어결과실행 시간메모리
1222488AriadnaNaval battle (CEOI24_battle)C++20
46 / 100
3106 ms929408 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...