제출 #1222466

#제출 시각아이디문제언어결과실행 시간메모리
1222466AriadnaNaval battle (CEOI24_battle)C++20
20 / 100
3096 ms16892 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(); } if (n == 2) { bool survive = true; int cnt = 0; while (cnt <= 1e9 && survive) { s[0].x += s[0].move.first; s[0].y += s[0].move.second; s[1].x += s[1].move.first; s[1].y += s[1].move.second; if (s[0].x == s[1].x && s[1].y == s[0].y) survive = false; } if (survive) cout << 1 << endl << 2 << endl; } else { int c = 2e5+1; map<pair<int, int>, int> grid; vector<bool> sink(n, 0); for (int j = 0; j <= c; ++j) { grid.clear(); for (int i = 0; i < n; ++i) { if (sink[i]) continue; if (grid.find({s[i].x, s[i].y}) != grid.end()) { sink[i] = true; sink[grid[{s[i].x, s[i].y}]] = true; } else grid[{s[i].x, s[i].y}] = i; s[i].x += s[i].move.first; s[i].y += s[i].move.second; } } 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...