uva297
题意:
一个四叉树用来格式编码图像,这个想法的基础是任意的图像能够分成四个象限.每个象限能够拆分成四个子象限,
比如,在四叉树中,每一个图像都被一个父节点表示,根据预先定义好的顺序,四个孩子节点代表四个象限.
当然,如果整个图像只有一个颜色,这个图像的四叉树形式只有一个节点.通常,如果一个象限由不同的颜色组成,这个象限需要再次被拆分,
因此,四叉树不必有均匀的深度.
现代电脑图像工作基础是32x32单元格的黑白图,所以一个图像有1024个像素点.为了形成一个新的图像,一个操作是把俩个图像加在一起。
如果俩个像素点中有一个是黑色,那么相加后的像素点是黑色,要不然就是白色.
This particular artist believes in what he calls the preferred fullness:
为了让一个图像变得有趣(比如卖更多的钱)的最重要的属性是被填满黑色像素点的数目.
所以在让俩个图像相加前,他想知道在相加后的图像中有多少个黑色的像素点.
你的任务是写一个程序,给一颗代表俩个图形的四叉树,计算相加后结果图像中黑色的像素点的数目,
比如下面的计算,第一个样例从上到下展示了一个图像,四叉树,先序遍历字符串形式,像素点数目,
象限编号在最上方显示。
————
| 2|1 |
| 3|4 |
————
图形
四叉树形式
字符串形式
四个象限总共1024个点,比如第一象限占的点数是1024/4=256,样例中一个最小黑方块占的点数是256/4=64
输入:
第一行包含测试用例总数(N)
每一组测试用例包含俩个字符串,每个字符串一行,字符串是四叉树的先序遍历结果
字符p代表父节点,f代表象限全是黑色,e代表全是白色,保证每个字符串的是合法的四叉树,
树的深度不会超过5(因为这样像素的只有一个颜色)
1024
/
256
/
64
/
16
/
4
/
1
#include<stdio.h>
#include<iostream>
#include <strstream>
#include<memory.h>
using namespace std; const int MAX = (1 << 0) + (1 << 2) + (1 << 4) + (1 << 6) + (1 << 8)
+ (1 << 10);
void buildTree(char* a, string str, int index, int* sIndex);
void addTree(const char* t1, const char* t2, int* total, int depth, int index);
int main()
{
freopen("d:\\1.txt", "r", stdin);
int N;
cin >> N;
string str = "There are %d black pixels.\n";
while (N--)
{
char t1[MAX];
char t2[MAX];
memset(t1, 0, MAX);
memset(t2, 0, MAX);
string str1, str2;
cin >> str1;
cin >> str2;
char c = str1.at(0);
t1[0] = c;
if(c == 'p')
{
int i = 0;
buildTree(t1, str1, 0, &i);
}
c = str2.at(0);
t2[0] = c;
if(c == 'p')
{
int i = 0;
buildTree(t2, str2, 0, &i);
}
int total = 0;
addTree(t1, t2, &total, 0, 0);
printf(str.c_str(), total);
}
} void buildTree(char* a, string str, int index, int* sIndex)
{
char c;
for(int i = 1; i <= 4; i++)
{
*sIndex = *sIndex + 1;
c = str.at(*sIndex);
a[index * 4 + i] = c;
if(c == 'p')
{
buildTree(a, str, index * 4 + i, sIndex);
}
}
} void addTree(const char* t1, const char* t2, int* total, int depth, int index)
{
if(t1[index] == 'f' || t2[index] == 'f')
{
*total = *total + (1 << ((5-depth)*2));
return;
}
else if(t1[index] == 'p' || t2[index] == 'p')
{
addTree(t1, t2, total, depth + 1, index * 4 + 1);
addTree(t1, t2, total, depth + 1, index * 4 + 2);
addTree(t1, t2, total, depth + 1, index * 4 + 3);
addTree(t1, t2, total, depth + 1, index * 4 + 4);
} }
uva297的更多相关文章
- 树--四分树(UVa297)
郑重声明: 数据结构这部分内容, 由于博主才学很少(且很浅)的内容, 所以现在所写的(大都是抄的)一些典型例题, 再加上一些自己想法和理解而已, 等博主勤加修炼, 以后会大有补充和改进. 粗浅之处, ...
- UVa297 Quadtrees
// UVa297 Quadtrees // 题意:给两棵四分树的先序遍历,求二者合并之后(黑色部分合并)黑色像素的个数.p表示中间结点,f表示黑色(full),e表示白色(empty) // 算法: ...
- UVA297 四分树 Quadtrees 题解
题目链接: https://www.luogu.org/problemnew/show/UVA297 附几道推荐题目(先完成再食用此题效果更佳) https://www.luogu.org/probl ...
- uva297(quadtree)
给我们两棵quadtree的前序遍历,要我吗求原来32*32的矩阵有多少个位置是黑的 quardtree是将区域划分为相等的4个子空间,然后再递归划分这4个子空间,知道满足条件后终止划分 这题的终止条 ...
- Uva297 Quadtrees【递归建四分树】【例题6-11】
白书 例题6-11 用四分树来表示一个黑白图像:最大的图为根,然后按照图中的方式编号,从左到右对应4个子结点.如果某子结点对应的区域全黑或者全白,则直接用一个黑结点或者白结点表示:如果既有黑又有白,则 ...
- uva297 Quadtrees (线段树思想,区间操作)
借鉴了线段数区间操作的思想,只是把一个结点的孩子扩展到了4个, 结点k,四个孩子编号分别为4*k+1,4*k+2,4*k+3,4*K+4,从零开始. 根据层数,确定权值. #include<cs ...
- UVA297:Quadtrees(四分树)
题目描述 四象树是每个内结点均有4个子结点的特殊四叉树,它可用于描述平面上黑白图像.平面上的黑白图像是32行×32列的正方形,每个格子称为1个象素,是最小的图像单位.正方形图像可分成四个相等的小正方形 ...
- 【例题 6-11 UVA-297】Quadtrees
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 发现根本不用存节点信息. 遇到了叶子节点且为黑色,就直接覆盖矩阵就好(因为是并集); [代码] #include <bits/ ...
- 6_11 四分树(UVa297)<四分树>
一幅图有1024个点, 可以对图平均分成4块, 并且子图也可以再往下分, 直到一个子图表示一个点. f表示这块子图填满, p表示它还有4个子图, e表示没有子图(当然啦, 它也没有填满). 给定两个字 ...
随机推荐
- Unity3D插件-自制小插件、简化代码便于使用(新手至高手进阶必经之路)
Unity3D插件-简化代码.封装功能 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 FindT() ...
- Unity 3D游戏-NPC对话系统With XML
用XML做的Unity NPC对话系统 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Create X ...
- 【转载】Python字符串操作之字符串分割与组合
1. str.split():字符串分割函数 通过指定分隔符对字符串进行切片,并返回分割后的字符串列表. 语法: str.split(s, num)[n] 参数说明: s:表示指定的分隔符,不写的话, ...
- 【BZOJ1702】[usaco2007margold]队列平衡
原来蛤习线性探测的时候要每次加一个稍大一点的数而不是每次+1……连蛤习都不会写,我tmd是有多弱 原题: N(1<=N<=100000)头牛,一共K(1<=K<=30)种特色, ...
- day8 python学习 集合 深浅拷贝
1.内存地址: 字符串在20位以内,没有空格,没有特殊字符的情况下,同样的字符串内存地址是一样的 2.元组中:在只有一个值的时在后边加逗号和没有逗号的区别 t1=(1) 不加逗号这个值是什么类型就打印 ...
- All the Apache Streaming Projects: An Exploratory Guide
The speed at which data is generated, consumed, processed, and analyzed is increasing at an unbeliev ...
- 使用VBS控制声音
Set Ws = CreateObject("Wscript.Shell") Ws.Sendkeys "…" '静音 'Ws.Sendkeys "爱爱 ...
- stty(set tty)
tty [ -a ] [ -g ] [ Options ] stty(set tty)命令用于显示和修改当前注册的终端的属性. UNIX系统为键盘的输入和终端的输出提供了重要的控制手段,可以通过s ...
- CentOS6.8 x64+Nginx1.3.8/Apache-httpd 2.4.3+PHP5.4.8(php-fpm)+MySQL5.5.28+CoreSeek4.1源码编译安装
系统为CentOS6.8 x64服务器版精简安装. 准备工作 部署安装目录 /usr/local/* /var/lib/* /var/lib64/* 下载源文件 #cd /usr/local/src ...
- linux 下git使用教程
#添加所有新增文件 git add . #提交所有修改,包括删除,添加,修改 git add -A git add --all #查看状态 git status #添加一个文件 git add rea ...