非二叉树 UVA297 四分树 Quadtrees
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相关推荐
- 四分树(UVa297紫书p160)
题目描述 输入格式 输出格式 题意翻译 如图所示,可以用四分图来表示一个黑白图像,方法是用根节点表示整幅图像,然后把行列个分成两等份,按图中的方式编号,从左到右对应4个子节点.如果某子节点对应的区域全 ...
- 【COGS】1577 [OIBH 练习赛#6]战地统计系统 四分树
传送门:[COGS]1577 [OIBH 练习赛#6]战地统计系统 题目分析:赤果果的四分树哦~,题目分析就不说了,大家看到一定都会,但是我要吐嘈一下数据= =,这题目的数据竟然有一组是错误的!x1 ...
- LOJ#3159. 「NOI2019」弹跳(四分树+dijkstra)
传送门 n2n^2n2暴力显然,考虑优化. 有一种想法是使用四分树/kd-tree/树套树,发现你并不能得到100pts100pts100pts的好成绩(空间会炸掉) 考试的时候比较智熄,先暴力四分树 ...
- UVA-806 Spatial Structures (四分树)
题目大意:将一块图像上的黑点在两种表示法之间转换. 题目分析:递归下去... 注意:输出时要注意细节!!! 代码如下: # include<iostream> # include<c ...
- UVa 297 四分树
感觉特别像那个分治的日程表问题.是f的话就填,否则就不填,然后同一个表填两次.那么就是最后的结果. 1 #include <iostream> 2 #include <cstring ...
- 树和二叉树(四种遍历,建树)详解+二叉排序树(包含图像和相关习题)
目录 树和二叉树 一.树 2.有序树和无序树 3.森林 4.树的基本性质 二.二叉树的概念 (1)二叉树的编号 1.二叉树和度为2的有序树的区别: 2.满二叉树 3.完全二叉树: 4.平衡二叉树: 5 ...
- 区块链相关论文研读2 - vChain,关于可验证的查询
这是在2019年7月发表在顶会SIGMOD上的论文,题目为<vChain: Enabling Verifiable Boolean Range Queries over Blockchain D ...
- 数据结构 | 从哪里开始?
数据结构:把数据放入结构里,通过结构里最基本的计算方法(增.删.改.查)操作数据. 是什么 编程要想写好程序,就需要学习数据结构:可数据结构是什么呢,我们以画画来举个例子. 一般人画画通常就直接画 - ...
- pat1079+1086+1090+1094(树的遍历)感想
今天做了这4道题,虽然大部分以前做过,但还是有些知识掌握不全. 总结一下所用的树的知识及解决方法 (1)非二叉树的遍历: 非二叉树就是图,所以它的存储结构类似邻接表,c++提供了vector数组可以很 ...
最新文章
- 双链表(删除节点操作)
- 比特币诞生十周年:价格虽然成功,但中本聪愿景却未实现
- 《Qt数据类型》--QByteArray,QString,int,hex之间的转化
- 《敏捷软件开发:原则、模式与实践(C#版.修订版)》—第1章1.4节参考文献
- linux执行某个目录的程序
- redis核心技术与实战(四)高可用高扩展篇
- 软件架构之道的一次感悟
- SpringCloud feign、hystrix、zuul超时配置
- C语言(二)- 函数、指针、数组
- Newtonsoft.Json取json字符串中的值得用法 看红色的部分就可以了
- linux group管理,LINUX-用户和组管理
- 标签打印软件中Excel数据整理及导入
- 小区物业管理系统c语言,智能小区物业管理系统毕业论文.doc
- dubbo源码解析之服务调用(通信)流程
- 基于 redis 的单点登录原理
- c51间隔点亮c语言编程,51系列单片机C语言编程
- Java线程状态以及 sheep()、wait()、yield() 的区别
- 物联网(IoT)行业的决策管理应用
- linux 排程命令,linux 任务管理与调度
- 基于python3在windows下安装gmpy2
热门文章
- 图像分割20年,盘点影响力最大的10篇论文
- 基于OpenCV的车辆变道检测
- Vue笔记(五)——Token生命周期
- Django+Bootstrap+Mysql 搭建个人博客(五)
- Java性能调优、LinkedIn容器部署、阿里移动性能调优——首届APMCon精彩演讲先睹为快...
- C#.net模拟提交表单POST
- .NET : 再谈谈XML中的命名空间问题
- 华硕fx80装linux,华硕fx80【解决思路】
- 一键ghost奥运版_超详细的纯净版windows系统重装示例
- java数据类型_java 数据类型