実装の面倒さで難易度6にいる.私は気合で場合分けしました()
from sys import stdin
input = stdin.readline
m, n = map(int, input().strip().split())
flag = [input().strip() for _ in range(m)]
crest = [input().strip() for _ in range(2)]
def check(f1, f2, f3, f4, cre):
if f1 == cre[0][0] and f2 == cre[1][0] and f3 == cre[0][1] and f4 == cre[1][1]:
return 1
else:
return 0
tmp = 0
for i in range(m - 1):
for j in range(n - 1):
if check(flag[i][j], flag[i + 1][j], flag[i][j + 1], flag[i + 1][j + 1], crest):
tmp += 1
char = ['J', 'O', 'I']
ans = 0
for i in range(m):
for j in range(n):
if i == 0 and j == 0:
'''
| 1 | 3 |
| 2 | 4 |
'''
f1 = flag[i][j]
f2 = flag[i + 1][j]
f3 = flag[i][j + 1]
f4 = flag[i + 1][j + 1]
if check(f1, f2, f3, f4, crest):
continue
for k in char:
if k == f1:
continue
if check(k, f2, f3, f4, crest):
ans = max(tmp + 1, ans)
elif i == m - 1 and j == n - 1:
'''
| 1 | 3 |
| 2 | 4 |
'''
f1 = flag[i - 1][j - 1]
f2 = flag[i][j - 1]
f3 = flag[i - 1][j]
f4 = flag[i][j]
if check(f1, f2, f3, f4, crest):
continue
for k in char:
if k == f4:
continue
if check(f1, f2, f3, k, crest):
ans = max(tmp + 1, ans)
elif i == 0 and j == n - 1:
'''
| 1 | 3 |
| 2 | 4 |
'''
f1 = flag[i][j - 1]
f2 = flag[i + 1][j - 1]
f3 = flag[i][j]
f4 = flag[i + 1][j]
if check(f1, f2, f3, f4, crest):
continue
for k in char:
if k == f3:
continue
if check(f1, f2, k, f4, crest):
ans = max(tmp + 1, ans)
elif i == m - 1 and j == 0:
'''
| 1 | 3 |
| 2 | 4 |
'''
f1 = flag[i - 1][j]
f2 = flag[i][j]
f3 = flag[i - 1][j + 1]
f4 = flag[i][j + 1]
if check(f1, f2, f3, f4, crest):
continue
for k in char:
if k == f2:
continue
if check(f1, k, f3, f4, crest):
ans = max(tmp + 1, ans)
elif i == 0 and 0 < j < n - 1:
'''
| 5 | 1 | 3 |
| 6 | 2 | 4 |
'''
f1 = flag[i][j]
f2 = flag[i + 1][j]
f3 = flag[i][j + 1]
f4 = flag[i + 1][j + 1]
f5 = flag[i][j - 1]
f6 = flag[i + 1][j - 1]
if check(f1, f2, f3, f4, crest) or check(f5, f6, f1, f2, crest):
continue
for k in char:
if k == f1:
continue
if check(k, f2, f3, f4, crest) and check(f5, f6, k, f2, crest):
ans = max(tmp + 2, ans)
elif check(k, f2, f3, f4, crest) or check(f5, f6, k, f2, crest):
ans = max(tmp + 1, ans)
elif 0 < i < m - 1 and j == 0:
'''
| 5 | 6 |
| 1 | 3 |
| 2 | 4 |
'''
f1 = flag[i][j]
f2 = flag[i + 1][j]
f3 = flag[i][j + 1]
f4 = flag[i + 1][j + 1]
f5 = flag[i - 1][j]
f6 = flag[i - 1][j + 1]
if check(f1, f2, f3, f4, crest) or check(f5, f1, f6, f3, crest):
continue
for k in char:
if k == f1:
continue
if check(k, f2, f3, f4, crest) and check(f5, k, f6, f3, crest):
ans = max(tmp + 2, ans)
elif check(k, f2, f3, f4, crest) or check(f5, k, f6, f3, crest):
ans = max(tmp + 1, ans)
elif i == m - 1 and 0 < j < n - 1:
'''
| 1 | 3 | 5 |
| 2 | 4 | 6 |
'''
f1 = flag[i - 1][j - 1]
f2 = flag[i][j - 1]
f3 = flag[i - 1][j]
f4 = flag[i][j]
f5 = flag[i - 1][j + 1]
f6 = flag[i][j + 1]
if check(f1, f2, f3, f4, crest) and check(f3, f4, f5, f6, crest):
continue
for k in char:
if k == f4:
continue
if check(f1, f2, f3, k, crest) and check(f3, k, f5, f6, crest):
ans = max(tmp + 2, ans)
elif check(f1, f2, f3, k, crest) or check(f3, k, f5, f6, crest):
ans = max(tmp + 1, ans)
elif 0 < i < m - 1 and j == n - 1:
'''
| 3 | 6 |
| 2 | 5 |
| 1 | 4 |
'''
f1 = flag[i + 1][j - 1]
f2 = flag[i][j - 1]
f3 = flag[i - 1][j - 1]
f4 = flag[i + 1][j]
f5 = flag[i][j]
f6 = flag[i - 1][j]
if check(f3, f2, f6, f5, crest) and check(f2, f1, f5, f4, crest):
continue
for k in char:
if k == f5:
continue
if check(f3, f2, f6, k, crest) and check(f2, f1, k, f4, crest):
ans = max(tmp + 2, ans)
elif check(f3, f2, f6, k, crest) or check(f2, f1, k, f4, crest):
ans = max(tmp + 1, ans)
else:
'''
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
'''
f1 = flag[i - 1][j - 1]
f2 = flag[i - 1][j]
f3 = flag[i - 1][j + 1]
f4 = flag[i][j - 1]
f5 = flag[i][j]
f6 = flag[i][j + 1]
f7 = flag[i + 1][j - 1]
f8 = flag[i + 1][j]
f9 = flag[i + 1][j + 1]
cnt = check(f1, f4, f2, f5, crest) + check(f2, f5, f3, f6, crest) + check(f4, f7, f5, f8, crest) + check(f5, f8, f6, f9, crest)
if cnt >= 2:
continue
for k in char:
if k == f5:
continue
ans = max(tmp - cnt + check(f1, f4, f2, k, crest) + check(f2, k, f3, f6, crest) + check(f4, f7, k, f8, crest) + check(k, f8, f6, f9, crest), ans)
if ans == 0:
print(tmp)
else:
print(ans)