UVa 297 - Quadtrees
题目:利用四叉树处理图片,给你两张黑白图片的四叉树,问两张图片叠加后黑色的面积。
分析:搜索、数据结构。把图片分成1024块1*1的小正方形,建立一位数组记录对应小正方形的颜色。
利用递归根据字符串,建立相应四叉树。在建树的过程中,树节点计算当前节点对应的小正方形
编号区间。这里处理类似于线段树,将父节点的区间等分成4份分别对应四棵子树的编号区间。
建树到达叶子时(color为‘f’或者‘e’),直接将颜色数组赋值即可。当树建完时,颜色数组即染色
完毕。将两棵树依次染色到同一数组,统计黑色节点个数即可。
注意:数组大小,防止RE。
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath> using namespace std; int Color[1024]; typedef struct tnode
{
char color;
tnode* child[4];
}tnode;
tnode *root;
tnode Node[1365];
int Count; tnode* dfs( char* word, int &move, int a, int b )
{
tnode* root = &Node[Count ++];
root->color = word[move ++];
if ( root->color == 'p' ) {
int mid = (a+b)>>1;
int m_l = (a+mid)>>1;
int m_r = (mid+b)>>1;
//构建四个子树
root->child[0] = dfs( word, move, a, m_l );
root->child[1] = dfs( word, move, m_l+1, mid );
root->child[2] = dfs( word, move, mid+1, m_r );
root->child[3] = dfs( word, move, m_r+1, b );
}else if ( root->color == 'f' ) {
//叶子节点染色
for ( int i = a ; i <= b ; ++ i )
Color[i] = 1;
}return root;
} int main()
{
int n,move;
char data[1366]; while ( ~scanf("%d",&n) )
for ( int i = 0 ; i < n ; ++ i ) {
for ( int i = 0 ; i < 1024 ; ++ i )
Color[i] = 0; //处理图片1
scanf("%s",data);
Count = 0;
dfs( data, move = 0, 0, 1023 ); //处理图片2
scanf("%s",data);
Count = 0;
dfs( data, move = 0, 0, 1023 ); //统计黑色节点
int sum = 0;
for ( int i = 0 ; i < 1024 ; ++ i )
sum += Color[i];
printf("There are %d black pixels.\n",sum);
} return 0;
}
UVa 297 - Quadtrees的更多相关文章
- 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 ...
- UVa 297 Quadtrees -SilverN
A quadtree is a representation format used to encode images. The fundamental idea behind the quadtre ...
- UVA - 297 Quadtrees (四分树)
题意:求两棵四分树合并之后黑色像素的个数. 分析:边建树边统计. #include<cstdio> #include<cstring> #include<cstdlib& ...
- 297 - Quadtrees (UVa)
Quadtrees A quadtree is a representation format used to encode images. The fundamental idea behind t ...
- UVa 297 (四分树 递归) Quadtrees
题意: 有一个32×32像素的黑白图片,用四分树来表示.树的四个节点从左到右分别对应右上.左上.左下.右下的四个小正方区域.然后用递归的形式给出一个字符串代表一个图像,f(full)代表该节点是黑色的 ...
- 【紫书】Quadtrees UVA - 297 四叉树涂色
题意:前序遍历给出两个像素方块.求两个方块叠加后有几个黑色格子. 题解:每次读进来一个方块,就在二维数组上涂色.每次把白色涂黑就cnt++: 具体递归方法是以右上角坐标与边长为参数,每次通过几何规律往 ...
随机推荐
- 免费Gif图片录制工具
/************************************************************************* * 免费Gif图片录制工具 * 说明: * 最近在 ...
- 【英语】Bingo口语笔记(27) - 如何培养口语语感
- 【django】django学得好迷茫啊 来个学习规划吧
http://www.zhihu.com/question/26235428
- 项目中使用的ajax异步读取数据结构设计
设计稍微复杂了一点,完成ajax读取功能涉及到了很多页面.虽然如此,但感觉比较灵活. 和传统方法唯一的区别在于多了一层数据容器控件,里面提供了显示数据的HTML元素及相应的JS方法. 这样数据控件指生 ...
- yii2.0 url 跳转
//转发 $this->render('page1',['id'=>3,'mark'=>2]); //显示page1页面 并传递 id mark 2个参数 //重定向 $thi ...
- HDFS的基本概念
转:http://www.cnblogs.com/forfuture1978/archive/2010/03/14/1685351.html
- 细数Android开源项目中那些频繁使用的并发库中的类
这篇blog旨在帮助大家 梳理一下前面分析的那些开源代码中喜欢使用的一些类,这对我们真正理解这些项目是有极大好处的,以后遇到类似问题 我们就可以自己模仿他们也写 出类似的代码. 1.ExecutorS ...
- 嵌入式 hi3518平台指定网卡测试是否通外网
版权声明:本文为博主原创文章,未经博主允许不得转载. /********************************** (C) COPYRIGHT *********************** ...
- nginx中针对目录进行IP限制
一个不错的nginx中针对目录进行IP限制 ,这里我以phpmyadmin目录只能让内网IP访问,而外网不能访问的配置方法,有需要的同学可参考. nginx phpmyadmin 针对内网ip用户开放 ...
- [转载]C++异常机制的实现方式和开销分析
原文章网址:http://baiy.cn/doc/cpp/inside_exception.htm C++异常机制的实现方式和开销分析 白杨 http://baiy.cn 在我几年前开始写<C+ ...