F.金玉其外矩阵(构造)

不可能的情况就是矩阵长度分别整除,显然与2矛盾。

否则有解,考虑每个子矩阵右上角放负数,然后和为-1。最后肯定有多的行,直接正数即可。

选定的基数要大于,保证最终和为正数。

#include<bits/stdc++.h>
using namespace std;
long long n,m,h,w;
int main()
{
cin>>n>>m>>h>>w;
if(n%h==0&&m%w==0)
{
puts("N");
return 0;
}
int mx = (n/h)*(m/w)+1;
puts("Y");
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(i%h==0&&j%w==0)
{
printf("%d ",-mx*w*h+(mx-1));
}
else printf("%d ",mx);
}
printf("\n");
}
}