题目
![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;
}
}