2023 S3 - Palindromic Poster
Hardad hocconstructive
1 Solution Available
Solution 1
PYTHON1# 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