Submission details
Task:Hypyt
Sender:MaksimMoz
Submission time:2025-11-07 14:25:56 +0200
Language:Python3 (CPython3)
Status:READY
Result:0
Feedback
groupverdictscore
#10
#20
#30
#40
#50
Test results
testverdicttimegroup
#10.02 s1, 2, 3, 4, 5details
#20.02 s1, 2, 3, 4, 5details
#30.02 s1, 2, 3, 4, 5details
#40.02 s1, 2, 3, 4, 5details
#50.02 s1, 2, 3, 4, 5details
#6--2, 5details
#7--2, 5details
#80.21 s2, 5details
#9--3, 4, 5details
#10--3, 4, 5details
#11--3, 4, 5details
#12--4, 5details
#13--4, 5details
#14--4, 5details
#15--5details
#16--5details
#17--5details
#18--5details
#19--5details
#20--5details
#210.79 s5details
#22ACCEPTED0.02 s1, 2, 3, 4, 5details
#230.02 s1, 2, 3, 4, 5details
#240.69 s5details
#250.69 s5details
#26--5details
#27ACCEPTED0.67 s5details

Code

import sys
input = sys.stdin.readline


class DSU:
    def __init__(self, n):
        self.p = list(range(n))
        self.r = [1]*n
    def find(self, x):
        while self.p[x] != x:
            self.p[x] = self.p[self.p[x]]
            x = self.p[x]
        return x
    def union(self, a, b):
        a, b = self.find(a), self.find(b)
        if a == b: return
        if self.r[a] < self.r[b]:
            a, b = b, a
        self.p[b] = a
        if self.r[a] == self.r[b]:
            self.r[a] += 1

n, m, q = map(int, input().split())
grid = [input().strip() for _ in range(n)]
id = [[-1]*m for _ in range(n)]
cells = []
k = 0
for i in range(n):
    for j in range(m):
        if grid[i][j] == '.':
            id[i][j] = k
            cells.append((i, j))
            k += 1

dsu = DSU(k)

for i in range(n):
    j = 0
    while j < m:
        if grid[i][j] == '*':
            j += 1
            continue
        start = j
        while j < m and grid[i][j] == '.':
            j += 1
        for x in range(start, j-1):
            dsu.union(id[i][x], id[i][x+1])

for j in range(m):
    i = 0
    while i < n:
        if grid[i][j] == '*':
            i += 1
            continue
        start = i
        while i < n and grid[i][j] == '.':
            i += 1
        for y in range(start, i-1):
            dsu.union(id[y][j], id[y+1][j])

row_sets = [set() for _ in range(k)]
col_sets = [set() for _ in range(k)]
for i, (r, c) in enumerate(cells):
    root = dsu.find(i)
    row_sets[root].add(r)
    col_sets[root].add(c)

rows_to_components = [[] for _ in range(n)]
cols_to_components = [[] for _ in range(m)]
for idx in range(k):
    root = dsu.find(idx)
    for r in row_sets[root]:
        rows_to_components[r].append(root)
    for c in col_sets[root]:
        cols_to_components[c].append(root)

for _ in range(q):
    y1, x1, y2, x2 = map(lambda x: int(x)-1, input().split())
    if id[y1][x1] == -1 or id[y2][x2] == -1:
        print(-1)
        continue
    a = dsu.find(id[y1][x1])
    b = dsu.find(id[y2][x2])

    if a == b:
        print(0)
        continue

    found = False
    if y1 == y2:
        print(1)
        continue
    if x1 == x2:
        print(1)
        continue
    if any(b in rows_to_components[r] for r in row_sets[a]) or any(b in cols_to_components[c] for c in col_sets[a]):
        print(1)
        continue

    found = False
    for r in row_sets[a]:
        for comp in rows_to_components[r]:
            if b in row_sets[comp] or b in col_sets[comp]:
                found = True
                break
        if found: break
    if not found:
        for c in col_sets[a]:
            for comp in cols_to_components[c]:
                if b in row_sets[comp] or b in col_sets[comp]:
                    found = True
                    break
            if found: break

    print(2 if found else -1)

Test details

Test 1 (public)

Group: 1, 2, 3, 4, 5

Verdict:

input
4 6 5
.*.***
*...**
*****.
*..*.*
...

correct output
1
0
3
3
-1

user output
1
0
-1
2
2

Feedback: Incorrect character on line 3 col 1: expected "3", got "-1"

Test 2

Group: 1, 2, 3, 4, 5

Verdict:

input
10 10 10
..........
.....*....
........*.
*.*....*..
...

correct output
1
2
1
2
2
...

user output
0
0
0
0
0
...

Feedback: Incorrect character on line 1 col 1: expected "1", got "0"

Test 3

Group: 1, 2, 3, 4, 5

Verdict:

input
10 10 10
*...***.**
*****.*...
**..**.**.
..**.**.*.
...

correct output
1
2
2
1
2
...

