CF821题解

发布时间 2023-12-08 07:34:54作者: Call_me_Eric

CF821

Codeforces Round 420 (Div. 2)

CF821A

link

CF821A题意

Okabe要改进他的实验室。实验室用一个 \(n\times n\) 的正方形网格表示(\(n\) 为正整数)。他认为,一个“好实验室”的网格内每一个不等于 \(1\) 的数字都可以用同一行和同一列的某个数字之和表示。换句话说,对于任意 \(x,y\)\(1 \le x,y \le n\)\(a_{x, y} \neq 1\)),存在两个数 \(s\)\(t\),使得\(a_{x, y} = a_{x, s} + a_{t, y}\),其中\(a_{i, j}\) 表示第 \(i\) 行第 \(j\) 列的整数。

帮助Okabe找出以下的实验室中哪个符合他的要求。

CF821A题解

暴力枚举即可

CF821A代码

#include<bits/stdc++.h>
using namespace std;
inline int read(){
    int x = 0, f = 1;char ch = getchar();
    while(ch < '0' || ch > '9'){if(ch == '-') f = -1;ch = getchar();}
    while(ch >= '0' && ch <= '9'){x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}
    return x * f;
}
const int maxn = 100;
int n;
int a[maxn][maxn];
signed main(){
    n = read();
    for(int i = 1;i <= n;i++)
        for(int j = 1;j <= n;j++)
            a[i][j] = read();
    for(int i = 1;i <= n;i++)
    for(int j = 1;j <= n;j++)
        if(a[i][j] != 1){
            bool check = false;
            for(int s = 1;s <= n && !check;s++)
            for(int t = 1;t <= n;t++){
                if(a[i][s] + a[t][j] == a[i][j]){
                    check = true;break;
                }
            }
            if(!check){puts("No");return 0;}
        }
    puts("YEs");
    return 0;
}