zoukankan      html  css  js  c++  java
  • AGC 027D.Modulo Matrix(构造 黑白染色)

    题目链接


    (Description)

    给定(n),要求构造一个(n imes n)的矩阵,矩阵内的元素两两不同,且任意相邻的两个元素(x,y),满足(max(x,y) mathbb{mod} min(x,y))等于一个非零常数。
    (nleq500, 1leq 矩阵中的元素leq10^{15})

    (Solution)

    https://blog.csdn.net/Tiw_Air_Op1721/article/details/82719507 orz!

    考虑没有元素互不相同的限制,那么就直接填(x,x+1,x,x+1...),即对矩阵黑白染色,黑格子填(x),白格子填(x+1)
    如果有限制,依旧可以先黑白染色,然后令白格子比周围四个黑格子都大。就令(max(x,y) mathbb{mod} min(x,y)=1)好了,这样白格子的权值等于周围四个黑格子的(LCM+1)
    但是这样直接随便给黑格子赋权值,元素是会超过(10^{15})的。
    因为是求(LCM),不妨令黑格子根据对角线设成两个数的乘积。即,对于左上-右下和左下-右上这(2n)条对角线(只考虑黑格子),分别给它一个数。那一个黑格子的它所在的两条对角线上的数的乘积。
    要保证任意元素互不相同,所以考虑把这(2n)个数设成(2n)个质数。
    那么对于最大的白格子,权值是(第499个质数 imes第500个质数 imes第999个质数 imes第1000个质数<8 imes10^{14})。那么就OK啦。

    (n=2)时不对,要特判。


    //54ms	4992KB
    #include <cstdio>
    #include <algorithm>
    typedef long long LL;
    const int N=505,M=8100;
    
    int P[1005];
    LL A[N][N];
    
    void Init()
    {
    	static bool notP[M];
    	for(int cnt=0,i=2; cnt<1000; ++i)
    	{
    		if(!notP[i]) P[++cnt]=i;
    		for(int j=1,v; j<=cnt&&(v=i*P[j])<M; ++j)
    		{
    			notP[v]=1;
    			if(!(i%P[j])) break;
    		}
    	}
    }
    inline LL LCM(LL x,LL y)//longlong
    {
    	return x/std::__gcd(x,y)*y;
    }
    
    int main()
    {
    	Init();
    	int n; scanf("%d",&n);
    	if(n==2) return printf("4 7
    23 10
    "),0;
    	for(int i=0; i<=n+1; ++i) A[0][i]=1, A[n+1][i]=1, A[i][n+1]=A[i][0]=1;
    	for(int i=1; i<=n; ++i)
    		for(int j=i&1?1:2; j<=n; j+=2)
    			/*if(!(i+j&1))*/ A[i][j]=P[i+j>>1]*P[(i-j+n+1)/2+n];
    	for(int i=1; i<=n; ++i)
    		for(int j=i&1?2:1; j<=n; j+=2)
    			/*if(i+j&1)*/ A[i][j]=LCM(LCM(A[i-1][j],A[i][j-1]),LCM(A[i+1][j],A[i][j+1]))+1;
    	for(int i=1; i<=n; ++i,putchar('
    '))
    		for(int j=1; j<=n; ++j) printf("%lld ",A[i][j]);
    
    	return 0;
    }
    
  • 相关阅读:
    【学相伴】Nginx最新教程通俗易懂-狂神说
    Linux基础知识总结(命令行)
    CentOS7 运维
    Linux 的基础知识回顾(安装vmware) ---- No.1 后面都以Centos8 为例
    Linux sudo权限提升漏洞(CVE-2021-3156)
    Flutter开发指南之理论篇:Dart语法05(单线程模型,事件循环模型,Isolate)
    矩阵的范数
    函数导出在kvm_intel.ko,kvm.ko不共享
    python 调用内部类的两种方法
    python3 字符串方法
  • 原文地址:https://www.cnblogs.com/SovietPower/p/10455399.html
Copyright © 2011-2022 走看看