比赛 收心赛 评测结果 AAAATTTTTTTTTTTTTTTT
题目名称 矩阵游戏 最终得分 20
用户昵称 PXCZM 运行时间 19.057 s
代码语言 C++ 内存使用 3.67 MiB
提交时间 2026-02-24 12:02:51
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int n,m;
int a[400][400];
int b[400][400];
bool flag;
void dfs(int x,int y)
{
    if(y==m+1)
    {
        y=1;
        x++;
    }
    if(x==n+1)
    {
        bool f=0;
        for(int i=1;i<n;i++)
            for(int j=1;j<m;j++)
                if(a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1]!=b[i][j])
                {
                    f=1;
                    break;
                }
        flag=!f;
        return;
    }
    if(x==y==1)
    {
        for(int i=0;i<=b[1][1];i++)
        {
            a[x][y]=i;
            dfs(x,y+1);
            if(flag) return;
        }
    }
    else if(x==1)
    {
        for(int i=0;i<=b[1][y-1]-a[1][y-1];i++)
        {
            a[x][y]=i;
            dfs(x,y+1);
            if(flag) return;
        }
    }
    else if(y==1)
    {
        for(int i=0;i<=b[x-1][1]-a[x-1][1];i++)
        {
            a[x][y]=i;
            dfs(x,y+1);
            if(flag) return;
        }
    }
    else
    {
        int tp=b[x-1][y-1]-a[x-1][y-1]-a[x][y-1]-a[x-1][y];
        if(tp<0||tp>1000000) return;
        a[x][y]=tp;
        dfs(x,y+1);
    }
}
int main()
{
    freopen("matrix.in","r",stdin);
    freopen("matrix.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(nullptr);cout.tie(nullptr);
    int T;cin>>T;
    while(T--)
    {
        flag=0;
        memset(a,sizeof(a),0);
        cin>>n>>m;
        for(int i=1;i<n;i++)
            for(int j=1;j<m;j++)
                cin>>b[i][j];
        dfs(1,1);
        if(flag)
        {
            cout<<"YES\n";
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=m;j++) cout<<a[i][j]<<' ';
                cout<<'\n';
            }
        }
        else cout<<"NO\n";
    }
    return 0;
}