Submission #48157278
Source Code Expand
#include <bits/stdc++.h>
#include <atcoder/modint>
namespace {
using ModInt [[maybe_unused]] = atcoder::modint998244353;
using Num [[maybe_unused]] = long long int;
using Vec [[maybe_unused]] = std::vector<Num>;
using Set [[maybe_unused]] = std::set<Num>;
using Mset [[maybe_unused]] = std::multiset<Num>;
using Edges [[maybe_unused]] = std::vector<std::vector<Num>>;
template<typename T>
using Q [[maybe_unused]] = std::queue<T>;
template<typename T>
using PQ [[maybe_unused]] = std::priority_queue<T, std::vector<T>, std::greater<T>>;
}
constexpr Num Len = 1024;
Num n, q;
Num grid[Len][Len];
Num cumsum[Len][Len];
Num count_sub(Num top, Num left, Num bottom, Num right) {
return cumsum[bottom][right] - cumsum[top][right] - cumsum[bottom][left] + cumsum[top][left];
}
Num count_full(Num bottom, Num right) {
const auto n_full = count_sub(0, 0, n, n);
const auto height = bottom / n;
const auto width = right / n;
const auto b = bottom % n;
const auto r = right % n;
Num total = height * width * n_full;
total += count_sub(0, 0, n, r) * height;
total += count_sub(0, 0, b, n) * width;
total += count_sub(0, 0, b, r);
return total;
}
void calc_cumsum() {
for(Num y{1}; y<=n; ++y) {
for(Num x{1}; x<=n; ++x) {
cumsum[y][x] = grid[y-1][x-1];
}
}
for(Num y{0}; y<=n; ++y) {
for(Num x{1}; x<=n; ++x) {
cumsum[y][x] += cumsum[y][x-1];
}
}
for(Num x{0}; x<=n; ++x) {
for(Num y{1}; y<=n; ++y) {
cumsum[y][x] += cumsum[y-1][x];
}
}
}
void solve(std::istream& is, std::ostream& os) {
is >> n >> q;
for(Num y{0}; y<n; ++y) {
std::string s;
is >> s;
for(Num x{0}; x<n; ++x) {
const Num b = (s.at(x) == 'B') ? 1 : 0;
grid[y][x] = b;
}
}
calc_cumsum();
while(q-- > 0) {
Num a, b, c, d;
is >> a >> b >> c >> d;
++c;
++d;
Num total = count_full(c, d);
total -= count_full(a, d);
total -= count_full(c, b);
total += count_full(a, b);
os << total << "\n";
}
}
int main(void) {
solve(std::cin, std::cout);
return 0;
}
Submission Info
| Submission Time |
|
| Task |
D - Tile Pattern |
| User |
zettsut |
| Language |
C++ 20 (gcc 12.2) |
| Score |
450 |
| Code Size |
2322 Byte |
| Status |
AC |
| Exec Time |
443 ms |
| Memory |
20036 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
450 / 450 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
00_sample_00.txt, 00_sample_01.txt |
| All |
00_sample_00.txt, 00_sample_01.txt, 01_corner_00.txt, 01_corner_01.txt, 01_corner_02.txt, 02_random_00.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 03_max_00.txt, 03_max_01.txt, 04_n_small_00.txt, 04_n_small_01.txt, 04_n_small_02.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 00_sample_00.txt |
AC |
1 ms |
3484 KiB |
| 00_sample_01.txt |
AC |
1 ms |
3572 KiB |
| 01_corner_00.txt |
AC |
403 ms |
4008 KiB |
| 01_corner_01.txt |
AC |
1 ms |
3616 KiB |
| 01_corner_02.txt |
AC |
1 ms |
3512 KiB |
| 02_random_00.txt |
AC |
357 ms |
6416 KiB |
| 02_random_01.txt |
AC |
214 ms |
6504 KiB |
| 02_random_02.txt |
AC |
207 ms |
4632 KiB |
| 02_random_03.txt |
AC |
118 ms |
4752 KiB |
| 02_random_04.txt |
AC |
153 ms |
13632 KiB |
| 02_random_05.txt |
AC |
361 ms |
12684 KiB |
| 03_max_00.txt |
AC |
443 ms |
20036 KiB |
| 03_max_01.txt |
AC |
437 ms |
20020 KiB |
| 04_n_small_00.txt |
AC |
283 ms |
3576 KiB |
| 04_n_small_01.txt |
AC |
283 ms |
3524 KiB |
| 04_n_small_02.txt |
AC |
282 ms |
3548 KiB |