UVA297 四分树 Quadtrees

题意翻译
如图所示,可以用四分图来表示一个黑白图像,方法是用根节点表示整幅图像,然后把行列个分成两等份,按图中的方式编号,从左到右对应4个子节点。如果某子节点对应的区域全黑或全白,则直接用一个黑节点或白节点表示;如既有黑又有白,则用一个灰节点表示,并且为这个区域递归建树。 给出两棵四分树的先序遍历,求二者合并(黑色部分合并)黑像素的个数(每幅图都是32X32的)。p表示灰节点,f表示黑节点,e表示白节点。 具体内容看原文和紫书。
输入:

3
ppeeefpffeefe
pefepeefe
peeef
peefe
peeef
peepefefe

输出:

There are 640 black pixels.
There are 512 black pixels.
There are 384 black pixels.
#include<bits/stdc++.h>
using namespace std;
#define debug(x) cout<<"#  "<<x<<" "<<endl;
typedef long long ll;
const ll mod=2147483647;
const ll N=1e4+7;
const ll len=32;
ll val[len][len],cnt;
string s;
// 把字符串s[p..]导出到以(r,c)为左上角,边长为w的缓冲区中
// 2 1
// 3 4
void draw(string s,ll &p,ll x,ll y,ll z)
{char ch=s[p++];if(ch=='p'){draw(s,p,x,y+z/2,z/2);draw(s,p,x,y,z/2);draw(s,p,x+z/2,y,z/2);draw(s,p,x+z/2,y+z/2,z/2);}else if(ch=='f')// 只画黑像素{for(int i=x;i<x+z;++i)for(int j=y;j<y+z;++j)if(!val[i][j])val[i][j]=1,cnt++;//只画一次}
}
int main()
{ll t;cin>>t;while(t--){memset(val,0,sizeof val);cnt=0;for(int i=1;i<=2;i++){ll p=0;cin>>s;draw(s,p,0,0,len);}printf("There are %lld black pixels.\n",cnt);}return 0;
}

非二叉树 UVA297 四分树 Quadtrees相关推荐

  1. 四分树(UVa297紫书p160)

    题目描述 输入格式 输出格式 题意翻译 如图所示,可以用四分图来表示一个黑白图像,方法是用根节点表示整幅图像,然后把行列个分成两等份,按图中的方式编号,从左到右对应4个子节点.如果某子节点对应的区域全 ...

  2. 【COGS】1577 [OIBH 练习赛#6]战地统计系统 四分树

    传送门:[COGS]1577 [OIBH 练习赛#6]战地统计系统 题目分析:赤果果的四分树哦~,题目分析就不说了,大家看到一定都会,但是我要吐嘈一下数据= =,这题目的数据竟然有一组是错误的!x1 ...

  3. LOJ#3159. 「NOI2019」弹跳(四分树+dijkstra)

    传送门 n2n^2n2暴力显然,考虑优化. 有一种想法是使用四分树/kd-tree/树套树,发现你并不能得到100pts100pts100pts的好成绩(空间会炸掉) 考试的时候比较智熄,先暴力四分树 ...

  4. UVA-806 Spatial Structures (四分树)

    题目大意:将一块图像上的黑点在两种表示法之间转换. 题目分析:递归下去... 注意:输出时要注意细节!!! 代码如下: # include<iostream> # include<c ...

  5. UVa 297 四分树

    感觉特别像那个分治的日程表问题.是f的话就填,否则就不填,然后同一个表填两次.那么就是最后的结果. 1 #include <iostream> 2 #include <cstring ...

  6. 树和二叉树(四种遍历,建树)详解+二叉排序树(包含图像和相关习题)

    目录 树和二叉树 一.树 2.有序树和无序树 3.森林 4.树的基本性质 二.二叉树的概念 (1)二叉树的编号 1.二叉树和度为2的有序树的区别: 2.满二叉树 3.完全二叉树: 4.平衡二叉树: 5 ...

  7. 区块链相关论文研读2 - vChain,关于可验证的查询

    这是在2019年7月发表在顶会SIGMOD上的论文,题目为<vChain: Enabling Verifiable Boolean Range Queries over Blockchain D ...

  8. 数据结构 | 从哪里开始?

    数据结构:把数据放入结构里,通过结构里最基本的计算方法(增.删.改.查)操作数据. 是什么 编程要想写好程序,就需要学习数据结构:可数据结构是什么呢,我们以画画来举个例子. 一般人画画通常就直接画 - ...

  9. pat1079+1086+1090+1094(树的遍历)感想

    今天做了这4道题,虽然大部分以前做过,但还是有些知识掌握不全. 总结一下所用的树的知识及解决方法 (1)非二叉树的遍历: 非二叉树就是图,所以它的存储结构类似邻接表,c++提供了vector数组可以很 ...

最新文章

  1. 双链表(删除节点操作)
  2. 比特币诞生十周年:价格虽然成功,但中本聪愿景却未实现
  3. 《Qt数据类型》--QByteArray,QString,int,hex之间的转化
  4. 《敏捷软件开发:原则、模式与实践(C#版.修订版)》—第1章1.4节参考文献
  5. linux执行某个目录的程序
  6. redis核心技术与实战(四)高可用高扩展篇
  7. 软件架构之道的一次感悟
  8. SpringCloud feign、hystrix、zuul超时配置
  9. C语言(二)- 函数、指针、数组
  10. Newtonsoft.Json取json字符串中的值得用法 看红色的部分就可以了
  11. linux group管理,LINUX-用户和组管理
  12. 标签打印软件中Excel数据整理及导入
  13. 小区物业管理系统c语言,智能小区物业管理系统毕业论文.doc
  14. dubbo源码解析之服务调用(通信)流程
  15. 基于 redis 的单点登录原理
  16. c51间隔点亮c语言编程,51系列单片机C语言编程
  17. Java线程状态以及 sheep()、wait()、yield() 的区别
  18. 物联网(IoT)行业的决策管理应用
  19. linux 排程命令,linux 任务管理与调度
  20. 基于python3在windows下安装gmpy2

热门文章

  1. 图像分割20年,盘点影响力最大的10篇论文
  2. 基于OpenCV的车辆变道检测
  3. Vue笔记(五)——Token生命周期
  4. Django+Bootstrap+Mysql 搭建个人博客(五)
  5. Java性能调优、LinkedIn容器部署、阿里移动性能调优——首届APMCon精彩演讲先睹为快...
  6. C#.net模拟提交表单POST
  7. .NET : 再谈谈XML中的命名空间问题
  8. 华硕fx80装linux,华硕fx80【解决思路】
  9. 一键ghost奥运版_超详细的纯净版windows系统重装示例
  10. java数据类型_java 数据类型