社区讨论

解决#8WA的很赖皮的逃课方法(#8原理求解)

P2280[HNOI2003] 激光炸弹参与者 4已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@mhj1pmi5
此快照首次捕获于
2025/11/03 19:17
4 个月前
此快照最后确认于
2025/11/03 19:17
4 个月前
查看原帖
#8的输出是10725,利用找不到最大值时原数值不变的特判就能逃课(完全不建议这么做)
在想真的没有负价值地块吗?怎么想也想不到一种可能的数据,使得炸弹右下角可以在maxx或者maxy之外
以下为神秘修改后过了#8但是只AC三个的代码(改之前只有#8wa)
CPP
#include <bits/stdc++.h>
using namespace std;
int price[5140][5140] = {0};
int lsum[5140][5140]  = {0};
int n,m;
int x,y,v;
int manx = -1,many = -1;
int main()
{
    cin >> n >> m;
    while(n--)
    {
        cin >> x >> y >> v;
        price[x+1][y+1] += v;
        manx = max(x+1,manx); 
        many = max(y+1,many);
    }
    for(int i = 1; i <= max(manx,many); i++)
    {//                     ^改了此处,原为manx^
        for(int j = 1; j <= max(manx,many); j++)
        {
            lsum[i][j] = price[i][j] + lsum[i-1][j] + lsum[i][j-1] - lsum[i-1][j-1];
        }
    }
    int manv = -1;
    for(    int i = 1; i <= manx/*x+1*/; i++)
    {
        for(int j = 1; j <= many; j++)
        {
            manv = max(manv,lsum[i-1+m][j-1+m] - lsum[i-1][j-1+m] - lsum[i-1+m][j-1] + lsum[i-1][j-1]);
        }
    }
    cout << manv;
}

回复

5 条回复,欢迎继续交流。

正在加载回复...