Submission #1241107

#TimeUsernameProblemLanguageResultExecution timeMemory
1241107medvNaval battle (CEOI24_battle)C++20
12 / 100
608 ms1114112 KiB
// Author: Dan Skýpala // O(X^2+NX) grid simulation // Bit well optimized grid simulation where we check for collisions in grid. #include <iostream> #include <vector> #include <unordered_map> #include <utility> using namespace std; #pragma GCC optimize "Ofast" struct xy_hash { size_t operator () (const pair<int, int> &p) const { return (p.first << 20) + p.second; } }; struct Ship { int id; int x; int y; int dx; int dy; Ship(int i, int x0, int y0, char d) { id = i; x = x0; y = y0; dx = d == 'W' ? -1 : (d == 'E' ? 1 : 0); dy = d == 'N' ? -1 : (d == 'S' ? 1 : 0); } void move() { x += dx; y += dy; } pair<int, int> coords() { return {x, y}; } }; int n, max_x = 0, max_y = 0; bool within_bounds(const Ship& s) { return (0 <= s.x && s.x <= max_x) && (0 <= s.y && s.y <= max_y); } int main() { cin >> n; vector<Ship> ships; for (int i=0; i<n; i++) { int x, y; char d; cin >> x >> y >> d; max_x = max(max_x, x); max_y = max(max_y, y); ships.push_back({i, x, y, d}); } vector<vector<int>> grid(max_x+1, vector<int>(max_y+1)); while (true) { bool finished = true; for (Ship s: ships) { if (within_bounds(s)) { finished = false; } } if (finished) break; for (int i=0; i < (int) ships.size(); i++) { ships[i].move(); if (within_bounds(ships[i])) { grid[ships[i].x][ships[i].y]++; } } vector<Ship> remaining_ships; for (Ship s: ships) { if (!within_bounds(s) || grid[s.x][s.y] == 1) { remaining_ships.push_back(s); } } for (Ship s: ships) { if (within_bounds(s)) grid[s.x][s.y] = 0; } ships = remaining_ships; } for (Ship s: ships) { cout << s.id+1 << '\n'; } }
#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...