QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#528366 | #9161. Naval battle | Dimash# | 6 | 1ms | 5776kb | C++17 | 4.0kb | 2024-08-23 13:18:45 | 2024-08-23 13:18:45 |
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 12, MOD = (int)1e9 + 7;
int n;
map<int,set<array<int,3>>> v[4],h[4],d[4],db[4];
bool dead[N];
int conv(char dir) {
if(dir == 'N') {
return 0;
} else if(dir == 'E') {
return 1;
} else if(dir == 'S') {
return 2;
}
return 3;
}
void add(int x,int y,int dir,int i) {
if(dir == 1 || dir == 3) {
h[dir][y].insert({x,y,i});
} else {
v[dir][x].insert({x,y,i});
}
d[dir][x + y].insert({x,y,i});
db[dir][x - y].insert({x,y,i});
}
int cur[N];
set<pair<int,int>> st;
void del(int x,int y,int dir,int i) {
dead[i] = 1;
st.erase({cur[i],i});
if(dir == 1 || dir == 3) {
h[dir][y].erase({x,y,i});
} else {
v[dir][x].erase({x,y,i});
}
d[dir][x + y].erase({x,y,i});
db[dir][x - y].erase({x,y,i});
}
int x[N],y[N],dir[N];
const int inf = (int)1e9 + 2;
const int dx[] = {0,1,0,-1},dy[] = {-1,0,1,0};
int dist(int i,int j) {
if(i == j || j == -1) return inf;
int ret = abs(x[i] - x[j]) / 2 + abs(y[i] - y[j]) / 2;
int x1 = x[i] + dx[dir[i]] * ret,y1 = y[i] + dy[dir[i]] * ret;
int x2 = x[j] + dx[dir[j]] * ret,y2 = y[j] + dy[dir[j]] * ret;
return (x1 == x2 && y1 == y2 ? ret : inf);
}
int nx(set<array<int,3>> &st,int i){
array<int,3> f = {x[i],y[i],i};
auto it = st.lower_bound(f);
if(it == st.end()) return -1;
return (*it)[2];
}
int prev(set<array<int,3>> &st,int i) {
array<int,3> f = {x[i],y[i],i};
auto it = st.lower_bound(f);
if(it == st.begin()) return -1;
it--;
return (*it)[2];
}
int calc(int i) {
int ret = inf;
for(int j = 1;j <= n;j++) {
if(!dead[j]) {
ret = min(ret,dist(i,j));
}
}
return ret;
for(int k = 0;k < 4;k++) {
if(dir[i] == k) continue;
if(dir[i] % 2 == k % 2) {
if(k % 2 == 1) {
int j = nx(h[k][y[i]],i);
ret = min(ret,dist(i,j));
j = prev(h[k][y[i]],i);
ret = min(ret,dist(i,j));
} else {
int j = nx(v[k][x[i]],i);
ret = min(ret,dist(i,j));
j = prev(v[k][x[i]],i);
ret = min(ret,dist(i,j));
}
} else {
{
int j = nx(d[k][x[i] + y[i]],i);
ret = min(ret,dist(i,j));
j = prev(d[k][x[i] + y[i]],i);
ret = min(ret,dist(i,j));
}
{
int j = nx(db[k][x[i] - y[i]],i);
ret = min(ret,dist(i,j));
j = prev(db[k][x[i] - y[i]],i);
ret = min(ret,dist(i,j));
}
}
}
return ret;
}
map<array<int,3>,int> id;
void test() {
cin >> n;
for(int i = 1;i <= n;i++) {
char di;
cin >> x[i] >> y[i] >> di;
dir[i] = conv(di);
add(x[i],y[i],dir[i],i);
st.insert({0,i});
id[{x[i],y[i],dir[i]}] = i;
}
while(!st.empty()) {
auto [val,v] = (*st.begin());
if(val == inf) {
break;
}
st.erase(st.begin());
int _ = calc(v);
assert(_ >= val);
if(val != _) {
cur[v] = _;
st.insert({_,v});
continue;
}
int x1 = x[v] + dx[dir[v]] * val,y1 = y[v] + dy[dir[v]] * val;
for(int i = 0;i < 4;i++) {
int X = x1 + dx[i],Y = y1 +dy[i];
int d;
if(i % 2 == 0) {
d = 2 - i;
} else {
d = 4 - i;
}
if(id.count({X,Y,d})) {
del(X,Y,d,id[{X,Y,d}]);
}
}
}
for(auto [x,y]:st) {
cout << y << '\n';
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int t = 1;
// cin >> t;
while(t--) {
test();
}
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 6
Accepted
Test #1:
score: 6
Accepted
time: 0ms
memory: 3612kb
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: 3632kb
input:
2 743286406 87591094 E 108453484 326740470 S
output:
1 2
result:
ok
Test #4:
score: 6
Accepted
time: 0ms
memory: 5728kb
input:
2 629499666 659260200 W 391550936 897208930 N
output:
result:
ok
Test #5:
score: 6
Accepted
time: 1ms
memory: 5752kb
input:
2 509095668 374922996 W 325521434 191348762 S
output:
result:
ok
Test #6:
score: 6
Accepted
time: 1ms
memory: 5676kb
input:
2 357656592 713571312 E 456601638 614626266 S
output:
result:
ok
Test #7:
score: 6
Accepted
time: 0ms
memory: 3756kb
input:
2 353512742 374956722 W 265604916 462864548 N
output:
result:
ok
Test #8:
score: 6
Accepted
time: 0ms
memory: 3708kb
input:
2 253519292 302668732 E 436627396 119560628 S
output:
result:
ok
Test #9:
score: 6
Accepted
time: 1ms
memory: 5760kb
input:
2 741954822 709863076 W 516385128 484293380 S
output:
1 2
result:
ok
Test #10:
score: 6
Accepted
time: 0ms
memory: 3696kb
input:
2 268851874 524109226 E 503673708 758931058 N
output:
1 2
result:
ok
Test #11:
score: 6
Accepted
time: 1ms
memory: 5756kb
input:
2 629380956 395789270 S 557401140 467769088 E
output:
1 2
result:
ok
Test #12:
score: 6
Accepted
time: 0ms
memory: 3700kb
input:
2 606361496 587557658 N 667076156 526843000 W
output:
1 2
result:
ok
Test #13:
score: 6
Accepted
time: 1ms
memory: 5720kb
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: 1ms
memory: 5776kb
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: 1ms
memory: 5708kb
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: 0ms
memory: 3764kb
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 2 3 4 5 6 8 10 11 12 13 14 15 19 20 21 23 24 26 28 29 30 31 32 33 35 36 37 39 40 41 42 45 46 47 49 50 51 53 54 56 57 58 59 61 62 63 64 65 69 70 71 73 74 76 77 78 79 81 83 84 85 87 89 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
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:
100%
Accepted
Dependency #2:
0%