1 条题解

  • 0
    @ 2026-7-10 16:57:40
    #include <bits/stdc++.h>
    using namespace std;
    
    const int MAX = 5005;
    int sum[MAX][MAX];
    
    int main() {
        int n, m;
        cin >> n >> m;
        for (int i = 1; i <= n; ++i) {
            int x, y, v;
            cin >> x >> y >> v;
            sum[x + 1][y + 1] += v;   // 偏移
            // 整体偏移不会影响最终结果
        }
        // 前缀和
        // 必须等到所有输入完成再维护前缀和
        for (int i = 1; i < MAX; ++i)
            for (int j = 1; j < MAX; ++j)
                sum[i][j] += sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];
    
        // 计算固定边长m的所有子矩形和找最大
        int ans = 0;
        for (int i = 1; i + m - 1 < MAX; ++i)
            for (int j = 1; j + m - 1 < MAX; ++j) {
                int x2 = i + m - 1, y2 = j + m - 1;
                int val = sum[x2][y2] - sum[i - 1][y2] - sum[x2][j - 1] + sum[i - 1][j - 1];
                ans = max(ans, val);
            }
        cout << ans;
        return 0;
    }
    
    • 1

    信息

    ID
    682
    时间
    1000ms
    内存
    500MiB
    难度
    5
    标签
    递交数
    20
    已通过
    1
    上传者