user output
1
1
1
1
1
...

Feedback: Incorrect character on line 2 col 1: expected "2", got "1"

Test 4

Group: 1, 2, 3, 4, 5

Verdict:

input
10 10 10
***.*.****
**********
*.********
.*.***.**.
...

correct output
3
4
2
3
4
...

user output
-1
-1
-1
2
2
...

Feedback: Incorrect character on line 1 col 1: expected "3", got "-1"

Test 5

Group: 1, 2, 3, 4, 5

Verdict:

input
10 10 1
.****.****
**.**..***
**********
*******..*
...

correct output
7

user output
2

Feedback: Incorrect character on line 1 col 1: expected "7", got "2"

Test 6

Group: 2, 5

Verdict:

input
250 250 250
.*...*.....*******..**...*.......

correct output
2
3
3
2
2
...

user output
(empty)

Test 7

Group: 2, 5

Verdict:

input
250 250 250
...*......**.**.*.*..**..*..**...

correct output
2
2
2
2
3
...

user output
(empty)

Test 8

Group: 2, 5

Verdict:

input
250 250 250
**..**..****.****.*.***.***..*...

correct output
2
3
3
3
3
...

user output
-1
-1
-1
-1
-1
...

Feedback: Incorrect character on line 1 col 1: expected "2", got "-1"

Test 9

Group: 3, 4, 5

Verdict:

input
40 40 200000
...*.**.*..*.............*.*.....

correct output
2
2
2
2
2
...

user output
(empty)

Test 10

Group: 3, 4, 5

Verdict:

input
40 40 200000
**.**..*.*.*.******....****.*....

correct output
2
1
3
2
2
...

user output
(empty)

Test 11

Group: 3, 4, 5

Verdict:

input
40 40 200000
.*.*.**.*****.***.*.****.**.**...

correct output
3
3
3
3
3
...

user output
(empty)

Test 12

Group: 4, 5

Verdict:

input
80 80 200000
*....**.***..****...*.....*......

correct output
2
2
2
2
2
...

user output
(empty)

Test 13

Group: 4, 5

Verdict:

input
80 80 200000
.***.*..*.***..*****....**...*...

correct output
3
2
2
3
2
...

user output
(empty)

Test 14

Group: 4, 5

Verdict:

input
80 80 200000
*******.*****.*..*..****...***...

correct output
2
3
1
2
2
...

user output
(empty)

Test 15

Group: 5

Verdict:

input
250 250 200000
*....*..*..*..**..*.........**...

correct output
3
2
2
2
2
...

user output
(empty)

Test 16

Group: 5

Verdict:

input
250 250 200000
..*....*..*......*.**.*.*..***...

correct output
2
2
2
2
2
...

user output
(empty)

Test 17

Group: 5

Verdict:

input
250 250 200000
*..*.*****.*********.****.****...

correct output
3
3
2
2
2
...

user output
(empty)

Test 18

Group: 5

Verdict:

input
250 250 200000
*********.**********.******.**...

correct output
3
3
3
3
3
...

user output
(empty)

Test 19

Group: 5

Verdict:

input
250 250 200000
.*****************************...

correct output
104
422
145
93
65
...

user output
(empty)

Test 20

Group: 5

Verdict:

input
250 250 200000
..****************************...

correct output
57
155
38
65
98
...

user output
(empty)

Test 21

Group: 5

Verdict:

input
250 250 200000
.*****************************...

correct output
498
498
498
498
498
...

user output
0
0
0
0
0
...

Feedback: Incorrect character on line 1 col 1: expected "498", got "0"

Test 22

Group: 1, 2, 3, 4, 5

Verdict: ACCEPTED

input
10 1 10
*
*
.
*
...

correct output
0
1
1
0
0
...

user output
0
1
1
0
0
...

Test 23

Group: 1, 2, 3, 4, 5

Verdict:

input
1 10 10
........*.
1 7 1 10
1 4 1 7
1 5 1 1
...

correct output
1
1
1
1
1
...

user output
1
0
0
0
0
...

Feedback: Incorrect character on line 2 col 1: expected "1", got "0"

Test 24

Group: 5

Verdict:

input
250 1 200000
*
.
*
.
...

correct output
1
1
1
1
1
...

user output
1
1
1
1
1
...

Feedback: Incorrect character on line 94 col 1: expected "1", got "0"

Test 25

Group: 5

Verdict:

input
1 250 200000
*.*.*...*.*.**.***..**.*.*..**...

correct output
1
1
1
1
1
...

user output
1
1
1
1
1
...

Feedback: Incorrect character on line 19 col 1: expected "1", got "0"

Test 26

Group: 5

Verdict:

input
250 250 200000
.................................

correct output
2
2
2
2
2
...

user output
(empty)

Test 27

Group: 5

Verdict: ACCEPTED

input
250 250 200000
******************************...

correct output
0
0
0
0
0
...

user output
0
0
0
0
0
...