社区讨论

帮我解决必关

P8228「Wdoi-5」模块化核熔炉参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mmj7oubq
此快照首次捕获于
2026/03/09 21:23
16 小时前
此快照最后确认于
2026/03/10 13:40
刚刚
查看原帖
Subtask #1和#4全AC,其它全WA
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=2e3+5;
int n,m,xx,yy,z,r,k;
int g1[N][N],g2[N][N],g[N][N];
signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    cin>>n>>m;
    while(m--){
        cin>>xx>>yy>>z>>r>>k;
        int x=yy-z+n,y=yy-xx+n;
        g1[min(2*n,y+r-1)][x]+=k;g1[min(2*n,y+r-1)][min(2*n,x+r-1)]-=k;
        g1[max(0,y-r)][max(0,x-r+1)]-=k;g1[max(0,y-r)][x]+=k;
        g2[min(2*n,y+r-1)][min(2*n,x+r-1)]+=k;g2[max(0,y-1)][min(2*n,x+r-1)]-=k;
        g2[max(0,y-1)][max(0,x-r)]-=k;g2[max(0,y-r-1)][max(0,x-r)]+=k;
    }
    for(int i=2*n-1;i>=1;i--){
        for(int j=1;j<=2*n-1;j++){
            g1[i][j]+=g1[i][j-1];
        }
    }
    for(int i=2*n-1;i>=1;i--){
        for(int j=1;j<=2*n-1;j++){
            g2[i][j]+=g2[i+1][j];
        }
    }
    for(int i=2*n-1;i>=1;i--){
        for(int j=1;j<=2*n-1;j++){
            g[i][j]=g1[i][j]+g2[i][j];
        }
    }
    for(int i=1;i<=n;i++){
        int x=n+i-1,y=2*n-1;
        while(1){
            if(x==0)break;
            g[y][x]+=g[y+1][x+1];
            y--;x--;
        }
    }
    for(int i=1;i<n;i++){
        int x=2*n-1,y=2*n-2-i+1;
        while(1){
            if(y==0)break;
            g[y][x]+=g[y+1][x+1];
            y--;x--;
        }
    }
    for(int i=1;i<=n;i++){
        int x=n+i-1,y=2*n-1;
        while(1){
            if(x==0)break;
            cout<<g[y][x]<<' ';
            y--;x--;
        }
    }
    for(int i=1;i<n;i++){
        int x=2*n-1,y=2*n-2-i+1;
        while(1){
            if(y==0)break;
            cout<<g[y][x]<<' ';
            y--;x--;
        }
    }
    return 0;
}
用二个数组的思路 g1存横向的,g2存竖向的,g再把g1,g2加起来,再对g做斜向查分,最后按题目输出
哪位大哥&大佬能帮我解决一下qwq

回复

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

正在加载回复...