| 比赛 |
收心赛 |
评测结果 |
AAAAEEEWWWEEEEEEEEEE |
| 题目名称 |
矩阵游戏 |
最终得分 |
20 |
| 用户昵称 |
ChenBp |
运行时间 |
2.233 s |
| 代码语言 |
C++ |
内存使用 |
3.50 MiB |
| 提交时间 |
2026-02-24 12:01:53 |
显示代码纯文本
#include <iostream>
using namespace std;
int a[103][103],b[103][103];
int n,m;
bool ok=0;
bool ch(){
for(int i=1;i<=n-1;i++){
for(int j=1;j<=m-1;j++){
int x=a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1];
if(x!=b[i][j]) return 0;
}
}
return 1;
}
const int cz[4][2]={{0,0},{-1,0},{0,-1},{-1,-1}};
int gx(int x,int y){
int ans=1e6;
for(int i=0;i<4;i++){
int xx=x+cz[i][0],yy=y+cz[i][1];
if(xx>0&&yy>0) ans=min(ans,b[xx][yy]);
}
return ans;
}
void dfs(int x,int y){
if(ok) return;
if(y==m+1){
y=1;
x++;
}
if(x==n+1){
if(ch()){
cout<<"YES\n";
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<a[i][j]<<" \n"[j==m];
}
}
ok=1;
}
return;
}
for(int i=1;i<=gx(x,y);i++){
a[x][y]=i;
dfs(x,y+1);
}
}
int main(){
freopen("matrix.in","r",stdin);
freopen("matrix.out","w",stdout);
int t;
cin>>t;
while(t--){
cin>>n>>m;
bool c=1;
for(int i=1;i<=n-1;i++){
for(int j=1;j<=n-1;j++){
cin>>b[i][j];
if(b[i][j]>1e6) c=0;
}
}
if(c==0){
cout<<"NO\n";
continue;
}
if(n==2&&m==2){
cout<<"YES\n"<<b[1][1]<<" 0\n0 0\n";
}else if(n==2&&m==3){
cout<<"YES\n"<<b[1][1]<<" 0 "<<b[1][2]<<"\n"<<"0 0\n";
}else if(n==3&&m==2){
cout<<"YES\n"<<b[1][1]<<" 0\n0 0\n"<<b[2][1]<<" 0\n";
}else if(n==3&&m==3){
cout<<"YES\n"<<b[1][1]<<" 0 "<<b[1][2]<<"\n0 0 0\n"<<b[2][1]<<" 0 "<<b[2][2]<<"\n";
}else{
cout<<"NO\n";
}
}
return 0;
}