| Task: | Monikulmio |
| Sender: | jokeri2222 |
| Submission time: | 2025-10-29 22:19:33 +0200 |
| Language: | Python3 (PyPy3) |
| Status: | READY |
| Result: | 100 |
| group | verdict | score |
|---|---|---|
| #1 | ACCEPTED | 100 |
| test | verdict | time | score | |
|---|---|---|---|---|
| #1 | ACCEPTED | 0.04 s | 10 | details |
| #2 | ACCEPTED | 0.06 s | 10 | details |
| #3 | ACCEPTED | 0.07 s | 10 | details |
| #4 | ACCEPTED | 0.07 s | 10 | details |
| #5 | ACCEPTED | 0.06 s | 10 | details |
| #6 | ACCEPTED | 0.06 s | 10 | details |
| #7 | ACCEPTED | 0.11 s | 10 | details |
| #8 | ACCEPTED | 0.10 s | 10 | details |
| #9 | ACCEPTED | 0.10 s | 10 | details |
| #10 | ACCEPTED | 0.40 s | 10 | details |
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 |
|---|
| ...*====*........................ |
