Codeforces Round #701 (Div. 2) D. Multiples and Power Differences
题意
给定(n*m)的矩阵(A),要求构造出一个(n*m)的矩阵(B),满足
-
(1le b_{i,j}le 10^6)
-
(b_{i,j})是(a_{i,j})的倍数
-
矩阵(B)中每个元素与相邻任何元素的值之差的绝对值必须是某个正整数的四次方
限制
(1le n,mle 500)
(1le a_{i,j}le 16)
思路
注意到(1le a_{i,j}le 16),首先想到的是应当先求出一个数(d),且(1)到(16)任一数字都是(d)的因子
(16!)显然过大,所以(d=lcm{1,2,cdots ,16}=720720lt 10^6)
然后可以假设(B)矩阵所有元素都是(d),但题目要求的是相邻差值为某个正整数的四次方
所以可以错位令其加上(A)矩阵中数的四次方,使得:
对于任意一个值为(d)的位置,它与四周元素的差值为四周元素值的四次方
对于任意一个值不为(d)的位置,它的四周元素值均为(d)(差值即自身的四次方)
代码
#include<bits/stdc++.h>
using namespace std;
const int d=2*2*2*2*3*3*5*7*11*13; //lcm(1~16)
int main()
{
int n,m,a;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
scanf("%d",&a);
if((i+j)&1)
printf("%d",d);
else
printf("%d",d+a*a*a*a);
putchar(j==m?'
':' ');
}
return 0;
}