题目链接
思路:这是一道构造题,构造的通常是通过挖掘这道题的某些性质来找一种通解。在这题中,有几个条件显得很突兀,
1
≤
b
i
j
≤
1
0
6
1≤b_{ij}≤10^6
1≤bij≤106,
1
≤
a
i
j
≤
16
1≤a_{ij}≤16
1≤aij≤16,而这题中
b
i
j
b_{ij}
bij还都是
a
i
j
a_{ij}
aij的倍数,很容易往最小公倍数上想,但是如果每两个数构造一次显然最终会远大于
1
0
6
10^6
106。其实还有个条件也可以利用,这是个
n
∗
m
n*m
n∗m的矩阵,关于矩阵的构造有时会利用到
i
∗
j
i*j
i∗j的奇偶性,在这题中,不难发现每个
b
i
j
b_{ij}
bij只与上下左右四个数有关,由此我们可以这样构造当
i
∗
j
i*j
i∗j为奇数时
b
i
j
b_{ij}
bij为1到16的最小公倍数(720720),为偶数时为720720+
a
i
j
4
{a_{ij}}^4
aij4,这样即可符合所有条件
代码:
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
using namespace std;
typedef long long ll;
typedef pair <int, int> PII;
const int N = 1e3 + 10;
const ll mod = 1e9 + 7;
int n, m, a[N][N];
int main() {
cin >> n >> m;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
scanf("%d", &a[i][j]);
if((i + j) & 1) printf("720720 ");
else printf("%d ", 720720 + a[i][j] * a[i][j] * a[i][j] * a[i][j]);
}
printf("\n");
}
return 0;
}