Submission details
Task:Monikulmio
Sender:AapoL
Submission time:2025-10-29 10:19:17 +0200
Language:Python3 (PyPy3)
Status:READY
Result:50
Feedback
groupverdictscore
#150
Test results
testverdicttimescore
#1ACCEPTED0.05 s10details
#2ACCEPTED0.09 s10details
#30.12 s0details
#40.11 s0details
#50.10 s0details
#6ACCEPTED0.09 s10details
#70.20 s0details
#8ACCEPTED0.24 s10details
#9ACCEPTED0.29 s10details
#10--0details

Code

from math import sqrt, isclose

text = input()

# Ruudukon korkeus, leveys ja monikulmion kärkipisteiden määrä
split = text.split()

n, m, k = int(split[0]), int(split[1]), int(split[2])

coords = []
for i in range(k):
    coords_temp = input()
    coords_split = coords_temp.split()
    #print(coords_split)
    coords_1 = int(coords_split[0])
    coords_2 = int(coords_split[1])
    coords_final = [coords_1, coords_2]
    coords.append(coords_final) 
    #print(coords)

#coords = [[5, 2], [2, 5], [5, 8], [7, 8], [7, 2]]

# Copy paste algorithm        # Store the current point as the first point for the next iteration

def point_in_polygon(point, polygon):
    num_vertices = len(polygon)
    x, y = point[1], point[0]
    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[0], p2[0]):
            # Check if the point is below the maximum y coordinate of the edge
            if y <= max(p1[0], p2[0]):
                # Check if the point is to the left of the maximum x coordinate of the edge
                if x <= max(p1[1], p2[1]):
                    # Calculate the x-intersection of the line connecting the point to the edge
                    x_intersection = (y - p1[0]) * (p2[1] - p1[1]) / (p2[0] - p1[0]) + p1[1]

                    # Check if the point is on the same line as the edge or to the left of the x-intersection
                    if p1[1] == p2[1] 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

def distance(a, b):
    return sqrt((a[1] - b[1])**2 + (a[0] - b[0])**2)

def is_between(a, b, c):
    if distance(a,c) + distance(c,b) == distance(a,b):
        if a[0] == b[0]:
            print("=", end="")
            return True
        elif a[1] == b[1]:
            print("|", end="")
            return True
    elif isclose((distance(a,c) + distance(c,b)), distance(a,b)):
        if a[0] < b[0]:
            print("\\", end="")
        elif a[0] > b[0]:
            print("/", end="")
        return True

def is_line(point): 
    for i in range(len(coords)):
        start = coords[i]
        end = coords[(i + 1) % len(coords)]
        if is_between(start, end, point):
            return True
    return False

for i in range(n):
    for j in range(m):
        if [i+1, j+1] in coords:
            print("*", end="")
        elif is_line([i+1, j+1]):
            print("", end="")
        elif point_in_polygon([i+1, j+1], coords):
            print("#", end="")
        else:
            print(".", end="")

    print("")

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:

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

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

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

Feedback: Incorrect character on row 4, col 29: expected '/', got '.'

Test 4 (public)

Verdict:

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

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

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

Feedback: Incorrect character on row 4, col 27: expected '\', got '#'

Test 5 (public)

Verdict:

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

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

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

Feedback: Incorrect character on row 4, col 19: expected '/', got '\'

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:

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

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

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

Feedback: Incorrect character on row 9, col 72: expected '\', got '#'

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:

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

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

user output
(empty)