https://codeforces.com/contest/1485/problem/D
题意:给定∗m的矩阵A,要求构造出一个n∗m的矩阵B满足
-
1≤b[i,j]≤1e6
-
b[i,]j是a[i,j]的倍数
-
矩阵B中每个元素与相邻任何元素的值之差的绝对值是某个正整数的四次方
思路:
这么看没什么思路,看到input那边ai,j (1≤ai,j≤16),往这个想想。
构造往特殊的先想,那么bi,j比较特殊的就是全部ai,j的公倍数。考虑了这个之后,那么如何构造相邻差是四次方呢?
考虑奇偶。(i+j)&1和(i+j)%2==0分开构造。取题目的输入来相加。
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<cmath>
#include<map>
#include<set>
#include<cstdio>
#include<algorithm>
#define debug(a) cout<<#a<<"="<<a<<endl;
using namespace std;
const int maxn=600;
typedef long long LL;
inline LL read(){LL x=0,f=1;char ch=getchar(); while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;}
LL a[maxn][maxn];
int main(void)
{
cin.tie(0);std::ios::sync_with_stdio(false);
/*
for(LL i=1;i<=16;i++){
cin>>a[i];
}
LL gcd=a[1];LL lcm=0;
for(LL i=1;i<=16;i++){
lcm=gcd/__gcd(gcd,a[i])*a[i];
gcd=lcm;
}
cout<<lcm<<"\n";*/
LL n,m;cin>>n>>m;
for(LL i=1;i<=n;i++){
for(LL j=1;j<=m;j++){
cin>>a[i][j];
if((i+j)&1){
cout<<720720<<" ";
}
else{
cout<<720720+a[i][j]*a[i][j]*a[i][j]*a[i][j]<<" ";
}
}
cout<<"\n";
}
return 0;
}