CF1734E 题解

· · 题解

题意简述

给出质数 n(2\le n<350),并给出 b_1,b_2,\cdots,b_n(0\le b_i<n),要求构造 n\times n 的矩阵 a,使得:

题目分析

欢迎来到思维难度 \gg 代码难度的构造题。

首先分析一下条件:

现在我们分析完了三个条件,只需要看一下刚刚构造的满足第三个条件的矩阵是否可以转变成满足前两个条件的形式即可。

首先这个矩阵是满足第一个条件的。这是因为 ij+xy-iy-xj=(i-x)(j-y),而 i\neq x,j\neq y,且 n 为质数,所以有 \gcd(i-x,n)=\gcd(j-y,n)=1,即 (i-x)(j-y)\not\equiv0 \pmod n。所以 ij+xy\not\equiv iy+xj \pmod n。因此将该矩阵所有元素对 n 取模同样满足第三个条件。

为了满足第二个条件,我们让第 i 行的所有元素加上 b_i-i^2 即可,记得取模。

本题至此就解决了,代码十分简单(字面意思)。

代码实现

#include<bits/stdc++.h>
using namespace std;
int n,a[360];
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=n;printf("\n"),i++)
        for(int j=1;j<=n;j++)
            printf("%d ",((i*j+a[i]-i*i)%n+n)%n);//原始值是 i*j,为了满足第二个条件加上a[i]-i*i,为了满足第一个条件对 n 取模
    return 0;
}