Submission #1603837


Source Code Expand

// #include {{{
#include <array>
#include <vector>
#include <deque>
#include <queue>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <string>
#include <algorithm>
#include <numeric>
#include <functional>
#include <iterator>
#include <tuple>
#include <utility>
#include <random>
#include <limits>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cstdint>
#include <cassert>
// }}}

using namespace std;

// macros {{{
template<typename T, size_t N>
constexpr size_t NELEMS(T (&)[N]) { return N; }

template<typename InputIt>
void PRINT_RANGE(InputIt first, InputIt last)
{
    for(; first != last; ++first)
        cout << *first << (first==last ? "" : " ");
    cout << "\n";
}

template<typename T>
void PRINT_MATRIX(T mat, size_t nr, size_t nc)
{
    for(size_t r = 0; r < nr; ++r) {
        for(size_t c = 0; c < nc; ++c) {
            cout << mat[r][c] << (c==nc-1 ? "" : " ");
        }
        cout << "\n";
    }
}

#define FOR(i, start, end) for(int i = (start); i < (end); ++i)
#define REP(i, n) FOR(i, 0, n)
// }}}

// types {{{
using ll  = long long;
using ull = unsigned long long;
// }}}

ll N, M, Q;
vector<vector<int>> S;

vector<vector<ll>> V;  // 頂点数
vector<vector<ll>> EH; // 水平な辺の数
vector<vector<ll>> EV; // 垂直な辺の数

void init()
{
    V.assign(N+1, vector<ll>(M+1, 0));

    FOR(y, 1, N+1) {
        FOR(x, 1, M+1) {
            V[y][x] = V[y-1][x] + V[y][x-1] - V[y-1][x-1] + S[y][x];
        }
    }

    EH.assign(N+1, vector<ll>(M+1, 0));
    EV.assign(N+1, vector<ll>(M+1, 0));
    FOR(y, 1, N+1) {
        FOR(x, 1, M+1) {
            EH[y][x] = EH[y-1][x] + EH[y][x-1] - EH[y-1][x-1];
            if(S[y][x] == 1 && S[y][x-1] == 1)
                ++EH[y][x];

            EV[y][x] = EV[y-1][x] + EV[y][x-1] - EV[y-1][x-1];
            if(S[y][x] == 1 && S[y-1][x] == 1)
                ++EV[y][x];
        }
    }

#if DEBUG
    PRINT_MATRIX(V,  N+1, M+1);
    PRINT_MATRIX(EH, N+1, M+1);
    PRINT_MATRIX(EV, N+1, M+1);
#endif
}

void solve()
{
    init();

    REP(_, Q) {
        int x1, y1;
        int x2, y2;
        cin >> y1 >> x1;
        cin >> y2 >> x2;

        ll v = V[y2][x2] - V[y2][x1-1] - V[y1-1][x2] + V[y1-1][x1-1];

        ll eh = EH[y2][x2] - EH[y2][x1] - EH[y1-1][x2] + EH[y1-1][x1];
        ll ev = EV[y2][x2] - EV[y2][x1-1] - EV[y1][x2] + EV[y1][x1-1];

        ll ans = v - eh - ev;
        cout << ans << "\n";
    }
}

int main()
{
    cin >> N >> M >> Q;
    S.assign(N+1, vector<int>(M+1, false));
    FOR(y, 1, N+1) {
        string s;
        cin >> s;
        transform(begin(s), end(s), begin(S[y])+1, [](char c) {
            return c == '1' ? 1 : 0;
        });
    }
    //PRINT_MATRIX(S, N+1, M+1);

    solve();

    return 0;
}

Submission Info

Submission Time
Task C - Nuske vs Phantom Thnook
User yumsiim
Language C++14 (GCC 5.4.1)
Score 700
Code Size 2820 Byte
Status AC
Exec Time 801 ms
Memory 112384 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 700 / 700
Status
AC × 2
AC × 50
Set Name Test Cases
Sample s1.txt, s2.txt
All 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, 41.txt, 42.txt, 43.txt, 44.txt, 45.txt, 46.txt, 47.txt, 48.txt, s1.txt, s2.txt
Case Name Status Exec Time Memory
01.txt AC 737 ms 111232 KB
02.txt AC 794 ms 111104 KB
03.txt AC 738 ms 110976 KB
04.txt AC 786 ms 110464 KB
05.txt AC 738 ms 111360 KB
06.txt AC 798 ms 110976 KB
07.txt AC 712 ms 105472 KB
08.txt AC 762 ms 106624 KB
09.txt AC 711 ms 95744 KB
10.txt AC 801 ms 110976 KB
11.txt AC 735 ms 111232 KB
12.txt AC 625 ms 40448 KB
13.txt AC 486 ms 1920 KB
14.txt AC 498 ms 1536 KB
15.txt AC 453 ms 640 KB
16.txt AC 496 ms 1024 KB
17.txt AC 481 ms 1408 KB
18.txt AC 493 ms 1024 KB
19.txt AC 482 ms 1152 KB
20.txt AC 751 ms 99456 KB
21.txt AC 718 ms 110592 KB
22.txt AC 794 ms 110976 KB
23.txt AC 497 ms 2176 KB
24.txt AC 792 ms 110976 KB
25.txt AC 447 ms 640 KB
26.txt AC 485 ms 1152 KB
27.txt AC 482 ms 1024 KB
28.txt AC 494 ms 1024 KB
29.txt AC 492 ms 1536 KB
30.txt AC 490 ms 1152 KB
31.txt AC 714 ms 111616 KB
32.txt AC 776 ms 111232 KB
33.txt AC 744 ms 110976 KB
34.txt AC 788 ms 111232 KB
35.txt AC 714 ms 112128 KB
36.txt AC 768 ms 110720 KB
37.txt AC 718 ms 110848 KB
38.txt AC 763 ms 110720 KB
39.txt AC 713 ms 111360 KB
40.txt AC 783 ms 111232 KB
41.txt AC 739 ms 110976 KB
42.txt AC 765 ms 110720 KB
43.txt AC 707 ms 112384 KB
44.txt AC 765 ms 110592 KB
45.txt AC 1 ms 256 KB
46.txt AC 1 ms 256 KB
47.txt AC 1 ms 256 KB
48.txt AC 1 ms 256 KB
s1.txt AC 1 ms 256 KB
s2.txt AC 1 ms 256 KB