QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#497336#9161. Naval battleQwerty1232#0 1ms3828kbC++234.4kb2024-07-29 01:39:472024-07-29 01:39:47

Judging History

你现在查看的是最新测评结果

  • [2024-07-29 01:39:47]
  • 评测
  • 测评结果:0
  • 用时:1ms
  • 内存:3828kb
  • [2024-07-29 01:39:47]
  • 提交

answer

#include <bits/stdc++.h>

constexpr std::string_view dir_ch = "ENWS";
constexpr std::array<std::pair<int, int>, 4> dlt = {{{1, 0}, {0, -1}, {-1, 0}, {0, 1}}};

struct Fuck {
    int x, y;
    int dir;
    int id;
};

int32_t main() {
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int n;
    std::cin >> n;
    std::vector<Fuck> input(n);
    // for (auto& i : input) {
    for (int i = 0; i < n; i++) {
        std::cin >> input[i].x >> input[i].y;
        char ch;
        std::cin >> ch;
        input[i].dir = dir_ch.find(ch);
        input[i].id = i;
    }

    std::vector<std::set<std::array<int, 3>>> set;
    std::vector<std::set<std::array<int, 3>>> set2;
    std::multiset<std::array<int, 3>> set3;

    auto get_min = [&](int i) {
        auto &st = set[i];
        auto &st2 = set2[i];

        std::array<int, 3> min{(int)2.1e9, -1, -1};
        if (st.empty())
            return min;
        for (auto it = std::next(st.begin()); it != st.end(); it++) {
            auto [x1, d1, id1] = *it;
            auto [x2, d2, id2] = *std::prev(it);
            if (d1 == 1 && d2 == -1) {
                min = std::min(min, {x2 - x1, id1, id2});
            }
        }
        return min;
    };
    auto insert = [&](int i, int x, int dr, int id) {
        set3.extract(get_min(i));

        auto &st = set[i];
        auto &st2 = set2[i];
        st.insert({x, dr, id});

        set3.insert(get_min(i));
    };
    auto erase = [&](int i, int x, int dr, int id) {
        set3.extract(get_min(i));

        auto &st = set[i];
        auto &st2 = set2[i];
        st.erase({x, dr, id});

        set3.insert(get_min(i));
    };
    // auto get_global_min = [&]() {
    //     return *set3.begin();
    // };

    std::vector<std::vector<std::array<int, 3>>> vec;
    for (auto [i, f] : std::vector<std::pair<int, int (*)(const Fuck &)>>{
             {0, [](const Fuck &a) -> int { return a.x; }},
             {1, [](const Fuck &a) -> int { return a.y; }},
             {2, [](const Fuck &a) -> int { return a.x + a.y; }},
             {3, [](const Fuck &a) -> int { return a.x + a.y; }},
             {4, [](const Fuck &a) -> int { return a.x - a.y; }},
             {5, [](const Fuck &a) -> int { return a.x - a.y; }}}) {
        vec.emplace_back(n);

        auto cmp = [&](auto a, auto b) { return f(a) < f(b); };
        std::sort(input.begin(), input.end(), cmp);

        for (int it = 0; it < input.size();) {
            int it2 = std::upper_bound(input.begin() + it, input.end(), input[it], cmp) - input.begin();
            if (it + 1 == it2) {
                it++;
                continue;
            }
            int s = set.size();
            set.push_back({}), set2.push_back({});
            auto &st = set.back();
            auto &st2 = set2.back();

            for (; it < it2; it++) {
                auto [x, y, dr, id] = input[it];
                /*  */ if (i == 0 && (1 << dr & 0b10'10)) {
                    vec[i][id] = {s, x, (dir_ch[dr] == 'E') * 2 - 1};
                } else if (i == 1 && (1 << dr & 0b01'01)) {
                    vec[i][id] = {s, y, (dir_ch[dr] == 'S') * 2 - 1};
                } else if (i == 2 && (1 << dr & 0b10'01)) {
                    vec[i][id] = {s, y - x, (dir_ch[dr] == 'E') * 2 - 1};
                } else if (i == 3 && (1 << dr & 0b01'10)) {
                    vec[i][id] = {s, y - x, (dir_ch[dr] == 'W') * 2 - 1};
                } else if (i == 4 && (1 << dr & 0b00'11)) {
                    vec[i][id] = {s, x + y, (dir_ch[dr] == 'E') * 2 - 1};
                } else if (i == 5 && (1 << dr & 0b11'00)) {
                    vec[i][id] = {s, x + y, (dir_ch[dr] == 'S') * 2 - 1};
                }
                insert(vec[i][id][0], vec[i][id][1], vec[i][id][2], id);
            }
        }
    }

    std::set<int> alive;
    for (int i = 0; i < n; i++) {
        alive.insert(i);
    }
    while (set3.size()) {
        auto [mn, id1, id2] = *set3.begin();
        if (id1 == -1) {
            break;
        }
        for (auto id : std::array<int, 2>{id1, id2}) {
            alive.erase(id);
            for (int i = 0; i < vec.size(); i++) {
                erase(vec[i][id][0], vec[i][id][1], vec[i][id][2], id);
            }
        }
    }

    for (auto &i : alive) {
        std::cout << i + 1 << "\n";
    }

    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 6
Accepted
time: 0ms
memory: 3600kb

input:

2
675333810 792019962 W
851860476 960355168 W

output:

1
2

result:

ok 

Test #2:

score: 6
Accepted
time: 0ms
memory: 3632kb

input:

2
714148610 688520844 W
359519570 789553998 S

output:

1
2

result:

ok 

Test #3:

score: 6
Accepted
time: 0ms
memory: 3800kb

input:

2
743286406 87591094 E
108453484 326740470 S

output:

1
2

result:

ok 

Test #4:

score: 0
Wrong Answer
time: 0ms
memory: 3828kb

input:

2
629499666 659260200 W
391550936 897208930 N

output:

1
2

result:

FAIL Unexpected end of file - token expected (/var/uoj_data/9161/4.ans)

Subtask #2:

score: 0
Wrong Answer

Test #14:

score: 0
Wrong Answer
time: 1ms
memory: 3692kb

input:

100
32 46 N
8 24 W
74 86 W
2 76 N
90 70 N
34 74 N
4 68 N
42 26 N
66 94 N
28 40 W
96 12 W
82 78 W
54 24 N
36 42 W
92 68 W
0 26 N
14 54 N
94 66 N
26 52 N
66 12 W
72 6 W
64 96 W
6 20 N
4 22 W
26 42 N
40 28 W
70 76 N
18 60 N
62 16 N
30 48 N
36 36 W
42 36 W
52 94 N
62 98 N
0 78 N
70 2 W
28 50 N
80 80 W
8...

output:

1
2
4
6
7
10
11
14
16
17
20
21
25
30
33
34
35
36
37
38
40
44
45
46
47
48
52
54
56
59
60
61
64
65
66
67
69
71
72
73
76
78
80
81
83
84
86
89
91
92
97
98

result:

FAIL Unexpected end of file - token expected (/var/uoj_data/9161/14.ans)

Subtask #3:

score: 0
Skipped

Dependency #2:

0%

Subtask #4:

score: 0
Skipped

Dependency #1:

0%

Subtask #5:

score: 0
Skipped

Dependency #4:

0%

Subtask #6:

score: 0
Time Limit Exceeded

Test #58:

score: 0
Time Limit Exceeded

input:

200000
526715640 430855204 E
731546662 226024182 S
254814720 702756124 E
227354364 730216480 S
764250602 193320242 S
150102088 807468756 E
204858572 752712272 S
635512190 322058654 E
403910248 553660596 S
257917918 4587926 S
949444340 8126504 S
907805098 49765746 S
553836306 403734538 S
40977864 617...

output:


result:


Subtask #7:

score: 0
Skipped

Dependency #1:

0%