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情况:

  1. 当前是o:让计数器加一,并且在访问下一个str前:把上一个重置为o
  2. 当前是*:如果上一个是o,且计数大于1,则添入计数器列表并且重置计数器,和上一个str

(计数器大于1才添入列表是因为等于1的情况实际上是无法加分没有意义的)

接下来只要降序排列,然后一个一个讨论可行性就好了。