CF1734E Rectangular Congruence 题解

可能更好的阅读体验

题目传送门 to luogu

为什么只有 VP 才会遇到这种简单 E。

题目大意

给定一个质数 n 和长度为 n 的序列 b,要求构造一个 n×n 矩阵 a,满足所有 r1,r2,c1,c21r1<r2n1c1<c2n),有 ar1,c1+ar2,c2ar1,c2+ar2,c1(modn),同时 ai,i=bi
数据范围:2n350

题目解析

对原式移项,得到 ar1,c1ar1,c2ar2,c2ar2,c2(modn)
也就是说,对于任意的 1l<rn(al,iar,i)modn 两两不同,换句话说,构成一个 0n1 的一个排列。
注意到我们如果给一行都加上一个数不会影响 al,iar,i,所以 ai,i=bi 的限制可以忽略,只需要最后整行加上一个数即可。

接下来考虑如何得到一个任意的合法的 a
首先假设 a2,ia1,i=i,然后考虑怎么构造 a3,i
我们发现直接让 a3,ia2,i=i 即可。
换句话说可以直接,ai,j=i×jmodn
我们来证明这样是正确的。

换句话说,对于任意的 0x<nxymodn0y<n)两两不同。
使用反证法,假设 0i<j<nxixj(modn)
发现因为 n 是质数,gcd(x,n)=1,所以 ij(modn),得到 i=j,矛盾,所以假设不成立,证毕。(类似于欧拉定理证明里的一步)

最后为了让 ai,i=bi,所以得到 ai,j 的通项:

ai,j=(i×ji×i+bi)modn

int n,b[maxn];
int main(){
n=read(); int i,j; for(i=1;i<=n;i++) b[i]=read();
for(i=1;i<=n;i++) for(j=1;j<=n;j++) print((i*j-i*i%n+b[i]+n)%n),pc(" \n"[j==n]);
return 0;
}
posted @   jiangtaizhe001  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示