AGC 027D.Modulo Matrix(构造 黑白染色)

题目链接


\(Description\)

给定\(n\),要求构造一个\(n\times n\)的矩阵,矩阵内的元素两两不同,且任意相邻的两个元素\(x,y\),满足\(\max(x,y)\ \mathbb{mod}\ \min(x,y)\)等于一个非零常数。
\(n\leq500,\ 1\leq 矩阵中的元素\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个质数\times第500个质数\times第999个质数\times第1000个质数<8\times10^{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\n23 10\n"),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('\n'))
        for(int j=1; j<=n; ++j) printf("%lld ",A[i][j]);

    return 0;
}

原文地址:https://www.cnblogs.com/SovietPower/p/10455399.html

时间: 2024-11-08 20:28:03

AGC 027D.Modulo Matrix(构造 黑白染色)的相关文章

POJ 1466 Girls and Boys 黑白染色 + 二分匹配 (最大独立集) 好题

有n个人, 其中有男生和女生,接着有n行,分别给出了每一个人暗恋的对象(不止暗恋一个) 现在要从这n个人中找出一个最大集合,满足这个集合中的任意2个人,都没有暗恋这种关系. 输出集合的元素个数. 刚开始想,把人看成顶点,若有暗恋的关系,就连一条边,构成一个图 独立集的概念:一个图中两两互不相连的顶点集合 所以这道题,就是要求最大独立集 有:最大独立集+最小顶点覆盖=|V|(顶点的总个数) 那就求最小顶点覆盖了 根据题意: 暗恋的对象性别不同,所以a暗恋b,b暗恋c,c暗恋a这种关系不可能存在 也

hdu1507Uncle Tom&#39;s Inherited Land*(最大匹配,黑白染色)

Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1943 Accepted Submission(s): 809 Special Judge Problem Description Your old uncle Tom inherited a piece of land from his

hdu 5285 二分图黑白染色

题意:给出 n 个人,以及 m 对互不认识的关系,剩余的人都互相认识,要将所有人分成两组,组内不能有互不认识的人,要求每组至少有一人,并且第一组人数尽量多,问两组人数或不可能时单独输出 BC 48 场的B题,这两天黑白染色做的不少,要把互不认识的人分在不同的组里,其实就是看整个图是否能够形成二分图,如果不能形成二分图的话,那么说明图中一定存在奇环,那么人就不能分在两个组中而保证组内都认识.所以就是判二分图,用黑白染色,然后将染色后数量多的点分在第一组,剩余分在第二组.但是题中有坑点,首先,人数小

P1418 选点问题(黑白染色)

P1418 选点问题 题目描述 给出n个点,m条边,每个点能控制与其相连的所有的边,要求选出一些点,使得这些点能控制所有的边,并且点数最少.同时,任意一条边不能被两个点控制 输入输出格式 输入格式: 第一行给出两个正整数n,m 第2~m+1行,描述m条无向边 每行给出x,y,表示一条无向边(x,y) 输出格式: 输出最少需要选择的点的个数,如果无解输出“Impossible”(不带引号) 输入输出样例 输入样例#1: 7 5 1 2 1 3 5 6 6 7 1 2 输出样例#1: 2 说明 [数

bnu 34981 A Matrix(构造)

题目链接:bnu 34981 A Matrix 题目大意:假定有一序列,按照题目中给定的算法构造出一张二维表,现在题目给定一张二维表,要求求出序列,要求序列的倒置的字典序最大. 解题思路:构造,对于每一层来说,一定是递增的,根据算法可以得出:并且一个数被换到下一行,一定是因为有序列后面有小于自己的数,所以每一层从最后一个数开始匹配,找到上一层中比自己小的最大数字,假定是该数导致当前数被换到下一行,注意一个数只能让一个数被换到下一行.所以有几种是找不到对应序列,要输出-1. 一行中的数不是递增的.

二分图判定--黑白染色

首先,二分图又叫二部图,特点是所有点分成两半,每一半内的点之间没有边相连,只有两半之间会有边相连,图内无奇环,当然,单点图或者有单点的图也属于二分图,因此最主要的区分就是图内无奇环了.对于一个图,是否是二分图,常用的方法是黑白染色,由于给定图常常不完全连通,所以只要对于每一个还未标记过的点,从它开始DFS按照黑白相间的方法标记颜色(0/1),每次DFS操作就是将这一连通块内按黑白分成两半,若途中遇到需要然成某种颜色但已经标记为另一种颜色时,则表明出现了奇环,不能构成二分图.而要注意,每次DFS只

HDU 1565 (最大流+黑白染色化二分图求最小割)

http://acm.hdu.edu.cn/showproblem.php?pid=1565 思路:将横纵坐标和为偶尔染白色,其他染黑色,黑点连接源点,流量为该点的值,白点连接汇点,流量为该点的值,黑白点有相邻的就连边,值为无穷大.最后求最大流,即该图的最小割. PS:刚开始不明白为为什么最大流会等于最小割,为什么所有的点之和减去最小割就会等于答案. 我的理解是:整张图其实就跟连接管道一样,连接了黑点表示取了黑点那个值的流量,白点也是,而连接了相邻的黑白点求出的最大流就会是流量较小的那个的值.好

HDU1507 Uncle Tom&#39;s Inherited Land* 二分图匹配 匈牙利算法 黑白染色

原文链接http://www.cnblogs.com/zhouzhendong/p/8254062.html 题目传送门 - HDU1507 题意概括 有一个n*m的棋盘,有些点是废的. 现在让你用1*2的矩形覆盖所有的不废的点,并且不重叠,问最多可以覆盖多少个1*2的矩形,输出方案,有SPJ. 输入描述: 多组数据,每组首先两个数n,m(如果n和m为0,则结束程序) 然后给出k 然后给出k个二元组(x,y)表示废点的坐标. 题解 按照前两片博文的算法已经不行了,因为方案不对了. 所以我们要进行

bzoj4808: 马 &amp; bzoj3175: [Tjoi2013]攻击装置 (黑白染色+最小割)

bzoj4808: 马 & bzoj3175: [Tjoi2013]攻击装置 题目:传送门 简要题意: 和n皇后问题差不多,但是这里是每个棋子走日子,而且有些格子不能放棋子.求最多能放多少个棋子. 题解: 双倍经验好评 之前看过机房神犇做...有点印象是最小割. 但是直接割的话不会...要应用到黑白染色: 最开始我想递归染色,也就是取一个开始染,然后递归下去... 波老师说会错ORZ...因为感觉递归的情况不好掌握,有可能会重复染色... 结果有一个肥肠巧妙的方法...直接相邻的染为不同颜色 之