Submission details
Task:Forest density
Sender:ileska
Submission time:2025-09-22 17:49:00 +0300
Language:C++ (C++20)
Status:READY
Result:
Test results
testverdicttime
#10.00 sdetails
#20.55 sdetails
#30.54 sdetails

Compiler report

input/code.cpp: In function 'int main()':
input/code.cpp:37:23: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
   37 |   for (int yy = 0; yy < size; yy++) {
      |                    ~~~^~~~~~
input/code.cpp:39:25: warning: comparison of integer expressions of different signedness: 'int' and 'unsigned int' [-Wsign-compare]
   39 |     for (int xx = 0; xx < size; xx++) {
      |                      ~~~^~~~~~

Code

#include <iostream>
// #include <string>
#include <vector>
// def getSubSum(startY,startX,endY,endX):
//     # print(sumMap[endY][endX],endX,endY)
//     # print(sumMap[startY][startX],startX,startY)
//     ret = sumMap[endY][endX]
//     if startY != 0:
//         ret -= sumMap[startY-1][endX]
//     if startX != 0:
//         ret -= sumMap[endY][startX-1]
//     if startY != 0 and startX != 0:
//         ret += sumMap[startY-1][startX-1]
//     return ret

int getSubSum(int startX, int startY, int endX, int endY,
              std::vector<int> &sumMap, int size) {
  // std::cout << startX << std::endl;
  int ret = sumMap[startY * size + startX];
  if (startY != 0)
    ret -= sumMap[(startY - 1) * size + endX];
  if (startX != 0)
    ret -= sumMap[(startY)*size + endX - 1];
  if (startX != 0 && startY != 0)
    ret += sumMap[(startY - 1) * size + endX - 1];
  return ret;
}
int main() {
  unsigned int size;
  int qCount;
  std::cin >> size;
  std::cin >> qCount;
  // std::cout << size << " " << qCount << std::endl;
  std::vector<int> forest(size * size, 0);
  std::vector<int> sumMap(size * size, 0);
  std::cin.get();
  for (int yy = 0; yy < size; yy++) {
    char ret;
    for (int xx = 0; xx < size; xx++) {
      std::cin.get(ret);
      // std::cout << (int)ret << " ";
      forest[yy * size + xx] = ret == '*' ? 1 : 0;
      if (yy == 0 && xx == 0) {
        sumMap[yy * size + xx] = ret == '*' ? 1 : 0;
      } else if (yy == 0) {
        sumMap[yy * size + xx] = sumMap[xx - 1] + forest[xx];
      } else if (xx == 0) {
        sumMap[yy * size + xx] = sumMap[(yy - 1) * size] + forest[yy * size];
      } else {
        sumMap[yy * size + xx] =
            sumMap[(yy - 1) * size + xx] + sumMap[yy * size + xx - 1] -
            sumMap[(yy - 1) * size + xx - 1] + forest[yy * size + xx];
      }
    }
    std::cin.get();
    // std::cout << std::endl;
  }
  // for (int yy = 0; yy < size; yy++) {
  //   for (int xx = 0; xx < size; xx++) {
  //     std::cout << sumMap[yy * size + xx];
  //   }
  //   std::cout << std::endl;
  // }
  for (int qq = 0; qq < qCount; qq++) {
    int x0, y0, x1, y1;
    std::cin >> x0;
    std::cin >> y0;
    std::cin >> x1;
    std::cin >> y1;
    // std::cout << x0 << std::endl;
    std::cout << getSubSum(x0 - 1, y0 - 1, x1 - 1, y1 - 1, sumMap, size)
              << std::endl;
  }
}

Test details

Test 1

Verdict:

input
10 100
**.*.*.**.
*.**.*..*.
.*****.**.
**....***.
...

correct output
10
14
5
7
8
...

user output
-2
-2
1
-1
0
...
Truncated

Test 2

Verdict:

input
1000 200000
**.**.****..**.***..**.***.**....

correct output
41079
2824
15631
1548
8483
...

user output
-217440
-86841
-120234
-26750
-15000
...
Truncated

Test 3

Verdict:

input
1000 200000
******************************...

correct output
1000000
1000000
1000000
1000000
1000000
...

user output
1
1
1
1
1
...
Truncated