| Task: | Island |
| Sender: | jaaguptamme |
| Submission time: | 2026-04-16 12:43:50 +0300 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | 100 |
| subtask | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 10 |
| #2 | ACCEPTED | 6 |
| #3 | ACCEPTED | 16 |
| #4 | ACCEPTED | 28 |
| #5 | ACCEPTED | 40 |
| test | verdict | time | subtask | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | 1, 5 | details |
| #2 | ACCEPTED | 0.00 s | 1, 2, 3, 4, 5 | details |
| #3 | ACCEPTED | 0.02 s | 1, 5 | details |
| #4 | ACCEPTED | 0.02 s | 1, 5 | details |
| #5 | ACCEPTED | 0.02 s | 1, 3, 5 | details |
| #6 | ACCEPTED | 0.01 s | 1, 2, 4, 5 | details |
| #7 | ACCEPTED | 0.01 s | 1, 2, 4, 5 | details |
| #8 | ACCEPTED | 0.02 s | 1, 5 | details |
| #9 | ACCEPTED | 0.02 s | 1, 5 | details |
| #10 | ACCEPTED | 0.02 s | 1, 3, 4, 5 | details |
| #11 | ACCEPTED | 0.02 s | 1, 3, 5 | details |
| #12 | ACCEPTED | 0.02 s | 1, 4, 5 | details |
| #13 | ACCEPTED | 0.02 s | 1, 3, 4, 5 | details |
| #14 | ACCEPTED | 0.02 s | 1, 4, 5 | details |
| #15 | ACCEPTED | 0.02 s | 1, 5 | details |
| #16 | ACCEPTED | 0.02 s | 1, 5 | details |
| #17 | ACCEPTED | 0.02 s | 1, 5 | details |
| #18 | ACCEPTED | 0.02 s | 1, 5 | details |
| #19 | ACCEPTED | 0.44 s | 2, 4, 5 | details |
| #20 | ACCEPTED | 0.44 s | 2, 4, 5 | details |
| #21 | ACCEPTED | 0.44 s | 2, 4, 5 | details |
| #22 | ACCEPTED | 0.47 s | 2, 4, 5 | details |
| #23 | ACCEPTED | 0.82 s | 3, 5 | details |
| #24 | ACCEPTED | 0.83 s | 3, 5 | details |
| #25 | ACCEPTED | 0.83 s | 3, 5 | details |
| #26 | ACCEPTED | 0.78 s | 3, 5 | details |
| #27 | ACCEPTED | 0.72 s | 3, 4, 5 | details |
| #28 | ACCEPTED | 0.61 s | 3, 4, 5 | details |
| #29 | ACCEPTED | 0.65 s | 4, 5 | details |
| #30 | ACCEPTED | 0.65 s | 4, 5 | details |
| #31 | ACCEPTED | 0.56 s | 4, 5 | details |
| #32 | ACCEPTED | 0.55 s | 4, 5 | details |
| #33 | ACCEPTED | 0.52 s | 4, 5 | details |
| #34 | ACCEPTED | 0.63 s | 4, 5 | details |
| #35 | ACCEPTED | 0.81 s | 5 | details |
| #36 | ACCEPTED | 0.83 s | 5 | details |
| #37 | ACCEPTED | 0.82 s | 5 | details |
| #38 | ACCEPTED | 0.82 s | 5 | details |
| #39 | ACCEPTED | 0.78 s | 5 | details |
| #40 | ACCEPTED | 0.79 s | 5 | details |
| #41 | ACCEPTED | 0.70 s | 5 | details |
| #42 | ACCEPTED | 0.75 s | 5 | details |
| #43 | ACCEPTED | 0.76 s | 5 | details |
| #44 | ACCEPTED | 0.79 s | 5 | details |
Code
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
struct DSU{
vector<int>p;
DSU(int N):p(N){
iota(p.begin(),p.end(),0);
}
int f(int u){
if(u==p[u])return u;
return p[u]=f(p[u]);
}
void conn(int u,int v){
u=f(u);v=f(v);
if(u==v)return;
p[u]=v;
}
};
struct LCA{
int N,M;
vector<vector<int>>par;
vector<int>dep;
LCA(){}
LCA(vector<set<int>>&g):N(g.size()){
M=log2(N)+1;
dep.resize(N);
par=vector<vector<int>>(M,vector<int>(N));
for(int i=0;i<N;i++){
if(g[i].size()){
dfs(g,i,i);
break;
}
}
for(int i=0;i+1<M;i++){
for(int j=0;j<N;j++){
par[i+1][j]=par[i][par[i][j]];
}
}
}
void dfs(vector<set<int>>&g,int u,int pr){
dep[u]=dep[pr]+1;
par[0][u]=pr;
for(auto v:g[u]){
if(v==pr)continue;
dfs(g,v,u);
}
}
int kaugus(int u,int v){
if(dep[u]<dep[v])swap(u,v);
int dist=0;
for(int i=M-1;i>=0;i--){
if((dep[u]-(1<<i))>=dep[v]){
u=par[i][u];
dist+=(1<<i);
}
}
if(u==v)return dist;
for(int i=M-1;i>=0;i--){
if(par[i][u]!=par[i][v]){
dist+=2*(1<<i);
u=par[i][u];
v=par[i][v];
}
}
return dist+2;
}
};
struct Saar{
int N;
DSU D;
LCA L;
Saar(vector<vector<char>>&A, int N):N(N),D(N*N){
for(int i=0;i<N;i++){
for(int j=0;j<N-1;j++){
if(A[i][j]=='#'&&A[i][j+1]=='#')D.conn(getInd(i,j),getInd(i,j+1));
}
}
vector<set<int>>servad(N*N);
for(int i=0;i+1<N;i++){
for(int j=0;j<N;j++){
if(A[i][j]=='#'&&A[i+1][j]=='#'){
int u=D.f(getInd(i,j));
int v=D.f(getInd(i+1,j));
servad[u].insert(v);
servad[v].insert(u);
}
}
}
L=LCA(servad);
}
int getInd(int i,int j){
return i*N+j;
}
int kaugus(int x1,int y1,int x2,int y2){
return L.kaugus(D.f(getInd(x1,y1)),D.f(getInd(x2,y2)));
}
};
int main()
{ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n,q;
cin>>n>>q;
vector<vector<char>>A(n,vector<char>(n)),B(n,vector<char>(n));
for(int i=0;i<n;i++){
for(auto &el:A[i])cin>>el;
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)B[i][j]=A[j][i];
}
Saar S(A,n),T(B,n);
while(q--){
int x1,y1,x2,y2;
cin>>x1>>y1>>x2>>y2;
x1--;y1--;x2--;y2--;
cout<<S.kaugus(x1,y1,x2,y2)+T.kaugus(y1,x1,y2,x2)<<'\n';
}
return 0;
}
Test details
Test 1
Subtask: 1, 5
Verdict: ACCEPTED
| input |
|---|
| 8 4 ........ ..####.. .##.###. .##.###. ... |
| correct output |
|---|
| 5 0 17 3 |
| user output |
|---|
| 5 0 17 3 |
Test 2
Subtask: 1, 2, 3, 4, 5
Verdict: ACCEPTED
| input |
|---|
| 3 1 ... .#. ... 2 2 2 2 |
| correct output |
|---|
| 0 |
| user output |
|---|
| 0 |
Test 3
Subtask: 1, 5
Verdict: ACCEPTED
| input |
|---|
| 199 196 ................................. |
| correct output |
|---|
| 468 605 825 532 496 ... |
| user output |
|---|
| 468 605 825 532 496 ... |
Test 4
Subtask: 1, 5
Verdict: ACCEPTED
| input |
|---|
| 200 200 ................................. |
| correct output |
|---|
| 112 347 142 459 239 ... |
| user output |
|---|
| 112 347 142 459 239 ... |
Test 5
Subtask: 1, 3, 5
Verdict: ACCEPTED
| input |
|---|
| 200 200 ................................. |
| correct output |
|---|
| 381 544 94 532 98 ... |
| user output |
|---|
| 381 544 94 532 98 ... |
Test 6
Subtask: 1, 2, 4, 5
Verdict: ACCEPTED
| input |
|---|
| 200 200 ................................. |
| correct output |
|---|
| 133 73 81 82 53 ... |
| user output |
|---|
| 133 73 81 82 53 ... |
Test 7
Subtask: 1, 2, 4, 5
Verdict: ACCEPTED
| input |
|---|
| 200 200 ................................. |
| correct output |
|---|
| 139 52 101 14 144 ... |
| user output |
|---|
| 139 52 101 14 144 ... |
Test 8
Subtask: 1, 5
Verdict: ACCEPTED
| input |
|---|
| 200 200 ................................. |
| correct output |
|---|
| 236 555 878 632 829 ... |
| user output |
|---|
| 236 555 878 632 829 ... |
Test 9
Subtask: 1, 5
Verdict: ACCEPTED
| input |
|---|
| 200 200 ................................. |
| correct output |
|---|
| 425 296 698 577 422 ... |
| user output |
|---|
| 425 296 698 577 422 ... |
Test 10
Subtask: 1, 3, 4, 5
Verdict: ACCEPTED
| input |
|---|
| 200 200 ................................. |
| correct output |
|---|
| 1365 7284 11808 6136 9283 ... |
| user output |
|---|
| 1365 7284 11808 6136 9283 ... |
Test 11
Subtask: 1, 3, 5
Verdict: ACCEPTED
| input |
|---|
| 200 200 ................................. |
| correct output |
|---|
| 6292 17954 16728 8938 1335 ... |
| user output |
|---|
| 6292 17954 16728 8938 1335 ... |
Test 12
Subtask: 1, 4, 5
Verdict: ACCEPTED
| input |
|---|
| 200 200 ................................. |
| correct output |
|---|
| 27 141 269 127 61 ... |
| user output |
|---|
| 27 141 269 127 61 ... |
Test 13
Subtask: 1, 3, 4, 5
Verdict: ACCEPTED
| input |
|---|
| 200 200 ................................. |
| correct output |
|---|
| 19552 19544 19478 19402 19456 ... |
| user output |
|---|
| 19552 19544 19478 19402 19456 ... |
Test 14
Subtask: 1, 4, 5
Verdict: ACCEPTED
| input |
|---|
| 200 200 ................................. |
| correct output |
|---|
| 17624 17515 17468 17689 17510 ... |
| user output |
|---|
| 17624 17515 17468 17689 17510 ... |
Test 15
Subtask: 1, 5
Verdict: ACCEPTED
| input |
|---|
| 200 200 ................................. |
| correct output |
|---|
| 1584 1433 567 2248 1030 ... |
| user output |
|---|
| 1584 1433 567 2248 1030 ... |
Test 16
Subtask: 1, 5
Verdict: ACCEPTED
| input |
|---|
| 200 200 ................................. |
| correct output |
|---|
| 5872 6374 60 323 5311 ... |
| user output |
|---|
| 5872 6374 60 323 5311 ... |
Test 17
Subtask: 1, 5
Verdict: ACCEPTED
| input |
|---|
| 200 200 ................................. |
| correct output |
|---|
| 1852 213 252 3861 1835 ... |
| user output |
|---|
| 1852 213 252 3861 1835 ... |
Test 18
Subtask: 1, 5
Verdict: ACCEPTED
| input |
|---|
| 200 200 ................................. |
| correct output |
|---|
| 1564 2709 866 1318 1758 ... |
| user output |
|---|
| 1564 2709 866 1318 1758 ... |
Test 19
Subtask: 2, 4, 5
Verdict: ACCEPTED
| input |
|---|
| 997 100000 ................................. |
| correct output |
|---|
| 150 531 370 518 508 ... |
| user output |
|---|
| 150 531 370 518 508 ... |
Test 20
Subtask: 2, 4, 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 390 278 783 1269 249 ... |
| user output |
|---|
| 390 278 783 1269 249 ... |
Test 21
Subtask: 2, 4, 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 63 142 813 683 731 ... |
| user output |
|---|
| 63 142 813 683 731 ... |
Test 22
Subtask: 2, 4, 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 949 876 1209 494 1033 ... |
| user output |
|---|
| 949 876 1209 494 1033 ... |
Test 23
Subtask: 3, 5
Verdict: ACCEPTED
| input |
|---|
| 997 100000 ................................. |
| correct output |
|---|
| 714 2683 3699 2085 7850 ... |
| user output |
|---|
| 714 2683 3699 2085 7850 ... |
Test 24
Subtask: 3, 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 5081 1819 1050 4610 528 ... |
| user output |
|---|
| 5081 1819 1050 4610 528 ... |
Test 25
Subtask: 3, 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 3554 6322 6648 2882 1490 ... |
| user output |
|---|
| 3554 6322 6648 2882 1490 ... |
Test 26
Subtask: 3, 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 433976 81646 87810 48080 110879 ... |
| user output |
|---|
| 433976 81646 87810 48080 110879 ... |
Test 27
Subtask: 3, 4, 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 207982 140036 208364 51912 56826 ... |
| user output |
|---|
| 207982 140036 208364 51912 56826 ... |
Test 28
Subtask: 3, 4, 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 497525 497563 498000 496804 497335 ... |
| user output |
|---|
| 497525 497563 498000 496804 497335 ... |
Test 29
Subtask: 4, 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 38580 2097 9795 38033 1639 ... |
| user output |
|---|
| 38580 2097 9795 38033 1639 ... |
Test 30
Subtask: 4, 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 33 20900 25028 1782 13599 ... |
| user output |
|---|
| 33 20900 25028 1782 13599 ... |
Test 31
Subtask: 4, 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 1421 1122 1840 834 443 ... |
| user output |
|---|
| 1421 1122 1840 834 443 ... |
Test 32
Subtask: 4, 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 1378 1751 2274 250 811 ... |
| user output |
|---|
| 1378 1751 2274 250 811 ... |
Test 33
Subtask: 4, 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 1126 886 544 223 272 ... |
| user output |
|---|
| 1126 886 544 223 272 ... |
Test 34
Subtask: 4, 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 327286 447779 447534 448307 446997 ... |
| user output |
|---|
| 327286 447779 447534 448307 446997 ... |
Test 35
Subtask: 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 2597 1473 1933 2691 1837 ... |
| user output |
|---|
| 2597 1473 1933 2691 1837 ... |
Test 36
Subtask: 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 553 4357 3147 6951 1573 ... |
| user output |
|---|
| 553 4357 3147 6951 1573 ... |
Test 37
Subtask: 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 1723 2039 1871 5638 4256 ... |
| user output |
|---|
| 1723 2039 1871 5638 4256 ... |
Test 38
Subtask: 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 1546 704 2796 3802 1870 ... |
| user output |
|---|
| 1546 704 2796 3802 1870 ... |
Test 39
Subtask: 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 3115 2042 2083 3227 740 ... |
| user output |
|---|
| 3115 2042 2083 3227 740 ... |
Test 40
Subtask: 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 5222 3211 5230 1772 2310 ... |
| user output |
|---|
| 5222 3211 5230 1772 2310 ... |
Test 41
Subtask: 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 159214 68851 200821 141404 145704 ... |
| user output |
|---|
| 159214 68851 200821 141404 145704 ... |
Test 42
Subtask: 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 1843 25028 124430 84542 131339 ... |
| user output |
|---|
| 1843 25028 124430 84542 131339 ... |
Test 43
Subtask: 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 111206 75799 12026 142133 20483 ... |
| user output |
|---|
| 111206 75799 12026 142133 20483 ... |
Test 44
Subtask: 5
Verdict: ACCEPTED
| input |
|---|
| 1000 100000 ................................. |
| correct output |
|---|
| 20360 9075 12187 54923 54574 ... |
| user output |
|---|
| 20360 9075 12187 54923 54574 ... |
