题解:P11543 [Code+#5] 我有矩阵,你有吗?

· · 题解

代码解释

题目传送门

首先读取矩阵的行数 n 和列数 m,然后分别读取矩阵 A 和 B。 first_row_flipped 表示第一行是否翻转。 复制矩阵 A 到 current_A,根据 first_row_flipped 决定是否翻转第一行。 通过比较第一行元素,确定每列是否需要翻转,存储在 col_flip 中。 对需要翻转的列进行翻转操作。 检查剩余行,若需要则进行行翻转,若翻转后仍与目标矩阵不同,则返回 False。 主程序:分别尝试第一行不翻转和翻转两种情况,若有一种情况能使矩阵 A 变为矩阵 B,则输出 Koyi,否则输出 Budexing。

代码:

n,m=map(int,input().split())
A=[list(map(int,input().split())) for _ in range(n)]
B=[list(map(int,input().split())) for _ in range(n)]

def ctf(frf):
    cA=[row[:] for row in A]
    if frf:
        cA[0]=[1-x for x in cA[0]]
    cf=[cA[0][j]!=B[0][j] for j in range(m)]
    for j in range(m):
        if cf[j]:
            for i in range(n):
                cA[i][j]=1-cA[i][j]
    for i in range(1,n):
        rnf=any(cA[i][j]!=B[i][j] for j in range(m))
        if rnf:
            cA[i]=[1-x for x in cA[i]]
        if any(cA[i][j]!=B[i][j] for j in range(m)):
            return False
    return True

if ctf(False) or ctf(True):
    print('Koyi')
else:
    print('Budexing')

制作不易,点个赞在走吧(声明:非AI)