又是道原题... (HDU 6313 Hack It , 多校 ACM 里面的题)

题目说构造一个 n * n 矩阵,染色点不得构成矩形...然后染色点个数至少 8 * n

然后我们生成一个数 m ,把矩阵分成 m * m 块 ,每块每行都至少要有 1 个 1 ,具体构造看代码:

  1. fp(i,0,m-1) fp(j,0,m-1) fp(k,0,m-1)
  2. s[m*i+j][m*k+(j*k+i)%m]=1;

证明的话要用循环加群...具体证明可以康这里

总的来说就是抄 hdu ACM 上那题的代码就好了(玄学的构造法),要注意的就是 m 取值要是个质数,并且数字要足够大,所以要先筛出 1~100 的 质数就是了(我居然在质数上调了这么久)

  1. //by Judge
  2. #include<cmath>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<iostream>
  6. #define Rg register
  7. #define fp(i,a,b) for(Rg int i=(a),I=(b)+1;i<I;++i)
  8. using namespace std;
  9. const int M=1003;
  10. typedef int arr[M];
  11. #ifndef Judge
  12. #define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
  13. #endif
  14. char buf[1<<21],*p1=buf,*p2=buf;
  15. inline int read(){ int x=0,f=1; char c=getchar();
  16. for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
  17. for(;isdigit(c);c=getchar()) x=x*10+c-'0'; return x*f;
  18. } char sr[1<<21],z[20];int C=-1,Z;
  19. inline void Ot(){fwrite(sr,1,C+1,stdout),C=-1;}
  20. int n,m,s[M][M];
  21. inline void check(int n){ Rg int num=0;
  22. fp(i,1,n) fp(j,1,n) num+=s[i][j];
  23. if(num<n*8) return puts("Error"),void();
  24. fp(r1,1,n) fp(r2,r1+1,n)
  25. fp(c1,1,n) fp(c2,c1+1,n)
  26. if(s[r1][c1]&&s[r2][c1]&&s[r1][c2]&&s[r2][c2])
  27. return printf("%d , %d -> %d , %d\n",r1,c1,r2,c2),void();
  28. puts("win");
  29. }
  30. int cnt; arr p,vis;
  31. inline void prep(Rg int n){ vis[1]=1;
  32. fp(i,2,n){ if(!vis[i]) p[++cnt]=i;
  33. for(Rg int j=1;j<=cnt&&p[j]*i<=n;++j){
  34. vis[i*p[j]]=1; if(!(i%p[j])) break;
  35. }
  36. }
  37. }
  38. int main(){ prep(100);
  39. fp(stp,1,read()){ n=read(),m=sqrt(n);
  40. while(vis[m]) ++m;
  41. fp(i,0,n-1) fp(j,0,n-1) s[i][j]=0;
  42. fp(i,0,m-1) fp(j,0,m-1) fp(k,0,m-1)
  43. s[m*i+j][m*k+(j*k+i)%m]=1;
  44. fp(i,0,n-1){
  45. fp(j,0,n-1) sr[++C]=s[i][j]?'O':'.';
  46. sr[++C]='\n';
  47. if(C>1<<20) Ot();
  48. }
  49. } return Ot(),0;
  50. }

