import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.IntStream; //TIP To Run code, press or // click the icon in the gutter. public class Snow { public static int evaluate(int n, int m, List> snow) { int count = 0; for (int j = 0; j < m; ++j){ int i = n - 1; while ((i >= 0) && (snow.get(i).get(j) != '.')){ ++count; --i; } } return count; } public static void move(int n, int m, List> snow){ for (int i = n-2; i >= 0; --i){ for (int j = 0; j < m; ++j){ if (snow.get(i+1).get(j) == '.'){ snow.get(i+1).set(j, snow.get(i).get(j)); snow.get(i).set(j, '.'); } } } } public static void main(String[] args) { int n, m, q, measure_id = 0, time = 0; Scanner scan = new Scanner(System.in); String[] firstLine = scan.nextLine().trim().split(" "); n = Integer.parseInt(firstLine[0]); m = Integer.parseInt(firstLine[1]); q = Integer.parseInt(firstLine[2]); List measure = new ArrayList<>(); List> snow = new ArrayList<>(); for (int i = 0; i < n; ++i){ char[] line = scan.nextLine().toCharArray(); List ca = new ArrayList<>(); for (int j = 0; j < m; ++j){ ca.add(line[j]); } snow.add(ca); } for (int i = 0; i < q; ++i){ String line = scan.nextLine().trim(); measure.add(Integer.parseInt(line)); } AtomicInteger ai = new AtomicInteger(); List measurements = measure.stream() .map(meas -> new MeasPoint(meas, ai.incrementAndGet())) .sorted(Comparator.comparingInt(measPoint -> measPoint.time)) .toList(); // List measureSorted = measure.stream().sorted(Comparator.comparingInt(i -> i)).toList(); // int[] measurements = new int[q]; int i = 0; while (time < n){ if (time == measurements.get(measure_id).time){ measurements.get(measure_id).val = evaluate(n, m, snow); // System.out.println(evaluate(n, m, snow)); // measurements[i++] = evaluate(n, m, snow); ++measure_id; } move(n, m, snow); ++time; } int last = evaluate(n, m, snow); while (measure_id != q){ // System.out.println(last); measurements.get(measure_id).val = last; // measurements[i++] = last; ++measure_id; } measurements.stream() .sorted(Comparator.comparingInt(measPoint -> measPoint.index)) .forEach(measPoint -> { System.out.println(measPoint.val); }); } } class MeasPoint { int time; int val; int index; public MeasPoint(int time, int index) { this.time = time; this.index = index; } }