Submission #1222481

#TimeUsernameProblemLanguageResultExecution timeMemory
1222481AriadnaNaval battle (CEOI24_battle)C++20
30 / 100
340 ms35412 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); 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 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...