1 条题解

  • 0
    @ 2025-5-19 20:21:26

    解题思路

    1. 前缀和优化:为了高效计算矩形区域的总和,预处理二维前缀和数组。
    2. 二维前缀和公式
    3. 输入输出处理:注意行和列的索引从1开始,以及每个测试用例后需输出空行。

    代码示例(C++)

    #include <iostream>
    using namespace std;
    
    const int MAX_SIZE = 1005;
    int prefix[MAX_SIZE][MAX_SIZE]; // 前缀和数组,1-based索引
    
    int main() {
        int N;
        cin >> N;
        for (int cases = 0; cases < N; ++cases) {
            int R, S;
            cin >> R >> S;
            // 初始化前缀和数组
            for (int i = 1; i <= R; ++i) {
                for (int j = 1; j <= S; ++j) {
                    cin >> prefix[i][j];
                    prefix[i][j] += prefix[i-1][j] + prefix[i][j-1] - prefix[i-1][j-1];
                }
            }
            int D;
            cin >> D;
            for (int q = 0; q < D; ++q) {
                int r1, s1, r2, s2;
                cin >> r1 >> s1 >> r2 >> s2;
                // 计算矩形区域和
                int sum = prefix[r2][s2] - prefix[r1-1][s2] - prefix[r2][s1-1] + prefix[r1-1][s1-1];
                cout << "Absolutni hodnota pohodlnosti je " << sum << " bodu." << endl;
            }
            // 输出空行(每个测试用例后)
            if (cases != N-1 || D != 0) { // 处理最后一个测试用例后可能不需要空行的情况(但题目要求每个后都有)
                cout << endl;
            }
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1216
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者