package main import ( "fmt" "sort" ) // 优先填最大的列中连续子段 func main() { var n,m,k int fmt.Scanf("%d %d %d", &n,&m,&k) a := make([]string, n) for i:=0;i<n;i++{ fmt.Scanf("%s", &a[i]) } var b []int // 记录所有可能的得分段 var top, bottom int for j:=0;j<m;j++{ top, bottom = 0, 0 for i:=0;i<n;i++{ if a[i][j] == 'o'{ bottom++ if i == n-1{ // 到最后一行 b = append(b, bottom - top) } }else { if bottom > top{ b = append(b, bottom - top) } top, bottom = i+1,i+1 } } } // 降序排序 sort.Slice(b, func(i, j int) bool{ return b[i] > b[j] }) var result,index int for index < len(b) && k>0{ if b[index] <= k{ k -= b[index] result += b[index] -1 }else { result += (k-1) k = 0 } index++ } fmt.Println(result) }