import sys
data = sys.stdin.read().strip().split()
n = int(data[0])
m = int(data[1])
k = int(data[2])
matrix = data[3:]
olist = []
for i in range(m): # 对连续出现o进行计数
last_char = '*'
ocounter=0
for j in range(n):
if matrix[j][i]=='o':
ocounter+=1
last_char='o'
elif matrix[j][i]=='*':
if last_char =='o' and ocounter>1:
olist.append(ocounter)
ocounter=0
last_char = '*'
if ocounter>1:
olist.append(ocounter)
sorted_o = sorted(olist,reverse=True)
score = 0
remain = k
for o in sorted_o:
if remain>=o:
score+=o-1
remain-=o
else:
if remain<=1:
break
else:
score+=remain-1
break
print(score)
主要说明一下处理思路:
首先是要按列来读取输入的矩阵
然后根据当前str与上一个str情况:
- 当前是o:让计数器加一,并且在访问下一个str前:把上一个重置为o
- 当前是*:如果上一个是o,且计数大于1,则添入计数器列表并且重置计数器,和上一个str
(计数器大于1才添入列表是因为等于1的情况实际上是无法加分没有意义的)
接下来只要降序排列,然后一个一个讨论可行性就好了。

京公网安备 11010502036488号