题解 | 小红的矩阵染色
小红的矩阵染色
https://www.nowcoder.com/practice/f8b771318bb04490b7389cc35e148166
# 由题目可知,存在列方向连续的两个及以上的字符'o'才有分,考虑找出所有列方向的字符'o'
import sys
data_list = [] # 处理输入数据
for i in list(sys.stdin):
data_list.append(i.replace('\n', ''))
n, m, k = map(int, data_list[0].split())
del data_list[0]
len_o = []
for i in range(m): # 循环得到每一列中的所有连续字符'o',存入列表中
count = 0
for j in range(n):
if data_list[j][i] == 'o':
count += 1
else:
len_o.append(count) # 若中间出现'*'则重新计数
count = 0
continue
len_o.append(count)
len_o.sort(reverse = True) # 降序排列
score = 0
for i in len_o: # 从最长序列循环计算
if k <= 1: # 当k <= 1时,在一列中怎么涂都不得分
break
elif int(i) >= 2 and int(i) >= k: # 当存在填涂后可得分的列,看k的大小
score += k - 1
break
elif int(i) >= 2 and int(i) < k: # 比k大则直接计算退出,比k小则再循环
score += int(i) - 1
k -= int(i)
print(score)