2023 S3 - Palindromic Poster

Hardad hocconstructive

1 Solution Available

Solution 1

PYTHON
1# By Oscar Zhou, Abbey Park High School
2# This solution still requires commented explanations. Please feel free to add them!
3
4# https://dmoj.ca/problem/ccc23s3
5
6import sys
7input = sys.stdin.readline
8
9n, m, r, c = map(int, input().split())
10
11def output(graph):
12    for item in graph:
13        print("".join(item))
14
15graph = [["a"] * m for i in range(n)]
16if r == n and c == m:
17    output(graph)
18    sys.exit(0)
19if r == 0 and c == 0:
20    for i in range(1, m):
21        graph[0][i] = "b"
22    for i in range(1, n):
23        graph[i][0] = "b"
24    output(graph)
25    sys.exit(0)
26
27# Test case 2
28if n == 2 and m == 2:
29    if (r == 1 and c == 2) or (r == 2 and c == 1):
30        print("IMPOSSIBLE")
31        sys.exit(0)
32
33for i in range(r):
34    for j in range(m):
35        graph[i][j] = "b"
36for i in range(n):
37    for j in range(c):
38        graph[i][j] = "b"
39if r == 0:
40    for i in range(c, m):
41        graph[0][i] = "c"
42if c == 0:
43    for i in range(r, n):
44        graph[i][0] = "c"
45if r == n and c == 0:
46    for i in range(m):
47        graph[0][i] = "a"
48if c == m and r == 0:
49    for i in range(n):
50        graph[i][0] = "a"
51if r == n and c != m:
52    for i in range(m):
53        graph[0][i] = "a"
54    if m % 2 == 0:
55        if c % 2 == 1:
56            print("IMPOSSIBLE")
57            sys.exit(0)
58        else:
59            for j in range(c//2):
60                for row in range(1, n):
61                    graph[row][j] = "a"
62                    graph[row][m-j-1] = "a"
63    else:
64        if c % 2 == 0:
65            for j in range(c//2):
66                for row in range(1, n):
67                    graph[row][j] = "a"
68                    graph[row][m-j-1] = "a"
69        else:
70            for j in range(m//2, m//2-c//2-1, -1):
71                for row in range(1, n):
72                    graph[row][j] = "a"
73                    graph[row][m-j-1] = "a"
74    output(graph)
75    sys.exit(0)
76
77if r != n and c == m:
78    for i in range(n):
79        graph[i][0] = "a"
80    if n % 2 == 0:
81        if r % 2 == 1:
82            print("IMPOSSIBLE")
83            sys.exit(0)
84        else:
85            for j in range(r//2):
86                for row in range(1, m):
87                    graph[j][row] = "a"
88                    graph[n-j-1][row] = "a"
89    else:
90        if r % 2 == 0:
91            for j in range(r//2):
92                for row in range(1, m):
93                    graph[j][row] = "a"
94                    graph[n-j-1][row] = "a"
95        else:
96            for j in range(n//2, n//2-r//2-1, -1):
97                for row in range(1, m):
98                    graph[j][row] = "a"
99                    graph[n-j-1][row] = "a"
100    output(graph)
101    sys.exit(0)
102
103output(graph)

Test Cases

Select a test case to view input and output