D. Multiples and Power Differences 巧妙的构造
题目大意:
给你一个矩阵 (a) ,矩阵的大小是 (n*m) , (a[i][j]<=16) ,让你构造一个矩阵 (b) ,要求:
- (b[i][j]<=1e6)
- (b[i][j]) 是 (a[i][j]) 的倍数
- 对于矩阵 (b) 来说,一个位置和他相邻(共享一条边)位置的数差值的绝对值是 (k^4) ( (k>=1) ,(k) 不一定要相同)
题解:
非常巧妙的想法
- 因为 (720720 = LCM(1,2,3,...,16))
- 又因为 (786256 = 720720+16^4 < 1e6)
- 之后可以自己想一想,很简单啦
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+10;
typedef long long ll;
int a[550][550];
int solve(int x){
return x*x*x*x;
}
int main(){
int n,m,d = 720720;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
scanf("%d",&a[i][j]);
if((i&1)&&(j&1)) a[i][j] = d;
else if(!(i&1)&&!(j&1)) a[i][j] = d;
else a[i][j] = solve(a[i][j]) + d;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
printf("%d",a[i][j]);
if(j==m) printf("
");
else printf(" ");
}
}
}