HDU - 6313 Hack It(构造)
http://acm.hdu.edu.cn/showproblem.php?pid=6313
题意
让你构造一个矩阵使得里面不存在四个顶点都为1的矩形,并且矩阵里面1的个数要>=85000
分析
来自https://blog.csdn.net/qq_37025443/article/details/81221008
先从25*25的构造看起
10000 01000 00100 00010 00001
10000 00100 00001 01000 00010
10000 00010 01000 00001 00100
10000 00001 00010 00100 01000
10000 10000 10000 10000 10000
01000 00100 00010 00001 10000
01000 00010 10000 00100 00001
01000 00001 00100 10000 00010
01000 10000 00001 00010 00100
01000 01000 01000 01000 01000
........
根据上面可以得出规律:
假设行数为x(x=1...25),列数y(y=1....25)
单论一行来说,总共只有5个1,可以分成5组,每组一个1,每一组的1的位置=((前一组1的位置k+x%p)-1)%p+1
那么我们只要知道每一行第一个位置在哪里就可以构造出来了。
这样第i行第一个1的位置其实就是(x-1/p)
那么这样我们就可以构造出来一个满足上述条件的矩阵了。
但是这个25*25的矩阵只能满足n<=25的情况,一旦n>=25
那么就有可能出现重复的矩阵(以这个25*25为单元重复),两个重复的矩阵找对应的4个位置就可以构成一个矩形了
所以我们需要重新找一个质数p,使得p*p>=2000,那么可以很容易得到p=47
#include <cstdio>
#include <cstring> const int MAXN = ;
int mp[MAXN][MAXN]; int main()
{
int n;
int p=;
n=;
for(int i=;i<(n/(p*p)+(n%(p*p)?:));i++)
for(int j=;j<(n/(p*p)+(n%(p*p)?:));j++)
for(int x=;x<=(p*p)&&(i*(p*p)+x)<=n;x++)
//for(int y=1;y<=p*p&&(j*(p*p)+y+(((y/p)*x)%p))<=n;y+=p)
for(int y=;y<p&&(j*(p*p)+y*p+((((x-)/p++(((x-)%p+)*y%p))-)%p+))<=n;y+=)
{
mp[i*(p*p)+x][j*(p*p)+y*p+((((x-)/p++(((x-)%p+)*y%p))-)%p+)]=;
}
printf("%d\n",n);
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
/*if(j%p==0) printf("%d ",mp[i][j]);
else */printf("%d",mp[i][j]);
}
printf("\n");
}
return ; }
HDU - 6313 Hack It(构造)的更多相关文章
- HDU 6313: Hack it
Hack It Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- HDU 5573 Binary Tree 构造
Binary Tree 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5573 Description The Old Frog King lives ...
- hdu 5015 233 Matrix(构造矩阵)
http://acm.hdu.edu.cn/showproblem.php?pid=5015 由于是个二维的递推式,当时没有想到能够这样构造矩阵.从列上看,当前这一列都是由前一列递推得到.依据这一点来 ...
- HDU 5813 Elegant Construction 构造
Elegant Construction 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5813 Description Being an ACMer ...
- HDU 5710 Digit-Sum (构造)
题意: 定义S(N) 为数字N每个位上数字的和.在给两个数a,b,求最小的正整数n,使得 a×S(n)=b×S(2n). 官方题解: 这道题目的结果可能非常大,所以我们直接枚举n是要GG的. 首先可以 ...
- HDU 5914 Triangle 【构造】 (2016中国大学生程序设计竞赛(长春))
Triangle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Su ...
- HDU.5385.The path(构造)
题目链接 最短路构造题三连:这道题,HDU4903,SRM590 Fox And City. \(Description\) 给定一张\(n\)个点\(m\)条边的有向图,每条边的边权在\([1,n] ...
- Codeforces.468C.Hack it!(构造)
题目链接 \(dls\)出的比赛诶...这么妙. \(Description\) 令\(f(x)\)表示整数\(x\)在十进制下各个数位的数字之和.给定\(a\),求两个整数\(l,r\),使得\(\ ...
- 2015多校第7场 HDU 5379 Mahjong tree 构造,DFS
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5379 题意:一颗n个节点n-1条边的树,现在要给每个节点标号(1~n),要求:(1)每一层的兄弟节点的 ...
随机推荐
- centos6.8下安装matlab2009(图片转帖)
前言 如何优雅的在centos6.8上安装matlab2009. 流程 不过我个人安装过程完后启动matlab的时候又出现了新问题: error while loading shared librar ...
- centos6.8下普通用户下quartus编程识别不到用户开发板
前言 centos6.8下su用户下可以识别到用户的板子,能正常下板,而普通用户下无法探测到用户板子. 需要配置一下usb-blaster,不然的话,虽然quartus软件能识别,但是无法探测到FPG ...
- 「AtCoder Grand018A」Getting Difference(GCD)
题目链接A - Getting Difference 题意 有n(1~\(10^5\))个数\(A_i\) (1~\(10^9\)),每次选两个数,将它们的差的绝对值加入这堆数.问k(1~\(10^9 ...
- Netty如何实现Reactor模式
在前面的文章中(Reactor模型详解),我们讲解了Reactor模式的各种演变形式,本文主要讲解的则是Netty是如何实现Reactor模式的.这里关于Netty实现的Reactor模式,需要说明的 ...
- 【Linux命令】linux一次性解压多个.gz或者.tar.gz文件
原文:linux一次性解压多个.gz或者.tar.gz文件 解压多个压缩包 对于解压多个.gz文件的,用此命令: for gz in *.gz; do gunzip $gz; done 对于解压多个. ...
- [luogu3648][bzoj3675][APIO2014]序列分割【动态规划+斜率优化】
题目大意 让你把一个数列分成k+1个部分,使分成乘积分成各个段乘积和最大. 分析 首先肯定是无法开下n \(\times\) n的数组,那么来一个小技巧:因为我们知道k的状态肯定是从k-1的状态转移过 ...
- shell中定义变量用双引号和单引号以及不用引号的区别
1. 单引号 使用单引号的情况下,不管里面的是否有变量或者其他的表达是都是原样子输出 2. 双引号 如果其定义变量的时候使用双引号的话,则里面的变量或者函数会通过解析,解析完成后再输出内容,而不是把双 ...
- nodejs的某些api~(一)node的流1
根据心情整理一些node的api~ 今天第一篇,node的流:node的流比较重要,node的流存在于node的各个模块,包括输入输出流,stdin,stout.fs读取流,zlib流,crypto流 ...
- 没有上司的舞会 codevs 1380
上树DP,记忆化搜索. 本题老师讲的方法是直接树形DP,但是由于我对树并不够了解,什么dfs也不想尝试(虽然感觉自己可以搞),于是搞了个结构体存点以及该点的信息,用f[i][j]作为记忆化数组.以后最 ...
- [luogu4556][Vani有约会]
题目链接 吐槽 这道题调了7个小时也是够了.最后只好比着题解做了一遍2333 思路 首先考虑n=2000的情况.因为这是在一条路径上,所以可以考虑差分.用a[i][j]表示第i个点中j这种粮食出现的次 ...