UVA297 四分树 Quadtrees 题解
2024-09-01 02:16:19
题目链接:
https://www.luogu.org/problemnew/show/UVA297
附几道推荐题目(先完成再食用此题效果更佳)
https://www.luogu.org/problemnew/show/UVA122
https://www.luogu.org/problemnew/show/UVA699
https://www.luogu.org/problemnew/show/UVA839
分析:
本题为树上的递归题目。我们可以在一个子函数search中完成:
void search(int x,int y,int w)
其中x为当前准备判断像素的正方形的最小x坐标,y同理,w为正方形的边长。
每次判断一个字符,如果是灰色,那么继续往下递归:
if(tmp=='p')
{
search(x+w/2,y+w/2,w/2);
search(x+w/2,y,w/2);
search(x,y,w/2);
search(x,y+w/2,w/2);
}
因为每次灰色后都再次切成四块,所以说每次w要除以2
否则,就是黑或白,白不用管,只把黑色的像素填上:
else
{
if(tmp=='f')
{
for(int i=x;i<x+w;i++)
{
for(int j=y;j<y+w;j++)
{
a[i][j]=1;
}
}
}
这些就是本题的核心部分,还有就是要注意输入输出,初始化等等,在此就不赘述了。
代码:
#include<cstdio>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
int cnt=-1;
char s[1005];
int a[33][33];
void search(int x,int y,int w)
{
char tmp=s[++cnt];
if(tmp=='p')
{
//if(num==1)
search(x+w/2,y+w/2,w/2);
//else
//if(num==2)
search(x+w/2,y,w/2);
//else
//if(num==3)
search(x,y,w/2);
//else
//if(num==4)
search(x,y+w/2,w/2);
}
else
{
if(tmp=='f')
{
//printf("%d %d %d %d\n",xl,yl,xr,yr);
for(int i=x;i<x+w;i++)
{
for(int j=y;j<y+w;j++)
{
a[i][j]=1;
}
}
}
/*if(num==1)
search(xr*2,yr*2,xr,yr,num+1);
else
if(num==2)
search(xl,yr*2,xr*2,yr,num+1);
else
if(num==3)
search(xl,yl,xr*2,yr*2,num+1);
else
if(num==4)
search(xr*2,yl,xr,yr*2,num+1); */
//search(xl,yl,xr,yr,num+1);
}
}
int main()
{
int T;
scanf("%d\n",&T);
while(T--)
{
cnt=-1;
memset(a,0,sizeof(a));
int ans=0;
cin>>s;
search(0,0,32);
cnt=-1;
cin>>s;
search(0,0,32);
for(int i=0;i<=32;i++)
{
for(int j=0;j<=32;j++)
{
if(a[i][j]==1)
ans++;
}
}
printf("There are %d black pixels.\n",ans);
}
return 0;
}
最新文章
- 关于更新发布CSS和JS文件的缓存问题
- 利用python实现爬虫爬取某招聘网站,北京地区岗位名称包含某关键字的所有岗位平均月薪
- 数据库中Schema和Database有什么区别
- ping脚本
- NLPIR分词工具的使用(java环境下)
- SpringMVC java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name
- MySQL默认数据库
- Java并发——同步容器与并发容器
- POJ 1142 质因数分解
- git merge,rebase和*(no branch)
- query返回值
- leetcode算法: Find Bottom Left Tree Value
- 新手篇丨Python任意网段Web端口信息探测工具
- JAVA 8 主要新特性 ----------------(七)新时间日期 API -----LocalDateTime
- css 禁止选中文本
- HttpWebResponse 解压gzip、deflate压缩
- 论文阅读笔记三十二:YOLOv3: An Incremental Improvement
- 在使用Java8并行流时的问题分析
- java自动装箱的一个例子
- [十二省联考2019]异或粽子 (可持久化01tire 堆)
热门文章
- Android零基础入门第87节:Fragment添加、删除、替换
- 读取注册表获取Windows系统XP/7/8/10类型(使用wcscmp比较wchar[]内容)
- 一个 Qt 显示图片的控件(继承QWidget,使用QPixmap记录图像,最后在paintEvent进行绘制,可缩放)
- QSettings 用法总结(很好用)
- Windows窗体原理及控件WM_DRAWITEM和子类化重绘演示文件
- 测试 Components 与 Controls 的区别(嵌套在Panel上的Edit,依然是Form1的Component)
- NPOI 超简单的导出导入
- ViewPager页面滑动,滑动到最后一页,再往后滑动则执行一个事件
- SpringBoot整合Redis注意的一些问题
- java关键字-interface