题目
![image]()
链接: https://codeforces.com/contest/1955/problem/B
题解:
思路
- 先将矩阵元素存入multiset(可重复set集合)
- 然后构建一个新矩阵,以矩阵中最小的的元素为初始元素,然后利用公式进行构建
- 将元素存入新的multiset集合,用==对两个multiset集合进行比较,如果相等则输出YES,否则输出NO。
代码
#include <iostream>
#include <algorithm>
#include<set>
using namespace std;
multiset<int>s;
multiset<int>t;
int a[510][510];
int main()
{
    int T;
    cin >> T;
    while (T--)
    {
        int n, c, d, Min=1e18;
        cin >> n >> c >> d;
        s.clear();
        t.clear();
        for(int i=1;i<=n*n;i++)
        {
            int x;
            cin>>x;
            s.insert(x);
            Min=min(Min,x);
        }
        a[0][0]=Min;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(i+1<n)
                    a[i+1][j]=a[i][j]+c;
                if(j+1<n)
                    a[i][j+1]=a[i][j]+d;
                t.insert(a[i][j]);
            }
        }
        if(s==t)cout<<"YES"<<endl;
        else cout<<"NO"<<endl;
    }
}