问题标题: 酷町堂:1803 用了scanf和printf还不对

0
0
已解决
宋灏
宋灏
初级光能
初级光能

题目链接: 酷町堂:1803

#include <iostream>
#include <cstdio>
#pragma GCC optimize(3)
using namespace std;
int d, n, ti, ans;
int a[3000][3000];
int b[3000][3000];
int maxx, minx = 11111111, maxy, miny = 11111111;
int sum(int x, int y) {
    int cnt = 0;
    for (int i = x - d; i <= x + d; i ++) {
        for (int j = y - d; j <= y + d; j ++) {
            cnt += a[i][j];
        }
    }
    return cnt;
}
void flag(int x, int y) {
    for (int i = x - d; i <= x + d; i ++) {
        for (int j = y - d; j <= y + d; j ++) {
            b[i][j] = 1;
        }
    }
}
int main() {
    scanf("%d",&d);
    scanf("%d",&n);
    for (int i = 1; i <= n; i ++) {
        int x, y, z;
        scanf("%d%d%d",&x,&y,&z);
        a[x][y] = z;
        flag(x, y);
        maxx = max(maxx, x);
        maxy = max(maxy, y);
        minx = min(minx, x);
        miny = min(miny, y);
    }
    for (int i = max(minx - d, 0 + d); i <= min(maxx + d, 1024 - d); i ++) {
        for (int j = max(miny - d, 0 + d); j <= min(maxx + d, 1024 - d); j ++) {
            if (b[i][j] == 0) {
                continue;
            }
            int x = sum(i, j);
            if (x > ans) {
                ans = x;
                ti = 1;
            } else if (x == ans) {
                ti ++;
            }
        }
    }
    printf("%d ",ti);
    printf("%d",ans);
    return 0;
}

求大佬解答???

为啥会错??


0
已采纳
陈俊霖
陈俊霖
新手天翼
新手天翼

枚举方法错了,应该先把所有点能炸到的**数量算出来再求最大值,而计算上述值(f[i][j])可从**的角度来枚举

0
孙敬楠
孙敬楠
高级守护
高级守护

你这个时间复杂度在1024^3左右,当然超了

我要回答