codechef: ADAROKS2 ,Ada Rooks 2的更多相关文章

  1. Codechef:Fibonacci Number/FN——求通项+二次剩余+bsgs

    题意 定义 $F_n$ 为 $$F_n = \left\{\begin{matrix}0, n=0\\ 1, n=1 \\F_{n-1} + F_{n-2}, n > 1\end{matrix} ...

  2. Codechef:Fibonacci Number/FN(二次剩余+bsgs)

    题面 传送门 前置芝士 \(bsgs\),\(Cipolla\) 题解 因为题目保证\(p\bmod 10\)是完全平方数,也就是说\(p\bmod 5\)等于\(1\)或\(-1\),即\(5\)是 ...

  3. codechef: BINARY, Binary Movements

    非常有毛病的一道题,我一个一个读字符死活过不去,改成整行整行读就 A 了... 做法就是...最小点覆盖... 我们发现可以把一个点向上跳看做被吃掉了,然后最顶层的点是无法向上跳所以不能被吃掉,然后被 ...

  4. MongoDB学习笔记五:聚合

    『count』count是最简单的聚合工具,返回集合中的文档数量:> db.foo.count()0> db.foo.insert({"x" : 1})> db. ...

  5. python学习:修改字符串大小写

    修改字符串大小写 函数:title()字符串首字母大写,upper()字符串全部大写,lower()字符串全部小写. 代码举例: name = "ada lovelace"prin ...

  6. Python的进阶:copy与deepcopy区别

    copy()与deepcopy()之间的区分必须要涉及到python对于数据的存储方式. 首先直接上结论: —–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在.所以 ...

  7. uva11134 - Fabled Rooks(问题分解,贪心法)

    这道题非常好,不仅用到了把复杂问题分解为若干个熟悉的简单问题的方法,更是考察了对贪心法的理解和运用是否到位. 首先,如果直接在二维的棋盘上考虑怎么放不好弄,那么注意到x和y无关(因为两个车完全可以在同 ...

  8. 【题解】ADAGRAFT - Ada and Graft [SP33331]

    [题解]ADAGRAFT - Ada and Graft [SP33331] 传送门:\(\text{Ada and Graft}\) \(\text{[SP33331]}\) [题目描述] 给出一颗 ...

  9. [转]SIP穿越NAT&FireWall解决方案

    原文链接(也是转载)http://blog.csdn.net/yetyongjin/article/details/6881491.我修改了部分错字.   SIP从私网到公网会遇到什么样的问题呢? 1 ...

随机推荐

  1. [luoguP2146] 软件包管理器(树链剖分)

    传送门 看着很吓人,其实就是个树链剖分模板. 可支持操作: 1.将节点 x 到 根 的路径上的值都变成 1 2.将以节点 x 为根的子树的值都变成 0 1A爽~ ——代码 #include <c ...

  2. 仪仗队(bzoj 2190)

    Description 作为体育委员,C君负责这次运动会仪仗队的训练.仪仗队是由学生组成的N * N的方阵,为了保证队伍在行进中整齐划一,C君会跟在仪仗队的左后方,根据其视线所及的学生人数来判断队伍是 ...

  3. 【ZJOI2017 Round1练习】D8T1 mushroom(点分治)

    题意: 思路: num[a[u]]表示存在a[u]这个颜色且终点在u子树中的链长总和 ans[i]表示以当前的u为根,前面的子树对i的贡献之和 ..]of longint; size,f,ans,su ...

  4. [bzoj4712]洪水_动态dp

    洪水 bzoj-4712 题目大意:给定一棵$n$个节点的有根树.每次询问以一棵节点为根的子树内,选取一些节点使得这个被询问的节点包含的叶子节点都有一个父亲被选中,求最小权值.支持单点修改. 注释:$ ...

  5. MongoDB学习day01--非关系型数据库

    1.数据库和文件的主要区别: 1.1数据库有数据库表/行和列的概念,让我们存储操作数据方便 1.2数据库提供了方便的接口,让java.php..net.nodejs很方便的实现增删改查 2.NoSQL ...

  6. pycharm内存不足时如何修改设置?

    Help->Find Action->(type "VM Options")->(Click)"Edit Custom VM Options" ...

  7. 重置网络命令win7

    开始→运行→输入:CMD 点击确定(或按回车键),打开命令提示符窗口. 在命令提示符中输入:netsh winsock reset (按回车键执行命令) 稍后,会有成功的提示:成功地重置Winsock ...

  8. 【Struts2五】ValueStack以及ognl表达式二(经常使用标签)

    Ognl经常使用标签:   1.s:debug       假设把该标签放入到s:iterator中能够看到当前正在迭代的元素的状态    2.s:property       1.输出       ...

  9. ArcGIS中生成蜂窝多边形算法解析

    近来有不少同学.都有问我关于蜂窝多边形的问题.也就是正六边形,也就是以下这个东东: 一般的问答模式例如以下: 亲们问:ArcGIS里面那个工具能够做这个东东? 虾神答:额,没有原生的工具. 亲们问:那 ...

  10. ibatis 取消查询动态列的缓存

    ibatis在查询结果列不确定(或是动态变化)的情况下,会因为列缓存的原因导致变化后的列数据查不出来 解决方法是: select标签有个属性remapResults,该属性默认值为false,设置成r ...