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 ...
随机推荐
- Easyexcel(5-自定义列宽)
注解 @ColumnWidth @Data public class WidthAndHeightData { @ExcelProperty("字符串标题") private St ...
- 【基础知识笔记】001 MATLAB-plotyy-函数详解
plot 1 定义 plot()--matlab中二维画图的函数,函数返回值是各个线条的句柄. 2 调用格式 2.1 plot(y) 当y为向量时,是以y的分量为纵坐标,以元素序号为横坐标,用直线依次 ...
- Avalanche公链深度解析:创新共识、亚秒级最终性与生态竞争力
摘要:Avalanche定位为一个高性能.可扩展的Layer 1区块链平台,但它并不是一个新公链,其主网于2020年9月21日正式上线,有Ava Labs开发.Ava Labs成立于2018年,总部位 ...
- https证书中的subject alternative name字段作用及如何生成含该字段的证书
背景 最近,某个运维同事找到我,说测试环境的某个域名(他也在负责维护),假设域名为test.baidu.com,以前呢,证书都是用的生产的证书,最近不让用了.问为啥呢,说不安全,现在在整改了,因为证书 ...
- linux clickhouse 密码设置
默认密码 clickhouse 安装好之后,系统默认的登录账号密码是 /etc/clickhouse-server/users.d/default-password.xml 文件中配置的,默认密码是 ...
- CSRF的理解及Flask和Django的解决方案
CSRF 攻击的原理 1. 用户正常登录 网站A 2. 网站A 向用户浏览器写入cookies(包含登录信息) 3. 用户在没有登出的情况下,访问了网站B(攻击网站) 4. 网站B 伪造了一个 网站A ...
- Nginx配置跨域,覆盖后端服务跨域配置
本篇文章主要介绍了,如何通过Nginx配置跨域,并覆盖后端服务跨域配置. 先看下后端代码跨域配置: 主要的目标是:不修改后端跨域配置代码,来实现Nginx跨域指定域名. @Bean public Co ...
- Delphi 让窗体自适应屏幕显示
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...
- 【SpringMVC】国际化&文件的上传&使用拦截器&异常处理
国际化 国际化概述 默认情况下,SpringMVC 根据 Accept-Language 参数判断客户端的本地化类型. 当接受到请求时,SpringMVC 会在上下文中查找一个本地化解析器(Local ...
- Linux终端居然也可以做文件浏览器?
大家好,我是良许. 在抖音上做直播已经整整 5 个月了,我很自豪我一路坚持到了现在[笑脸] 最近我在做直播的时候,也开始学习鱼皮大佬,直播写代码.当然我不懂 Java 后端,因此就写写自己擅长的 Sh ...