| Task: | Monikulmio |
| Sender: | Toitsu |
| Submission time: | 2025-10-27 17:09:06 +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.10 s | 10 | details |
| #8 | ACCEPTED | 0.11 s | 10 | details |
| #9 | ACCEPTED | 0.11 s | 10 | details |
| #10 | ACCEPTED | 0.36 s | 10 | details |
Code
initial_info = input()
height, width, tip_count = initial_info.split(" ")
height = int(height)
width = int(width)
tips = []
for i in range(int(tip_count)):
a, b = input().split(" ")
tips.append((int(b), int(a)))
grid = []
for x in range(1, height + 1):
row = []
for y in range(1, width + 1):
if (y, x) in tips:
row.append("*")
else:
row.append(".")
grid.append(row)
# connect the tips
for i in range(len(tips)):
x_a, y_a = tips[i]
x_b, y_b = tips [0 if i == len(tips) - 1 else i + 1]
x_val = x_a - x_b
y_val = y_a - y_b
direction = ""
distance = max(abs(x_val), abs(y_val)) - 1
if x_val > 0 and y_val < 0:
direction = "left_down"
elif x_val < 0 and y_val < 0:
direction = "right_down"
elif x_val < 0 and y_val > 0:
direction = "right_up"
elif x_val > 0 and y_val > 0:
direction = "left_up"
elif x_val > 0 and y_val == 0:
direction = "left"
elif x_val < 0 and y_val == 0:
direction = "right"
elif x_val == 0 and y_val < 0:
direction = "down"
elif x_val == 0 and y_val > 0:
direction = "up"
x_a -= 1
y_a -= 1
for j in range(1, distance + 1):
if direction == "left_down":
grid[y_a + j][x_a - j] = "/"
elif direction == "right_down":
grid[y_a + j][x_a + j] = "\\"
elif direction == "right_up":
grid[y_a - j][x_a + j] = "/"
elif direction == "left_up":
grid[y_a - j][x_a - j] = "\\"
elif direction == "left":
grid[y_a][x_a - j] = "="
elif direction == "right":
grid[y_a][x_a + j] = "="
elif direction == "down":
grid[y_a + j][x_a] = "|"
elif direction == "up":
grid[y_a - j][x_a] = "|"
# find the points inside the polygon
def point_in_poly(col, row, poly):
px = col + 0.5
py = row + 0.5
inside = False
n = len(poly)
for k in range(n):
x_a, y_a = poly[k]
x_b, y_b = poly[(k + 1) % n]
if (y_a > py) != (y_b > py):
inter_x = x_a + (x_b - x_a) * (py - y_a) / (y_b - y_a)
if inter_x > px:
inside = not inside
return inside
for y in range(height):
for x in range(width):
if grid[y][x] == "." and point_in_poly(x, y, tips):
grid[y][x] = "#"
# print the grid
for row in grid:
for element in row:
print(element, 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: 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 |
|---|
| ...*====*........................ |
