【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}
![](https://img2018.cnblogs.com/blog/1698539/201908/1698539-20190826092118108-339258886.png)
对应下一个矩阵的
![](https://img2018.cnblogs.com/blog/1698539/201908/1698539-20190826092148103-442681466.png)
对于字母P,有
![](https://img2018.cnblogs.com/blog/1698539/201908/1698539-20190826092207428-1916522697.png)
对应下一个矩阵的
![](https://img2018.cnblogs.com/blog/1698539/201908/1698539-20190826092222293-633953066.png)
这样根据它们的相对位置,就不难给出所有情况的矩阵了。具体位置关系在代码中给出。
## 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轮流取,取走最后一个石子的人胜利. 思路: 因为数的范围 ...
随机推荐
- HTML入门编写
今天给大家带来的是HTML初步讲解(即第一趴). 问题区: 1.什么是HTML? 先来个百度解说压阵. html,全称Hypertext Markup Language,也就是"超文本链接标 ...
- [leetcode]python 695. Max Area of Island
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...
- 关于Object.defineProperty 的基础知识
Object.defineProperty 这个方法大家耳熟能详,可以对 对象的属性进行添加或修改的操作.即可以进行 数据劫持 .vue就是通过这个方法来劫持数据的. 平时我们创建对象的时候,一般通 ...
- python包-logging-hashlib-openpyxl模块-深浅拷贝-04
包 包: # 包是一系列模块文件的结合体,表现形式是文件夹,该文件夹内部通常会包含一个__init__.py文件,本质上还是一个模块 包呢,就是前两篇博客中提到的,模块的四种表现形式中的第三种 # 把 ...
- Visual Studio 2015 WinForm应用程序打包教程
最近开发了一个小软件.由于需要打包.网上找了一些资料.然后整合了起来.希望对大家有所帮助.不全面请见谅. 本人开发工具用的是Visual Studio 2015 打包控件 InstallShield ...
- 实现跳转的jsp小例子
<%@page import="java.io.UnsupportedEncodingException"%> <%@ page language="j ...
- Samba:打造企业级授权文件共享服务器
写在前面的话 先来说说故事背景:公司内部文件服务器的解决方案其实很多,对于中小型互联网公司,大多的在这一块的选型还是 FTP,或者 VSFTP,但是个人实在是对那个东西喜欢不起来,于是就选择了配置相对 ...
- Vue中beforeRouterEnter的应用
一般判断从哪个页面进入时需要判断路由,用到了beforeRouteEnter方法. 注意:在在内部获取不到外部的this,方法.变量等都获取不到.但是vm.XXXXX可以获取到 beforeRoute ...
- PHP编码风格规范
由于PHP的灵活性,很多人写起代码来也不讲求一个好的代码规范,使得本就灵活的PHP代码看起来很乱,其实PSR规范中的PSR-1和PSR-2已经定义了在PHP编码中的一些规范,只要我们好好遵守这些规范, ...
- JDBC连接池-C3P0连接
JDBC连接池-C3P0连接 c3p0连接池的学习英语好的看英文原版 c3p0 - JDBC3 Connection and Statement Pooling 使用c3p0连接池 三种方 ...