D - ABC Puzzle Editorial by kyopro_friends
各行各列に A
がちょうど 1 個あるような A
の置き方は \(5!=120\) 通りあります。よって、問題文中の \(1\) 番目の条件を満たすようなA
, B
, C
の配置の仕方は高々 \(120^3\) 通りです。これを全探索します。
import itertools
N=int(input())
R=input()
C=input()
def head(s):
for c in s:
if c!=".":
return c
for a,b,c in itertools.product(itertools.permutations(range(N)),repeat=3):
if any(ai==bi or bi==ci or ci==ai for ai,bi,ci in zip(a,b,c)): continue
S=[["."]*N for _ in range(N)]
for i,j in enumerate(a): S[i][j]="A"
for i,j in enumerate(b): S[i][j]="B"
for i,j in enumerate(c): S[i][j]="C"
if "".join(map(head,S))==R and "".join(map(head,zip(*S)))==C:
print("Yes")
print(*map(lambda s:"".join(s),S),sep="\n")
exit()
print("No")
posted:
last update: