【Windows Of CCPC HDU - 6708】【打表,找规律】
题意分析
题意:给出一个整数k,要求你输出一个长和宽均为2k 的符合要求的矩阵。比如k等于1时输出
C & C \\
P & C
\end{matrix}
$$k = 2时输出
\]
\begin{matrix}
C & C & C & C \
P & C & P & C \
P & P & C & C \
C & P & P & C
\end{matrix}

对应下一个矩阵的

对于字母P,有

对应下一个矩阵的

这样根据它们的相对位置,就不难给出所有情况的矩阵了。具体位置关系在代码中给出。
## AC代码
关于代码,的确有些冗长,感觉应该有其他更简便方法表示这种规律,欢迎大佬评论指出。
```c
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
const int maxn = 1024 + 10;
int T, k;
char s1[maxn][maxn], s2[maxn][maxn], s3[maxn][maxn], s4[maxn][maxn], s5[maxn][maxn], s6[maxn][maxn], s7[maxn][maxn], s8[maxn][maxn], s9[maxn][maxn], s10[maxn][maxn];
void init()
{
for(int i = 1; i <= 2; i++)
{
for(int j = 1; j <= 2; j++)
{
if(s1[i][j] == 'C')
{
//规律如下,此后的直接套用即可
for(int k = (j-1)*2+1; k <= (j-1)*2+2; k++)
s2[(i-1)*2+1][k] = 'C';
s2[(i-1)*2+2][(j-1)*2+1] = 'P', s2[(i-1)*2+2][(j-1)*2+2] = 'C';
}
else
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s2[(i-1)*2+1][k] = 'P';
s2[(i-1)*2+2][(j-1)*2+1] = 'C', s2[(i-1)*2+2][(j-1)*2+2] = 'P';
}
}
}
for(int i = 1; i <= 4; i++)
{
for(int j = 1; j <= 4; j++)
{
if(s2[i][j] == 'C')
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s3[(i-1)*2+1][k] = 'C';
s3[(i-1)*2+2][(j-1)*2+1] = 'P', s3[(i-1)*2+2][(j-1)*2+2] = 'C';
}
else
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s3[(i-1)*2+1][k] = 'P';
s3[(i-1)*2+2][(j-1)*2+1] = 'C', s3[(i-1)*2+2][(j-1)*2+2] = 'P';
}
}
}
for(int i = 1; i <= 8; i++)
{
for(int j = 1; j <= 8; j++)
{
if(s3[i][j] == 'C')
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s4[(i-1)*2+1][k] = 'C';
s4[(i-1)*2+2][(j-1)*2+1] = 'P', s4[(i-1)*2+2][(j-1)*2+2] = 'C';
}
else
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s4[(i-1)*2+1][k] = 'P';
s4[(i-1)*2+2][(j-1)*2+1] = 'C', s4[(i-1)*2+2][(j-1)*2+2] = 'P';
}
}
}
for(int i = 1; i <= 16; i++)
{
for(int j = 1; j <= 16; j++)
{
if(s4[i][j] == 'C')
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s5[(i-1)*2+1][k] = 'C';
s5[(i-1)*2+2][(j-1)*2+1] = 'P', s5[(i-1)*2+2][(j-1)*2+2] = 'C';
}
else
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s5[(i-1)*2+1][k] = 'P';
s5[(i-1)*2+2][(j-1)*2+1] = 'C', s5[(i-1)*2+2][(j-1)*2+2] = 'P';
}
}
}
for(int i = 1; i <= 32; i++)
{
for(int j = 1; j <= 32; j++)
{
if(s5[i][j] == 'C')
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s6[(i-1)*2+1][k] = 'C';
s6[(i-1)*2+2][(j-1)*2+1] = 'P', s6[(i-1)*2+2][(j-1)*2+2] = 'C';
}
else
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s6[(i-1)*2+1][k] = 'P';
s6[(i-1)*2+2][(j-1)*2+1] = 'C', s6[(i-1)*2+2][(j-1)*2+2] = 'P';
}
}
}
for(int i = 1; i <= 64; i++)
{
for(int j = 1; j <= 64; j++)
{
if(s6[i][j] == 'C')
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s7[(i-1)*2+1][k] = 'C';
s7[(i-1)*2+2][(j-1)*2+1] = 'P', s7[(i-1)*2+2][(j-1)*2+2] = 'C';
}
else
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s7[(i-1)*2+1][k] = 'P';
s7[(i-1)*2+2][(j-1)*2+1] = 'C', s7[(i-1)*2+2][(j-1)*2+2] = 'P';
}
}
}
for(int i = 1; i <= 128; i++)
{
for(int j = 1; j <= 128; j++)
{
if(s7[i][j] == 'C')
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s8[(i-1)*2+1][k] = 'C';
s8[(i-1)*2+2][(j-1)*2+1] = 'P', s8[(i-1)*2+2][(j-1)*2+2] = 'C';
}
else
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s8[(i-1)*2+1][k] = 'P';
s8[(i-1)*2+2][(j-1)*2+1] = 'C', s8[(i-1)*2+2][(j-1)*2+2] = 'P';
}
}
}
for(int i = 1; i <= 256; i++)
{
for(int j = 1; j <= 256; j++)
{
if(s8[i][j] == 'C')
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s9[(i-1)*2+1][k] = 'C';
s9[(i-1)*2+2][(j-1)*2+1] = 'P', s9[(i-1)*2+2][(j-1)*2+2] = 'C';
}
else
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s9[(i-1)*2+1][k] = 'P';
s9[(i-1)*2+2][(j-1)*2+1] = 'C', s9[(i-1)*2+2][(j-1)*2+2] = 'P';
}
}
}
for(int i = 1; i <= 512; i++)
{
for(int j = 1; j <= 512; j++)
{
if(s9[i][j] == 'C')
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s10[(i-1)*2+1][k] = 'C';
s10[(i-1)*2+2][(j-1)*2+1] = 'P', s10[(i-1)*2+2][(j-1)*2+2] = 'C';
}
else
{
for(int k = (j - 1)*2+1; k <= (j-1)*2+2; k++)
s10[(i-1)*2+1][k] = 'P';
s10[(i-1)*2+2][(j-1)*2+1] = 'C', s10[(i-1)*2+2][(j-1)*2+2] = 'P';
}
}
}
}
int main()
{
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
memset(s1, 'C', sizeof(s1));
cin >> T;
s1[2][1] = 'P';
init();
while(T--)
{
cin >> k;
for(int i = 1; i <= (int)(pow(2, k)); i++)
{
for(int j = 1; j <= (int)(pow(2, k)); j++)
{
if(k == 1)
cout << s1[i][j];
else if(k == 2)
cout << s2[i][j];
else if(k == 3)
cout << s3[i][j];
else if(k == 4)
cout << s4[i][j];
else if(k == 5)
cout << s5[i][j];
else if(k == 6)
cout << s6[i][j];
else if(k == 7)
cout << s7[i][j];
else if(k == 8)
cout << s8[i][j];
else if(k == 9)
cout << s9[i][j];
else if(k == 10)
cout << s10[i][j];
}
cout << endl;
}
}
}
```\]
【Windows Of CCPC HDU - 6708】【打表,找规律】的更多相关文章
- 数学--数论--HDU - 6322 打表找规律
In number theory, Euler's totient function φ(n) counts the positive integers up to a given integer n ...
- HDU 4919 打表找规律 java睑板 map 递归
== oeis: 点击打开链接 瞎了,x.mod(BigInteger.ValueOf(2)).equal( BigInteger.ValueOf(1)) 写成了 x.mod(BigInteger.V ...
- hdu 3032 Nim or not Nim? (SG函数博弈+打表找规律)
Nim or not Nim? Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Sub ...
- HDU 5753 Permutation Bo (推导 or 打表找规律)
Permutation Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5753 Description There are two sequen ...
- HDU 5795 A Simple Nim(SG打表找规律)
SG打表找规律 HDU 5795 题目连接 #include<iostream> #include<cstdio> #include<cmath> #include ...
- HDU 4731 Minimum palindrome 打表找规律
http://acm.hdu.edu.cn/showproblem.php?pid=4731 就做了两道...也就这题还能发博客了...虽然也是水题 先暴力DFS打表找规律...发现4个一组循环节.. ...
- HDU 4861 Couple doubi (数论 or 打表找规律)
Couple doubi 题目链接: http://acm.hust.edu.cn/vjudge/contest/121334#problem/D Description DouBiXp has a ...
- hdu 3032 Nim or not Nim? (sg函数打表找规律)
题意:有N堆石子,每堆有s[i]个,Alice和Bob两人轮流取石子,可以从一堆中取任意多的石子,也可以把一堆石子分成两小堆 Alice先取,问谁能获胜 思路:首先观察这道题的数据范围 1 ≤ N ...
- HDU 3032 (SG打表找规律)
题意: 有n堆石子,alice先取,每次可以选择拿走一堆石子中的1~x(该堆石子总数) ,也可以选择将这堆石子分成任意的两堆.alice与bob轮流取,取走最后一个石子的人胜利. 思路: 因为数的范围 ...
随机推荐
- 201809-2买菜 ccf
只得了90分,很奇怪,有大佬指导一下吗 #include<stdio.h> int main() { ,sum=; scanf("%d",&n); *n],b[ ...
- Kotlin学习快速入门(1)——基本数据类型以及String常用方法使用
本文适合有Java基础的人 Kotlin语法特点 相比java,省略括号,可以自动判断类型,省略new关键字,空指针捕获 主函数 kotlin文件(kt文件)中,只有要下列的方法,就可以运行,无需像之 ...
- Mybatis连接查询返回类型问题
一对一映射 public class Card { private Integer id; private String num; private Student student; //重要 publ ...
- 【Android】Mac Android adb 配置
打开终端,输入下面命令: touch .bash_profile open -e .bash_profile 即新建 “.bash_profile” 文件,并会弹出 “.bash_profile” 文 ...
- RGB颜色 三者都是0为黑色而255是白色 解释
问题: RGB颜色 都是0为黑色而255是白色 与日常生活的黑色白色差距怎么那么大,(与物理学中的黑色吸收光是否相悖)而且为什么要这样定义呢? 链接:https://www.zhihu.com/que ...
- 运行sh文件
记下在Ubuntu下安装*.sh和*.bin的简单方法. *.sh文件安装方法: 运行终端到文件目录下 1.在终端输入:sudo sh *.sh直接运行 2.在终端输入:sudo chmod +x * ...
- JS中以一个方法作为参数的写法
一:以方法作为参数 这下来说直接以一个方法来作为参数的写法,直接上代码: -----------这样调用的方法------------- go(function(){ alert("succ ...
- java中线程安全,线程死锁,线程通信快速入门
一:多线程安全问题 ###1 引入 /* * 多线程并发访问同一个数据资源 * 3个线程,对一个票资源,出售 */ public class ThreadDemo { public static vo ...
- 第二十二章 跳出循环-shift参数左移-函数的使用 随堂笔记
第二十二章 跳出循环-shift参数左移-函数的使用 本节所讲内容: 22.1 跳出循环 22.2 Shift参数左移指令 22.3 函数的使用 22.4 实战-自动备份mysql数据库和nginx服 ...
- Postgresql部署及简单操作
PostgreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS),在开源数据库使用上与MySQL各领风骚.但也有不少人质疑postgresql的未来,正所谓,赞扬或批判一种数据库都必须先 ...