| Task: | Forest density |
| Sender: | aalto26dm_017 |
| Submission time: | 2026-09-21 16:56:51 +0300 |
| Language: | C++ (C++20) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | details |
| #2 | ACCEPTED | 0.33 s | details |
| #3 | ACCEPTED | 0.31 s | details |
Code
#include <iostream>
#include <vector>
using namespace std;
int main(){
int n, q;
cin >> n >> q;
vector<vector<char>> mat(n, vector<char>(n));
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
cin>> mat[i][j];
}
}
vector<vector<int>> queries(q, vector<int>(4));
for (int i=0;i<q;i++){
cin >> queries[i][0] >> queries[i][1] >> queries[i][2] >> queries[i][3];
}
vector<vector<int>> trees(n, vector<int>(n));
for (int i=0;i<n;i++){
for (int j=0;j<n;j++){
int tree=mat[i][j]=='*';
if (i>0){
tree+=trees[i-1][j];
}
if (j>0){
tree+=trees[i][j-1];
}
if (i>0 && j>0){
tree-=trees[i-1][j-1];
}
trees[i][j]=tree;
//cout << trees[i][j];
}
//cout << '\n';
}
for (auto &q: queries){
vector<int> coord1={min(q[0],q[2])-2, min(q[1],q[3])-2};
vector<int> coord2={max(q[0],q[2])-1, max(q[1],q[3])-1};
/*
for (int i: coord1){
cout << i << ' ';
}
for (int i: coord2){
cout << i << '\n';
}
*/
int val1=trees[coord2[0]][coord2[1]];
//cout << "B";
int val2=coord1[0]>=0 ? trees[coord1[0]][coord2[1]] : 0;
//cout << "C";
int val3=coord1[1]>=0 ? trees[coord2[0]][coord1[1]] : 0;
//cout << "D";
int val4=0;
if (coord1[0]>=0){
if (coord1[1]>=0){
val4=trees[coord1[0]][coord1[1]];
}
}
//cout << "E\n";
cout << val1-val2-val3+val4<<'\n';
}
}Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 10 100 **.*.*.**. *.**.*..*. .*****.**. **....***. ... |
| correct output |
|---|
| 10 14 5 7 8 ... |
| user output |
|---|
| 10 14 5 7 8 ... |
Test 2
Verdict: ACCEPTED
| input |
|---|
| 1000 200000 **.**.****..**.***..**.***.**.... |
| correct output |
|---|
| 41079 2824 15631 1548 8483 ... |
| user output |
|---|
| 41079 2824 15631 1548 8483 ... |
Test 3
Verdict: ACCEPTED
| input |
|---|
| 1000 200000 ******************************... |
| correct output |
|---|
| 1000000 1000000 1000000 1000000 1000000 ... |
| user output |
|---|
| 1000000 1000000 1000000 1000000 1000000 ... |
