我考虑了坐标为零,但91,#9错了,HELP!!
查看原帖
我考虑了坐标为零,但91,#9错了,HELP!!
1154144
yunyi1129楼主2024/1/23 20:43
#include <iostream>
#include <algorithm>
long long value[5005][5005],sum[5005][5005];
using namespace std;
long long get(int x1, int y1, int x2, int y2) {
    if (!x1 && !y1)return sum[x2][y2];
    if (!x1) return sum[x2][y2] - sum[x2][y1 - 1];
    if (!y1) return sum[x2][y2] - sum[x1 - 1][y2];
    return sum[x2][y2] + sum[x1 - 1][y1 - 1] - sum[x2][y1 - 1] - sum[x1 - 1][y2];
}
void pre(int xn, int yn) {
    sum[0][0] = value[0][0];
    for (int i = 1; i <= xn; i++)sum[i][0] = sum[i - 1][0] + value[i][0];
    for (int j = 1; j <= yn; j++)sum[0][j] = sum[0][j - 1] + value[0][j];
    for (int i = 1; i <= xn; i++)for (int j = 1; j <= yn; j++)sum[i][j] = value[i][j] + sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];
}
int main()
{
    int n, m, xn = 0, yn = 0;
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        int x, y, v;  cin >> x >> y >> v; 
        value[x][y] += v; if (xn < x)xn = x; if (yn < y)yn = y;
    }
    pre(xn, yn);
    int max = 0;
    for (int i = 0; i + m - 1 <= xn; i++) {
        for (int j = 0; j + m - 1 <= yn; j++) {
            int x = i + m - 1, y = j + m - 1;
            if (max < get(i, j, x, y)) {
                max = get(i, j, x, y);
            }
        }
    }
    cout << max;

    return 0;
}
2024/1/23 20:43
加载中...