QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#564528#9161. Naval battleBucketsmith6 2320ms139680kbC++204.3kb2024-09-15 08:59:292024-09-15 08:59:31

Judging History

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

  • [2024-09-15 08:59:31]
  • 评测
  • 测评结果:6
  • 用时:2320ms
  • 内存:139680kb
  • [2024-09-15 08:59:29]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

using pii = pair<int, int>;
using node = tuple<int, int, int>;
const int N = 2e5 + 10;

int n, x[N], y[N], z[N];
char dir[N];

bool crashed[N];

/*  
    0: x
    1: y
    2: x + y
    3: x - y
    0: N
    4: S
    8: W
    12: E
*/

int chg[256];

map<int, set<pii> > mp[16];

pii findCollide(int p) {
    pii ans = {INT_MAX, 0};
    if(dir[p] == 'E') {
        auto it = mp[0 ^ chg['W']][x[p]].lower_bound(pii{y[p], p});
        if(it != mp[0 ^ chg['W']][x[p]].end())
            ans = min(ans, pii{(it->first - y[p]) / 2, it->second});
        
        it = mp[2 ^ chg['N']][x[p] - y[p]].lower_bound(pii{x[p], p});
        if(it != mp[2 ^ chg['N']][x[p] - y[p]].end())
            ans = min(ans, pii{it->first - x[p], it->second});

        it = mp[3 ^ chg['S']][x[p] + y[p]].lower_bound(pii{x[p], p});
        if(it != mp[3 ^ chg['S']][x[p] + y[p]].begin()) {
            it --;
            ans = min(ans, pii{x[p] - it->first, it->second});
        }
    }else if(dir[p] == 'S') {
        auto it = mp[1 ^ chg['N']][y[p]].lower_bound(pii{x[p], p});
        if(it != mp[1 ^ chg['N']][y[p]].end())
            ans = min(ans, pii{(it->first - x[p]) / 2, it->second});
        
        it = mp[2 ^ chg['W']][x[p] - y[p]].lower_bound(pii{x[p], p});
        if(it != mp[2 ^ chg['W']][x[p] - y[p]].end())
            ans = min(ans, pii{it->first - x[p], it->second});

        it = mp[3 ^ chg['E']][x[p] + y[p]].lower_bound(pii{x[p], p});
        if(it != mp[3 ^ chg['E']][x[p] + y[p]].begin()) {
            it --;
            ans = min(ans, pii{x[p] - it->first, it->second});
        }
    }else if(dir[p] == 'N') {
        auto it = mp[1 ^ chg['S']][y[p]].lower_bound(pii{x[p], p});
        if(it != mp[1 ^ chg['S']][y[p]].begin()) {
            it --;
            ans = min(ans, pii{(x[p] - it->first) / 2, it->second});
        }
        
        it = mp[2 ^ chg['E']][x[p] - y[p]].lower_bound(pii{x[p], p});
        if(it != mp[2 ^ chg['E']][x[p] - y[p]].begin()) {
            it --;
            ans = min(ans, pii{x[p] - it->first, it->second});
        }

        it = mp[3 ^ chg['W']][x[p] + y[p]].lower_bound(pii{x[p], p});
        if(it != mp[3 ^ chg['W']][x[p] + y[p]].end())
            ans = min(ans, pii{it->first - x[p], it->second});
    }
    return ans;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    chg['S'] = 4;
    chg['W'] = 8;
    chg['E'] = 12;

    cin >> n;
    for(int i = 1; i <= n; i ++) {
        cin >> x[i] >> y[i] >> dir[i];
        z[i] = chg[dir[i]];
        mp[0 ^ z[i]][x[i]].insert({y[i], i});
        mp[1 ^ z[i]][y[i]].insert({x[i], i});
        mp[2 ^ z[i]][x[i] - y[i]].insert({x[i], i});
        mp[3 ^ z[i]][x[i] + y[i]].insert({x[i], i});
    }

    priority_queue<node, vector<node>, greater<node> > q;

    for(int i = 1; i <= n; i ++) {
        auto [t, b] = findCollide(i);
        //cout << "find " << i << " = " << t << ", " << b << endl;
        if(b) q.push({t, i, b});
    }

    while(q.size()) {
        auto [t, a, b] = q.top();
        q.pop();

        if(crashed[a] || crashed[b]) {
            if(!crashed[a]) {
                auto [t, b] = findCollide(a);
                if(b) q.push({t, a, b});
            }
            continue;
        }

        vector<pii> v;
        v.emplace_back(a, b);

        while(q.size() && get<0>(q.top()) == t) {
            auto [t, a, b] = q.top();
            q.pop();

            if(crashed[a] || crashed[b]) {
                if(!crashed[a]) {
                    auto [t, b] = findCollide(a);
                    if(b) q.push({t, a, b});
                }
                continue;
            }
            v.emplace_back(a, b);
        }

        for(auto [a, b] : v) {
            crashed[a] = crashed[b] = true;
            for(auto i : {a, b}) {
                mp[0 ^ z[i]][x[i]].erase({y[i], i});
                mp[1 ^ z[i]][y[i]].erase({x[i], i});
                mp[2 ^ z[i]][x[i] - y[i]].erase({x[i], i});
                mp[3 ^ z[i]][x[i] + y[i]].erase({x[i], i});
            }
            //cout << a << " and " << b << " crashed at " << t << "\n";
        }
    }

    for(int i = 1; i <= n; i ++)
        if(!crashed[i]) cout << i << " ";
    cout << "\n";
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 6
Accepted

Test #1:

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

input:

2
675333810 792019962 W
851860476 960355168 W

output:

1 2 

result:

ok 

Test #2:

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

input:

2
714148610 688520844 W
359519570 789553998 S

output:

1 2 

result:

ok 

Test #3:

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

input:

2
743286406 87591094 E
108453484 326740470 S

output:

1 2 

result:

ok 

Test #4:

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

input:

2
629499666 659260200 W
391550936 897208930 N

output:



result:

ok 

Test #5:

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

input:

2
509095668 374922996 W
325521434 191348762 S

output:



result:

ok 

Test #6:

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

input:

2
357656592 713571312 E
456601638 614626266 S

output:



result:

ok 

Test #7:

score: 6
Accepted
time: 1ms
memory: 5588kb

input:

2
353512742 374956722 W
265604916 462864548 N

output:



result:

ok 

Test #8:

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

input:

2
253519292 302668732 E
436627396 119560628 S

output:



result:

ok 

Test #9:

score: 6
Accepted
time: 1ms
memory: 5912kb

input:

2
741954822 709863076 W
516385128 484293380 S

output:

1 2 

result:

ok 

Test #10:

score: 6
Accepted
time: 1ms
memory: 5600kb

input:

2
268851874 524109226 E
503673708 758931058 N

output:

1 2 

result:

ok 

Test #11:

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

input:

2
629380956 395789270 S
557401140 467769088 E

output:

1 2 

result:

ok 

Test #12:

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

input:

2
606361496 587557658 N
667076156 526843000 W

output:

1 2 

result:

ok 

Test #13:

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

input:

2
270428340 629167054 N
270428342 179345630 S

output:

1 2 

result:

ok 

Subtask #2:

score: 0
Wrong Answer

Test #14:

score: 12
Accepted
time: 0ms
memory: 3944kb

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:



result:

ok 

Test #15:

score: 12
Accepted
time: 0ms
memory: 3620kb

input:

100
70 62 N
56 42 N
42 56 W
64 4 N
50 48 W
56 76 N
78 20 W
96 96 W
60 72 N
44 24 N
2 10 N
52 80 W
38 30 N
94 4 W
58 74 W
68 30 W
54 76 N
0 68 N
36 32 N
10 58 W
70 60 W
86 92 N
100 78 W
2 66 W
20 48 N
16 52 N
8 60 N
98 94 N
86 46 W
74 24 W
26 42 W
66 66 W
28 40 W
56 12 W
90 42 W
8 4 W
76 30 W
78 54 W...

output:



result:

ok 

Test #16:

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

input:

100
36 44 E
96 66 E
28 20 E
36 2 E
32 64 W
76 58 E
82 20 E
76 50 E
22 48 W
38 52 E
90 16 N
22 12 W
64 82 S
84 14 E
92 52 E
76 36 E
72 52 N
100 58 S
82 4 E
2 0 N
90 100 E
68 8 S
24 36 S
80 86 W
72 56 W
8 66 W
84 18 S
18 60 N
64 96 E
2 76 S
74 90 E
64 0 S
12 10 S
56 40 S
40 6 S
2 4 S
74 2 S
90 80 N
2 ...

output:

1 4 5 6 8 10 11 12 13 14 15 17 18 19 20 21 26 28 29 30 31 32 35 36 38 40 41 45 46 47 48 50 53 55 56 58 59 60 62 63 65 66 67 68 69 70 73 74 76 77 78 81 84 85 86 88 91 92 93 95 96 98 99 

result:

wrong answer 

Subtask #3:

score: 0
Skipped

Dependency #2:

0%

Subtask #4:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

0%

Subtask #5:

score: 0
Skipped

Dependency #4:

0%

Subtask #6:

score: 0
Wrong Answer

Test #58:

score: 0
Wrong Answer
time: 2320ms
memory: 139680kb

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:

9710 78188 79720 

result:

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

Subtask #7:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

0%