Submission details
Task:Monikulmio
Sender:jokeri2222
Submission time:2025-10-29 22:19:33 +0200
Language:Python3 (PyPy3)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED100
Test results
testverdicttimescore
#1ACCEPTED0.04 s10details
#2ACCEPTED0.06 s10details
#3ACCEPTED0.07 s10details
#4ACCEPTED0.07 s10details
#5ACCEPTED0.06 s10details
#6ACCEPTED0.06 s10details
#7ACCEPTED0.11 s10details
#8ACCEPTED0.10 s10details
#9ACCEPTED0.10 s10details
#10ACCEPTED0.40 s10details

Code

def point_in_polygon(point, polygon):
    num_vertices = len(polygon)
    x, y = point[0], point[1]
    inside = False

    # Store the first point in the polygon and initialize the second point
    p1 = polygon[0]

    # Loop through each edge in the polygon
    for i in range(1, num_vertices + 1):
        # Get the next point in the polygon
        p2 = polygon[i % num_vertices]

        # Check if the point is above the minimum y coordinate of the edge
        if y > min(p1[1], p2[1]):
            # Check if the point is below the maximum y coordinate of the edge
            if y <= max(p1[1], p2[1]):
                # Check if the point is to the left of the maximum x coordinate of the edge
                if x <= max(p1[0], p2[0]):
                    # Calculate the x-intersection of the line connecting the point to the edge
                    x_intersection = (y - p1[1]) * (p2[0] - p1[0]) / (p2[1] - p1[1]) + p1[0]

                    # Check if the point is on the same line as the edge or to the left of the x-intersection
                    if p1[0] == p2[0] or x <= x_intersection:
                        # Flip the inside flag
                        inside = not inside

        # Store the current point as the first point for the next iteration
        p1 = p2

    # Return the value of the inside flag
    return inside


lines, columns, k = map(int, input().split(" "))
sign = lambda x: x//abs(x)
art = [["." for _ in range(columns)] for _ in range(lines)]
points = []
for i in range(k):
    x, y = map(int, input().split(" "))
    points.append((y, x))


for y in range(lines):
    for x in range(columns):
        if point_in_polygon((x+1, y+1), points):
            art[y][x] = "#"



for i, (x,y) in enumerate(points):
    last_x, last_y = points[i-1]
    art[y-1][x-1]="*"

    dy, dx = y-last_y, x-last_x

    if dy==0:
        for new_x in range(min(x, x-dx)+1, max(x, x-dx)):
            art[y-1][new_x-1] = "="
    elif dx==0:
        for new_y in range(min(y, y-dy)+1, max(y, y-dy)):
            art[new_y-1][x-1] = "|"
    elif dy/-dx > 0:
        for delta in range(1, abs(dx)):
            art[y-delta*sign(dy)-1][x-delta*sign(dx)-1] = "/"
    else:
        for delta in range(1, abs(dx)):
            art[y-delta*sign(dy)-1][x-delta*sign(dx)-1] = "\\"


print("\n".join(map("".join, art)))

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