Submission #76484452


Source Code Expand

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int H, W, K;
    cin >> H >> W >> K;
    vector<string> grid(H);
    for (int i = 0; i < H; ++i) {
        cin >> grid[i];
    }

    // 转置,让行数较小
    if (H > W) {
        vector<string> new_grid(W, string(H, '0'));
        for (int i = 0; i < H; ++i) {
            for (int j = 0; j < W; ++j) {
                new_grid[j][i] = grid[i][j];
            }
        }
        grid = move(new_grid);
        swap(H, W);
    }

    const int max_sum = H * W;          // 前缀和的最大可能值
    vector<int> cnt(max_sum + 1, 0);    // 计数数组
    vector<int> used(max_sum + 1, 0);   // 时间戳数组
    long long ans = 0;
    int cur_stamp = 0;

    for (int top = 0; top < H; ++top) {
        vector<int> col_sum(W, 0);      // 列和,从 top 行到底部行累加
        for (int bottom = top; bottom < H; ++bottom) {
            // 更新列和
            for (int j = 0; j < W; ++j) {
                col_sum[j] += (grid[bottom][j] == '1');
            }

            // 统计 col_sum 中连续子数组和为 K 的个数
            ++cur_stamp;
            int prefix = 0;
            used[0] = cur_stamp;
            cnt[0] = 1;
            for (int j = 0; j < W; ++j) {
                prefix += col_sum[j];
                int need = prefix - K;
                if (need >= 0 && need <= max_sum && used[need] == cur_stamp) {
                    ans += cnt[need];
                }
                if (used[prefix] != cur_stamp) {
                    used[prefix] = cur_stamp;
                    cnt[prefix] = 0;
                }
                cnt[prefix]++;
            }
        }
    }

    cout << ans << '\n';
    return 0;
}

Submission Info

Submission Time
Task D - Count Subgrid Sum = K
User nxzwcry
Language C++23 (GCC 15.2.0)
Score 425
Code Size 1909 Byte
Status AC
Exec Time 282 ms
Memory 5844 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 425 / 425
Status
AC × 3
AC × 31
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt
Case Name Status Exec Time Memory
sample_01.txt AC 1 ms 3496 KiB
sample_02.txt AC 1 ms 3584 KiB
sample_03.txt AC 1 ms 3552 KiB
test_01.txt AC 1 ms 3536 KiB
test_02.txt AC 1 ms 3512 KiB
test_03.txt AC 1 ms 3456 KiB
test_04.txt AC 1 ms 3492 KiB
test_05.txt AC 146 ms 5584 KiB
test_06.txt AC 129 ms 5512 KiB
test_07.txt AC 247 ms 5460 KiB
test_08.txt AC 256 ms 5476 KiB
test_09.txt AC 171 ms 5536 KiB
test_10.txt AC 172 ms 5460 KiB
test_11.txt AC 171 ms 5840 KiB
test_12.txt AC 158 ms 5560 KiB
test_13.txt AC 142 ms 5536 KiB
test_14.txt AC 131 ms 5460 KiB
test_15.txt AC 148 ms 5792 KiB
test_16.txt AC 143 ms 5404 KiB
test_17.txt AC 282 ms 5584 KiB
test_18.txt AC 135 ms 5816 KiB
test_19.txt AC 129 ms 5828 KiB
test_20.txt AC 207 ms 5536 KiB
test_21.txt AC 243 ms 5572 KiB
test_22.txt AC 240 ms 5708 KiB
test_23.txt AC 213 ms 5844 KiB
test_24.txt AC 255 ms 5512 KiB
test_25.txt AC 148 ms 5476 KiB
test_26.txt AC 171 ms 5528 KiB
test_27.txt AC 161 ms 5692 KiB
test_28.txt AC 175 ms 5536 KiB