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;
}
posted @ 2023-03-09 15:31  Lrj0709  阅读(24)  评论(0)    收藏  举报