Submission details
Task:Monikulmio
Sender:Username*
Submission time:2025-10-31 21:13:12 +0200
Language:Python3 (CPython3)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED100
Test results
testverdicttimescore
#1ACCEPTED0.02 s10details
#2ACCEPTED0.02 s10details
#3ACCEPTED0.02 s10details
#4ACCEPTED0.02 s10details
#5ACCEPTED0.02 s10details
#6ACCEPTED0.02 s10details
#7ACCEPTED0.02 s10details
#8ACCEPTED0.03 s10details
#9ACCEPTED0.03 s10details
#10ACCEPTED0.12 s10details

Code

n, m, k = map(int, input().split())
points = [tuple(map(int, input().split())) for _ in range(k)]

grid = [['.' for _ in range(m)] for _ in range(n)]

# Draw corner points
for y, x in points:
    grid[y-1][x-1] = '*'

# Bresenham-like line drawing
for i in range(k):
    y1, x1 = points[i]
    y2, x2 = points[(i+1) % k]
    y1 -= 1; x1 -= 1; y2 -= 1; x2 -= 1

    dy = y2 - y1
    dx = x2 - x1
    steps = max(abs(dy), abs(dx))
    for s in range(1, steps):
        yy = y1 + dy * s // steps
        xx = x1 + dx * s // steps
        if grid[yy][xx] == '*':
            continue
        if dy == 0:
            grid[yy][xx] = '='
        elif dx == 0:
            grid[yy][xx] = '|'
        elif (dy > 0 and dx > 0) or (dy < 0 and dx < 0):
            grid[yy][xx] = '\\'
        else:
            grid[yy][xx] = '/'

# Fill polygon interior using optimized scanline (ray-casting for each row)
for i in range(n):
    intersections = []
    for j in range(k):
        y1, x1 = points[j]
        y2, x2 = points[(j+1) % k]
        y1 -= 1; x1 -= 1; y2 -= 1; x2 -= 1
        if y1 == y2:  # horizontal edge
            if i == y1:
                intersections.extend(sorted([x1, x2]))
            continue
        if min(y1, y2) <= i < max(y1, y2):
            t = (i - y1) / (y2 - y1)
            x_cross = x1 + t * (x2 - x1)
            intersections.append(x_cross)
    intersections.sort()
    for idx in range(0, len(intersections), 2):
        if idx+1 >= len(intersections):
            break
        x_start = int(round(intersections[idx])) + 1
        x_end = int(round(intersections[idx+1]))
        for x in range(x_start, x_end):
            if grid[i][x] == '.':
                grid[i][x] = '#'

# Print the final grid
for row in grid:
    print(''.join(row))

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

Test 10 (public)

Verdict: ACCEPTED

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

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

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