Submission details
Task:Monikulmio
Sender:mirovuoristo
Submission time:2025-11-09 21:10:57 +0200
Language:Python3 (PyPy3)
Status:READY
Result:94
Feedback
groupverdictscore
#1ACCEPTED94
Test results
testverdicttimescore
#1ACCEPTED0.04 s10details
#2ACCEPTED0.06 s10details
#3ACCEPTED0.06 s10details
#4ACCEPTED0.06 s10details
#5ACCEPTED0.06 s10details
#6ACCEPTED0.04 s10details
#7ACCEPTED0.09 s10details
#8ACCEPTED0.09 s10details
#9ACCEPTED0.10 s7details
#10ACCEPTED0.13 s7details

Code



n, m, k = map(int, input().strip().split(" "))


listOfLists = []


for i in range(n):
    lista = []
    for i in range(m):
        lista.append('.')
    listOfLists.append(lista)

posList = []
for i in range(k):
    posList.append(tuple(map(int, (input().strip().split(" ")))))
i = 0
posList.append(posList[0])

#while i < k:
#    curList = listOfLists[int(posList[i][0])-1]
#    curList[int(posList[i][1])-1] = '*'
#    listOfLists[int(posList[i][0])-1] = curList
#    i += 1

horizList = []
vertiList = []
diagListF = []
diagListB = []
while i < k:
    curPos = posList[i][:]
    while curPos != posList[i+1]: # ÄLÄ KOSKE
        if curPos[0] == posList[i+1][0]:
            if curPos[1] < posList[i+1][1]:
                curPos = int(curPos[0]), int(curPos[1])+1
                horizList.append(curPos)
            else:
                curPos = int(curPos[0]), int(curPos[1])-1
                horizList.append(curPos)
        elif curPos[1] == posList[i+1][1]:
            if curPos[0] < posList[i+1][0]:
                curPos = int(curPos[0])+1, int(curPos[1])
                vertiList.append(curPos)
            else:
                curPos = int(curPos[0])-1, int(curPos[1])
                vertiList.append(curPos)
        else:
            if curPos[0] < posList[i+1][0] and curPos[1] < posList[i+1][1]: #below and left of target
                curPos = curPos[0]+1, curPos[1]+1
                diagListB.append(curPos)
            elif curPos[0] > posList[i+1][0] and curPos[1] < posList[i+1][1]:#above and left of target
                curPos = curPos[0]-1, curPos[1]+1
                diagListF.append(curPos)
            elif curPos[0] < posList[i+1][0] and curPos[1] > posList[i+1][1]:#below and right of target
                curPos = curPos[0]+1, curPos[1]-1
                diagListF.append(curPos)
            elif curPos[0] > posList[i+1][0] and curPos[1] > posList[i+1][1]:#above and right if target
                curPos = curPos[0]-1, curPos[1]-1
                diagListB.append(curPos)
        
        

    curList = listOfLists[int(posList[i][0])-1]
    curList[int(posList[i][1])-1] = '*'
    listOfLists[int(posList[i][0])-1] = curList
    i += 1



z = 0
while z < len(horizList):
    curList = listOfLists[int(horizList[z][0])-1]
    curList[int(horizList[z][1])-1] = '='
    listOfLists[int(horizList[z][0])-1] = curList
    z += 1
z = 0
while z < len(vertiList):
    curList = listOfLists[int(vertiList[z][0])-1]
    curList[int(vertiList[z][1])-1] = '|'
    listOfLists[int(vertiList[z][0])-1] = curList
    z += 1
z = 0
while z < len(diagListB):
    curList = listOfLists[int(diagListB[z][0])-1]
    curList[int(diagListB[z][1])-1] = "\\"
    listOfLists[int(diagListB[z][0])-1] = curList
    z += 1
z = 0
while z < len(diagListF):
    curList = listOfLists[int(diagListF[z][0])-1]
    curList[int(diagListF[z][1])-1] = '/'
    listOfLists[int(diagListF[z][0])-1] = curList
    z += 1
e = 0
while e < k:
    curList = listOfLists[int(posList[e][0])-1]
    curList[int(posList[e][1])-1] = '*'
    listOfLists[int(posList[e][0])-1] = curList
    e += 1


# TODO: fix this trash - flood fill on all dots unless already was checked in a given area
symlist= ['\\', '/', '*', '|', '=']
bigList = []
i = 0
for lists in listOfLists:
    bigList.append(lists.copy())

check = set()

for i in range(n):
    for j in range(m):
        if bigList[i][j] == '.' and (i, j) not in check:
            stack = [(i, j)]
            al = []
            hitEdge = False 

            while stack:
                x, y = stack.pop()
                if bigList[x][y] != '.' or (x, y) in check:
                    continue
                bigList[x][y] = '@'
                al.append((x, y))
                check.add((x, y))
                if x == 0 or y == 0 or x == n-1 or y == m-1:
                    hitEdge = True
                for dx, dy in [(-1,0), (1,0),(0,-1),(0,1)]:
                    nx, ny = x+dx, y+dy
                    if 0 <= nx < n and 0 <= ny < m and bigList[nx][ny] == '.' and (nx, ny) not in check:
                        stack.append((nx, ny))


            if hitEdge:
                for (x, y) in al:
                    bigList[x][y] = '.'

            else:
                for (x, y) in al:
                    bigList[x][y] = '#'



for lista in bigList:
    print(''.join(lista))

Test details

Test 1 (public)

Verdict: ACCEPTED

input
8 9 5
5 2
2 5
5 8
7 8
...

correct output
.........
....*....
.../#\...
../###\..
.*#####*.
...

user output
.........
....*....
.../#\...
../###\..
.*#####*.
...

Test 2 (public)

Verdict: ACCEPTED

input
20 40 4
5 10
5 30
15 30
15 10

correct output
.................................

user output
.................................

Test 3 (public)

Verdict: ACCEPTED

input
20 40 29
8 7
13 2
14 2
9 7
...

correct output
.................................

user output
.................................

Test 4 (public)

Verdict: ACCEPTED

input
20 40 14
5 12
5 25
8 28
13 28
...

correct output
.................................

user output
.................................

Test 5 (public)

Verdict: ACCEPTED

input
20 40 12
3 20
7 16
7 9
11 13
...

correct output
.................................

user output
.................................

Test 6 (public)

Verdict: ACCEPTED

input
9 35 33
2 3
2 8
4 8
4 5
...

correct output
.................................

user output
.................................

Test 7 (public)

Verdict: ACCEPTED

input
30 100 69
6 10
6 14
7 14
7 18
...

correct output
.................................

user output
.................................

Test 8 (public)

Verdict: ACCEPTED

input
40 60 192
11 3
11 5
10 6
11 7
...

correct output
.................................

user output
.................................

Test 9 (public)

Verdict: ACCEPTED

input
50 100 142
1 1
1 7
1 11
1 14
...

correct output
*=====*===*==*...................

user output
*=====*===*==*...................

Feedback: Lines are drawn correctly. Incorrect fill character on row 3, col 9: expected '.', got '#'

Test 10 (public)

Verdict: ACCEPTED

input
100 100 1000
10 1
4 7
1 4
1 9
...

correct output
...*====*........................

user output
...*====*........................

Feedback: Lines are drawn correctly. Incorrect fill character on row 4, col 29: expected '.', got '#'