zdc233


私信TA

用户名:dotcpp0603819

访问量:551

签 名:

等  级
排  名 8638
经  验 1215
参赛次数 5
文章发表 2
年  龄 0
在职情况 学生
学  校 安徽大学
专  业

  自我简介:

TA的其他文章

解题思路: 

HRW8EERS}9Q_})4)YX3V]]J.png

使用2个状态列表去存储每一行和每一列,奇数为1,偶数为0。本次的关键是如何找出只修改一次的位置。由于修改一次后,会同时改变其中一行和其中一列的奇偶性,因此要求行状态列表和列状态列表中只能各出现一次1。例如行状态为[0,0,1,0],列状态为[0,0,0,1],此时即可完成修改。

注意事项:

列表下标索引是从0开始的,但行列下标是从1开始的,不少地方需要注意+1

参考代码:

n=int(input())
a=[] #存矩阵
rows=[] #矩阵每一行的状态:奇数为1,偶数为0
cols=[] #矩阵每一列的状态:奇数为1,偶数为0
for i in range(n):
    tmp=list(map(int, input().split()))
    a.append(tmp) #读入到矩阵的每行
    rows.append(sum(tmp)%2) #计算矩阵每行的状态,使用模2是保证状态只有0和1
for j in range(n):
    sum1=0
    for i in range(n):
        sum1+=a[i][j]
    cols.append(sum1 % 2) #计算矩阵每列的状态,使用模2是保证状态只有0和1
#题目要求的3个判断
if sum(cols)==0 and sum(rows)==0: #如果行和列状态均为0,说明全为偶数
    print("OK")
elif sum(cols)==1 and sum(rows)==1: #如果行和列各有一个状态1,说明可通过一次修改完成
    print("%d %d" % (rows.index(1)+1,cols.index(1)+1)) #使用index返回第一次出现状态1的下标
else:
    print("Corrupt")


 

0.0分

7 人评分

  评论区

  • «
  • »