AT_abc331_d [ABC331D] Tile Pattern - 洛谷
题解来自AT_abc331_d [ABC331D] Tile Pattern - 洛谷
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
typedef long long ll;
ll s[1001][1001];
int n, q;
ll Q(int x, int y) {
if (x < 0 || y < 0) {
return 0;
}
return s[n - 1][n - 1] * (x / n) * (y / n) + s[n - 1][y % n] * (x / n) + s[x % n][n - 1] * (y / n) + s[x % n][y % n];
}
int main()
{
cin >> n >> q;
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
char ch;
cin >> ch;
s[i][j] = (ch == 'B');
}
}
for (int i = 0; i < n; ++i)
{
for (int j = 1; j < n; ++j)
{
s[i][j] += s[i][j - 1];
}
}
for (int j = 0; j < n; ++j)
{
for (int i = 1; i < n; ++i)
{
s[i][j] += s[i - 1][j];
}
}
for (int xl, xr, yl, yr; q--;)
{
cin >> xl >> yl >> xr >> yr;
cout << Q(xr, yr) - Q(xl - 1, yr) - Q(xr, yl - 1) + Q(xl - 1, yl - 1) << endl;
}
return 0;
}