Submission details
Task:Monikulmio
Sender:Username*
Submission time:2025-10-31 20:59:12 +0200
Language:Python3 (CPython3)
Status:READY
Result:76
Feedback
groupverdictscore
#1ACCEPTED76
Test results
testverdicttimescore
#1ACCEPTED0.03 s7details
#2ACCEPTED0.03 s10details
#3ACCEPTED0.03 s7details
#4ACCEPTED0.03 s7details
#5ACCEPTED0.03 s7details
#6ACCEPTED0.03 s7details
#7ACCEPTED0.04 s7details
#8ACCEPTED0.04 s7details
#9ACCEPTED0.04 s10details
#10ACCEPTED0.08 s7details

Code

from fractions import Fraction
import sys
def inp():
    return list(map(int, sys.stdin.readline().split()))
n,m,k = inp()
pts = [tuple(inp()) for _ in range(k)]
grid = [['.' for _ in range(m)] for _ in range(n)]
def sign(a):
    return (a>0)-(a<0)
for i in range(k):
    y1,x1 = pts[i]
    y2,x2 = pts[(i+1)%k]
    dy = y2-y1
    dx = x2-x1
    steps = max(abs(dy), abs(dx))
    sy = sign(dy)
    sx = sign(dx)
    for t in range(steps+1):
        r = y1 + t*sy
        c = x1 + t*sx
        rr = r-1
        cc = c-1
        if 0<=rr<n and 0<=cc<m:
            if t==0 or t==steps:
                grid[rr][cc]='*'
            else:
                if dy==0:
                    ch='='
                elif dx==0:
                    ch='|'
                else:
                    ch='\\' if dy*dx>0 else '/'
                if grid[rr][cc] != '*':
                    grid[rr][cc]=ch
row_inters = [[] for _ in range(n+1)]
for i in range(k):
    y1,x1 = pts[i]
    y2,x2 = pts[(i+1)%k]
    if y1 == y2:
        continue
    ymin = min(y1,y2)
    ymax = max(y1,y2)
    dx = x2 - x1
    dy = y2 - y1
    for r in range(ymin+1, ymax+1):
        y_center = Fraction(2*r-1, 2)
        x_num = Fraction(x1) + Fraction(dx) * (y_center - Fraction(y1)) / Fraction(dy)
        row_inters[r].append(x_num)
def floor_frac(fr):
    q = fr.numerator // fr.denominator
    return q
def ceil_frac(fr):
    q = fr.numerator // fr.denominator
    if fr.numerator % fr.denominator != 0:
        if fr.numerator > 0:
            q += 1
    return q
for r in range(1, n+1):
    lst = row_inters[r]
    if not lst:
        continue
    lst.sort()
    L = len(lst)
    j = 0
    while j+1 < L:
        xl = lst[j]
        xr = lst[j+1]
        left = floor_frac(xl + Fraction(1,2)) + 1
        right = ceil_frac(xr + Fraction(1,2)) - 1
        if left < 1:
            left = 1
        if right > m:
            right = m
        if left <= right:
            rr = r-1
            for c in range(left, right+1):
                cc = c-1
                if grid[rr][cc] == '.':
                    grid[rr][cc] = '#'
        j += 2
out = sys.stdout.write
for row in grid:
    out(''.join(row) + '\n')

Test details

Test 1 (public)

Verdict: ACCEPTED

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

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

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

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

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
.................................

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

Test 4 (public)

Verdict: ACCEPTED

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

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

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

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

Test 5 (public)

Verdict: ACCEPTED

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

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

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

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

Test 6 (public)

Verdict: ACCEPTED

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

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

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

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

Test 7 (public)

Verdict: ACCEPTED

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

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

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

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

Test 8 (public)

Verdict: ACCEPTED

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

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

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

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

Test 9 (public)

Verdict: ACCEPTED

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

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

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

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 21: expected '#', got '.'