AtCoder Beginner Contest 357-C
Problem
For a non-negative integer \(K\), we define a level-\(K\) carpet as follows:
- A level-\(0\) carpet is a \(1 \times 1\) grid consisting of a single black cell.
- For \(K>0\), a level-\(K\) carpet is a \(3^K \times 3^K\) grid. When this grid is divided into nine \(3^{K-1} \times 3^{K-1}\) blocks:
- The central block consists entirely of white cells.
- The other eight blocks are level-\((K-1)\) carpets.
You are given a non-negative integer \(N\). Print a level-\(N\) carpet according to the specified format.
Translations
对于一个非负整数 \(K\) ,我们定义\(K\)级地毯如下:
- \(0\)级地毯是由一个黑色单元格组成的 \(1 \times 1\) 网格。
- \(K(K>0)\)级地毯是一个 \(3^K \times 3^K\) 网格。当这个网格被划分为九个 \(3^{K-1} \times 3^{K-1}\) 块时:
- 中央区块完全由白色单元格组成。
- 其他八个区块是 \((K-1)\) 级地毯。
给你一个非负整数\(N\)。请按照指定格式打印 \(N\) 级地毯。
Constraints
- \(0 \leq N \leq 6\)
- \(N\)是整数。
Sample
N=1
###
#.#
###
N=2
#########
#.##.##.#
#########
###...###
#.#...#.#
###...###
#########
#.##.##.#
#########
Solution
容易想到递归解决这个问题。
由于\(N\)比较小,我们可以直接对于\(3^N\times3^N\)内所有位置\((x,y)\)逐个进行判断。
对于单元格\((x,y)\),我们需要找到会包含它且大小最小的\(k\)级地毯,即
\min{k}
\]
将该\(k\)级地毯划分为九宫格。如果\((x,y)\)处于中间宫格,即\(x,y\in[3^{k-1}+1,2\times3^{k-1}]\),则\((x,y)\)一定是白色的。
否则,考虑\((x,y)\)在\(k-1\)级地毯中的相对位置\((x\bmod 3^{k-1},y\bmod3^{k-1})\),递归判断即可。
我认为我的写法还是复杂了点,应该还有优化空间,但是考虑\(N\le6\),应该无伤大雅了。
Code
#define N 1010
int n;
int pow3[100];
bool calc(int x,int y)
{
int k=10;
while(pow3[k-1]>=x&&pow3[k-1]>=y&&k>=2) k--;
//cout<<"size="<<pow3[k]<<endl;
if(pow3[k-1]+1<=x&&x<=2*pow3[k-1]&&pow3[k-1]+1<=y&&y<=2*pow3[k-1]) return 0;
if(k==1) return 1;
return calc(x%pow3[k-1],y%pow3[k-1]);
}
int main()
{
cin>>n;
pow3[0]=1;
for(int i=1;i<16;i++){
pow3[i]=pow3[i-1]*3;
}
for(int i=1;i<=pow3[n];i++)
{
for(int j=1;j<=pow3[n];j++)
{
if(calc(i,j)) cout<<'#';
else cout<<'.';
}
cout<<endl;
}
return 0;
}
Attention
代码很丑,很久没写题了,有点不适应。
AtCoder Beginner Contest 357-C的更多相关文章
- AtCoder Beginner Contest 100 2018/06/16
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 136
AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
- AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】
AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...
- AtCoder Beginner Contest 064 D - Insertion
AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...
- AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle【暴力】
AtCoder Beginner Contest 075 D - Axis-Parallel Rectangle 我要崩溃,当时还以为是需要什么离散化的,原来是暴力,特么五层循环....我自己写怎么都 ...
- AtCoder Beginner Contest 075 C bridge【图论求桥】
AtCoder Beginner Contest 075 C bridge 桥就是指图中这样的边,删除它以后整个图不连通.本题就是求桥个数的裸题. dfn[u]指在dfs中搜索到u节点的次序值,low ...
随机推荐
- .NET 9.0 全栈技术的高效开源低代码平台(Vue3+Element-Plus)
前言 推荐一款基于.NET 9.0 全栈框架的新一代技术架构(Vue3+Element-Plus),开源低代码平台-Microi吾码. 平台不仅无限制地支持用户数.表单数.数据量及数据库数量,还通过跨 ...
- phpstudy安装redis扩展 windows安装redis扩展
1.首先查看自己本地环境的php版本信息: 执行phpinfo(),显示php相关信息 2.下载所需的扩展 php redis扩展下载地址 windows上,php开启扩展需要下载ddl 这里要注意的 ...
- 解决Oracle锁表情况
在使用Oracle数据库更新数据的时候,有两种查询方式可以修改编辑数据: select t.*,t.rowid from table t select * from table for update ...
- harbor
一篇带你了解私有仓库 Harbor 的搭建 一.Harbor简介 虽然Docker官方提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的. Harbo ...
- SRE网站可靠性工程师
SRE网站可靠性工程师 SRE需要做什么? 一般: 故障模式,尤其是SPOF(单点故障).消除SPOFs是你作为SRE最大的挑战和乐趣. 基础设施组件,从应用程序到硬件(服务器.交换机.路由器.互联网 ...
- 遍历表单数据,检查其中任意一项的方法(Get Matching Xpath Count指令的用法)
如上图,每次新增数据均显示在最上面,且这个表格没有自定义查询的功能. 这给校验添加数据是否成功增加了难度(常规方式是检查第一行数据) 本次案例的逻辑是 使用Get Matching Xpath Cou ...
- 【自用】restful api 常用状态码
GET(SELECT):从服务器取出资源(一项或多项). POST(CREATE):在服务器新建一个资源. PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源). PATCH(UPD ...
- php uninx时间戳转datetime对象,获取n秒前的dateime问题
当时在网上搜了下这个问题,大多方法都是定义一个函数,在里面处理,后来网官网文档看到可以这么用,记录下. php时间戳转datetime对象 var_dump(new \Datetime('@'.tim ...
- 11.23DP进阶总结
例.1 Luogu-P1387最大正方形 按如下复杂度来分析 O(\(n^6\)) O(\(n^5\)) O(\(n^3\)) O(\(n^2\log n\)) O(n^2) O(\(n^6\)) 最 ...
- 牛!达摩院孵化开源项目,让数字人"活"起来:OpenAvatarChat教你轻松搭建自己的数字人
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "只需一台普通电脑,就能让数字人像真人一样与你畅聊!" -- OpenA ...