제출 #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...