/* 先找出纵向连续白色格子最多的地方,然后得分就是纵向填充红色格子数-1,比如有纵向有5个白色格子,那得分就是5-1,直到用完k次数为止 */ import java.util.Scanner; import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 String line = in.nextLine(); String[] nums = line.split(" "); int n = Integer.valueOf(nums[0]); int m = Integer.valueOf(nums[1]); int k = Integer.valueOf(nums[2]); char[][] arr = new char[n][m]; // 录入数据 for (int a = 0; a < n; a++) { String sub = in.nextLine(); arr[a] = sub.toCharArray(); } int score = 0; // 如果只要一行,那就是0分 if (arr.length <= 1) { System.out.println(0); return; } // 优先找连续白色最多的列 List<Integer> list = new ArrayList<>(); for (int j = 0; j < m; j++) { int count = 0; for (int i = 0; i < n; i++) { char g = arr[i][j]; if (g == 'o') { count++; if (i == n - 1) { list.add(count); } } else { // 不是白色格子,则保存上次的计数 if (count > 0) { list.add(count); // 清零,开始下次计数 count = 0; } } } } // 给list反向排序 Collections.sort(list, (i1, i2)-> { return i2.compareTo(i1); }); for (Integer item : list) { int jianshu = k - item; if (jianshu <= 0) { // 已经超出k次了,那只能操作k次 // 操作k次,得分是k - 1 score += k - 1; break; } // 还没超出k次,那就可以操作item次 k = jianshu; // 操作item次,得分是item - 1 score += item - 1; } System.out.println(score); } }