Quadtrees UVA - 297
题目链接:https://vjudge.net/problem/UVA-297



题目大意:如上图所示,可以用一个四分树来表示一个黑白图像,方法是用根节点表示整副图像,然后把行列各等分两等分,按照图中的方式进行编号,从左到右对应4个结点
如果某子结点对应的区域全为黑或白,则直接用一个黑结点或者白结点表示:如果既有黑油油白 则用一个灰结点表示 并且为这个区域递归建树。
给出两颗树的现需遍历,求二者合并之后(黑色部分合并)黑色像素的个数。p表示中间结点,f表示黑色 e表示白色
思路:首先一定要把题意读懂。 首先给你一幅图,这幅图的像素的是1024 是正方形区域 你可以看做是32*32的区域 每个块可以看做1 2 3 4个块
问你两棵树合并之后有多少个黑色像素的点。
具体怎么做呢 ? 只要我们能编写一个“画出来”的过程 边画边统计即可!
如果碰到的是p 那么接着画新的区域。 我们可以用一个数组来存储改点是否是黑色 刚开始区域是32*32的大小 我们可以看做起点是(0,0)终点是(31,31)的1024个点
四个区域正如题目要求的一样 一直遍历下去就行了
看代码:
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
const int len=;
const int maxn=+;
char s[maxn];
int buf[len][len],cnt;
/*
把字符串s[p...]导出到以(r,c)为左上角,边长为w的缓冲区内
*/
//draw(s,p,0,0,len);
void draw(const char* s,int& p,int r,int c,int w)
{
char ch=s[p++];
if(ch=='p')
{
draw(s,p,r,c+w/,w/);//
draw(s,p,r,c,w/);//
draw(s,p,r+w/,c,w/);//
draw(s,p,r+w/,c+w/,w/);//
}
else if(ch=='f')//画黑像素
{
for(int i=r;i<r+w;i++)
{
for(int j=c;j<c+w;j++)
if(buf[i][j]==)
{
buf[i][j]=;
cnt++;
}
}
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
memset(buf,,sizeof(buf));
cnt=;
for(int i=;i<;i++)
{
cin>>s;
int p=;
draw(s,p,,,len);
}
printf("There are %d black pixels.\n",cnt);
}
return ;
}
Quadtrees UVA - 297的更多相关文章
- 【紫书】Quadtrees UVA - 297 四叉树涂色
题意:前序遍历给出两个像素方块.求两个方块叠加后有几个黑色格子. 题解:每次读进来一个方块,就在二维数组上涂色.每次把白色涂黑就cnt++: 具体递归方法是以右上角坐标与边长为参数,每次通过几何规律往 ...
- 四分树 (Quadtrees UVA - 297)
题目描述: 原题:https://vjudge.net/problem/UVA-297 题目思路: 1.依旧是一波DFS建树 //矩阵实现 2.建树过程用1.0来填充表示像素 #include < ...
- UVa 297 Quadtrees(树的递归)
Quadtrees 四分树就是一颗一个结点只有4个儿子或者没有儿子的树 [题目链接]UVa 297 Quadtrees [题目类型]树的递归 &题意: 一个图片,像素是32*32,给你两个先序 ...
- UVA.297 Quadtrees (四分树 DFS)
UVA.297 Quadtrees (四分树 DFS) 题意分析 将一个正方形像素分成4个小的正方形,接着根据字符序列来判断是否继续分成小的正方形表示像素块.字符表示规则是: p表示这个像素块继续分解 ...
- uva 297 quadtrees——yhx
Quadtrees A quadtree is a representation format used to encode images. The fundamental idea behind ...
- UVA 297 Quadtrees(四叉树建树、合并与遍历)
<span style="font-size: 18pt; font-family: Arial, Helvetica, sans-serif; background-color: r ...
- 297 - Quadtrees (UVa)
Quadtrees A quadtree is a representation format used to encode images. The fundamental idea behind t ...
- UVa 297 Quadtrees -SilverN
A quadtree is a representation format used to encode images. The fundamental idea behind the quadtre ...
- UVa 297 (四分树 递归) Quadtrees
题意: 有一个32×32像素的黑白图片,用四分树来表示.树的四个节点从左到右分别对应右上.左上.左下.右下的四个小正方区域.然后用递归的形式给出一个字符串代表一个图像,f(full)代表该节点是黑色的 ...
随机推荐
- TCP/IP的三次握手和四次放手
一开始个人对于三次握手和四次挥手这个东西还是有时候会忘记,可能理解的不是非常深刻,所以今天就自己动手来记录一下这个知识点,方便以后查看.总结完之后发现总结的还是可以的哈哈. 三次握手建立连接 第一次: ...
- php获取数据库结果集
PHP经常要访问数据库提前数据库里面的数据,那么该怎么样去提前数据呢? 提取数据库代码如下: <?phpinclude("conn.php");//数据库连接 $sql=&q ...
- 【Android4高级编程笔记】深入探讨Android Activity
创建Activity 要创建一个新的Activity,需要对Activity类进行扩展,在新类定义用户界面并实现新的功能. 视图是用来显示数据和提高用户交互的Ui控件.Android提供了多个布局类, ...
- vim尝试
http://3502990.blog.51cto.com/3492990/985750
- ASP.NET Core 中的中间件
前言 由于是第一次写博客,如果您看到此文章,希望大家抱着找错误.批判的心态来看. sky! 何为中间件? 在 ASP.NET Framework 中应该都知道请求管道.可参考:浅谈 ASP.NET ...
- JAVA学习第三篇Boolean
Boolean是布尔值. 布尔值只有两个值:真和假.写作:true false. 那么如何使用呢? 最简单的用法: public class demo{ public static void main ...
- ubuntu17.04安装flash
因为用不了软件商店(别问我为什么) 所以手动安装 1 下载文件 在firefox下下载 *****.tar.gz 压缩包 ,并解压(一般目录在 /home 当前用户下的 下载目录下) adobe官网 ...
- Pandas——读取csv,txt文件
""" 读取csv文件 该文本中的分割符既有空格又有制表符(‘/t’),sep参数用‘/s+’,可以匹配任何空格. """ import p ...
- 【转】 PHP 两个日期(时间段) 之间的日期数组
在开发过程中会遇到这样一个需求:获取2018-11-02到2018-11-15之间的日期数组 希望得到如下数组: Array ( [] => -- [] => -- [] => -- ...
- (原创)BZOJ 2038 小Z的袜子(hose) 莫队入门题+分块
I - 小Z的袜子(hose) 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z ...