CF 821a
题目大意
现在有一个 \(n \times n\) 的实验室,kabe 认为,一个好的实验室,网格内不等于 \(1\) 的数都可以用同一行和同一列的某个数字之和表示,也就是 \(a_{x,y}=a_{x,s}+a_{t,y}\),\(a_{i,j}\) 表示第 \(i\) 行第 \(j\) 列的整数。
思路
我们可以尝试暴力的思想,因为 \(1 \le n \le 50\),可以依次枚举每一个 \(a_{i,j}\) 不等于 \(1\) 的数,再次枚举他的同一行,同一列,如果没有一个 \(a_{x,s}+a_{t,y}=a_{x,y}\),那么其实就可以说明,这是一个“不好的实验室”,输出 NO 就可以了。
Code
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e2+10;
int a[maxn][maxn],n;
signed main(){
cin >> n;
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
cin >> a[i][j];
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
if(a[i][j]!=1){
bool ans=false;
for(int s=1;s<=n;++s){
for(int t=1;t<=n;++t){
if(a[i][j]==a[i][t]+a[s][j]){
ans=true;
}
}
}
if(ans==false){
cout << "No" << endl;
return 0;
}
}
}
}
cout << "Yes" << endl;
return 0;
}

浙公网安备 33010602011771号