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;
}

 

 

            

 

转载于:https://www.cnblogs.com/suncoolcat/p/3370772.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433053.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何打开win7禁用的无线网卡服务器,Windows7如何使用批处理开启/禁用无线网卡...

对于无线网卡&#xff0c;Win7笔记本用户应该都不会陌生&#xff0c;许多笔记本用户都是在自己的电脑上安装了无线网卡之后&#xff0c;使用无线网络进行联网的&#xff0c;不过对于一些有线用户来说&#xff0c;无线网卡就显得并不太重要了。因此&#xff0c;今天小编就教大家…

超声声场模拟_超声全聚焦(TFM)简介

应读者要求&#xff0c;小编将介绍一下全聚焦TFM的基础知识。如有讲解不对的&#xff0c;欢迎批评指正。全聚焦是超声检测里面的新事物。早在2005前&#xff0c; Caroline Holmes、Paul D. Wilcox等国外学者就开始研究了全聚焦成像&#xff0c;并通过实验得出了TFM相对于常规相…

bbb sd6 无e2 修改

1. u-boot修改 board/ti/am335x/board.c void s_init(void)和static int read_eeprom(void)这两个函数要从e2中读取数据&#xff0c;只需要把原版的bbb的e2中的数据读出来并添充到相应的数据结构里即可。 最终是要填充这个结构体 struct am335x_baseboard_id { unsigned int m…

session会话拦截ajax,session过期,拦截ajax请求并跳转登录页面

1.方法一 &#xff1a;1.1使用filter 和ajaxsetup 对ajax进行拦截并跳转登录页面public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletResponse hresponse (HttpServletResponse)re…

ubuntu下修改mysql编码,使能支持中文

通过sudo apt-get install mysql-server安装的mysql的编码是latin1&#xff0c;不能支持中文。 需要修改/etc/mysql/my.cnf文件&#xff0c;可以通过vim或者gedit进入&#xff0c; 找到[client] 添加:default-character-setutf8 //默认字符集为utf8 找到[mysqld]添加: default-…

php二维码存放json数据_PHP生成及获取JSON文件的方法

本文实例讲述了PHP生成及获取JSON文件的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;首先定义一个数组&#xff0c;然后遍历数据表&#xff0c;把相应的数据放到数组中&#xff0c;最后通过json_encode()转化数组json_encode() 函数的功能是将数值转换成 JSON …

gsoap的几个常用设置选项

1. 服务器端设置地址重用 在soapXXXService.cpp中&#xff0c;在类的构造函数中增加 bind_flags SO_REUSEADDR; 2. 客户端设置连接超时时间 在soapXXXProxy.cpp中&#xff0c;在XXXProxy_init中增加 connect_timeout x; 3. 客户端设置请求超时时间 在soapXXXProxy.cpp中&…

post修改服务器数据源,postgresql安装及配置超详细教程

1. 安装根据业务需求选择版本&#xff0c;官网下载初始化数据库执行完初始化任务之后&#xff0c;postgresql 会自动创建和生成两个用户和一个数据库&#xff1a;linux 系统用户 postgres&#xff1a;管理数据库的系统用户&#xff1b;密码由于是默认生成的&#xff0c;需要在系…

小程序分享到朋友圈_如何给小程序添加分享朋友圈

微信公众号更新以后&#xff0c;推送不是按照优先来的&#xff0c;你们可以把我的微信公众号点击设置为星标&#xff0c;以便于及时的接收信息.从微信小程序官方分享朋友圈有那么几天了,今天就分享下如何给自己的小程序添加分享朋友圈代码,几行代码的事。根据官方的提示需要基础…

游戏开发第3天小结

今天是正式开始的第三天。这三天来一直在弄跟模型相关的事情&#xff0c;用blender来修改模型&#xff0c;做骨骼&#xff0c;蒙皮&#xff0c;导出到3dXchange中&#xff0c;再导到Iclone里去制作动作&#xff0c;最后导出到Unity里。简单就这样的一个工作流程。其中遇到各种头…

grep -q用于if逻辑判断

grep -q用于if逻辑判断突然发现grep -q 用于if 逻辑判断很好用。-q 参数&#xff0c;本意是 Quiet; do not write anything to standard output. Exit immediately with zero status if any match is found, even if an error was detected. 中文意思为&#xff0c;安静模式&…

iReport报表工具的使用

对于本人来说&#xff0c;报表工具只是刚刚接触&#xff0c;经过几个小时的摸索&#xff0c;基本的操作还是可以的。 &#xff08;1&#xff09;安装该工具总结 首先需要到日所安装数据库所需的驱动 工具--->选项--->classpath--->addjar(然后选中需要导入的数据库驱动…

mac远程redis_Linux:使用Mac远程(局域网内)访问Ubuntu主机上的Redis服务

1. 前言本文介绍的方法&#xff0c;是通过配置 Redis&#xff0c;在 Mac 上通过 ssh 协议访问 Ubuntu 主机的 Redis 服务&#xff1b;注意&#xff1a;如果 Ubuntu 不做 Redis 配置&#xff0c;Mac 直接访问 Ubuntu 的 Redis 服务时会报以下错误&#xff1a;Could not connect …

bbb 烧写脚本分析

ftp服务器地址&#xff0c;即CCS Uniflash的地址 SERVER_IP"192.168.2.1" MLO u-boot.img uImage压缩文件的名称&#xff0c;即ftp服务器下载目录里的文件名 BOOT_PARTITION"boot_partition.tar.gz" 文件系统的名称&#xff0c;即ftp服务器下载目录里的…

mysql 增量备份脚本_MySQL自动化(全量+增量)备份脚本

一、MySQL的日常备份方案&#xff1a;全备增量备份&#xff1a;1、周日凌晨三点进行全备&#xff1b;2、周一到周日增量备份。不是往常的周日全备份&#xff0c;周一到周六增量备份&#xff0c;这样如果周日数据库在完全备份前出问题&#xff0c;恢复完成后&#xff0c;会少周日…

JS代码大全

一、验证类 1、数字验证内 1.1 整数 /^(-|\)?\d$/.test(str) 1.2 大于0的整数 &#xff08;用于传来的ID的验证) /^\d$/.test(str) 1.3 负整数的验证 /^-\d$/.test(str) 2、时间类 2.1 短时间&#xff0c;形如 (13:04:06) function isTime(str) …

Linux编程里getopt_long_only函数用法详解

在程序中难免需要使用命令行选项&#xff0c;可以选择自己解析命令行选项&#xff0c;但是有现成的&#xff0c;何必再造轮子。下面介绍使用getopt_long_only和getopt_long( 两者用法差不多 )解析命令行选项。 程序中主要使用&#xff1a; 短选项长选项是否需要参数-n--userna…

mybatis的mysql参数传递参数_mybatis 传递参数的方法总结

有三种mybatis传递参数的方式:第一种mybatis传入参数是有序号的,可以直接用序号取得参数User selectUser(Stringname,String area);可以在xml配置文件中写select * from user_user_t where user_name #{0} and user_area#{1}#{0} 表示传递过来的第一参数 . 也就是说#{N} 就可以…

C# 数据的加密解密

/// <summary> /// 加密数据 /// </summary> /// <param name"Text"></param> /// <param name"sKey"></param> /// <returns></returns> public static string Encrypt(string Text, string sKey){DESCr…

strdup函数的用法

函数名: strdup 功 能: 将串拷贝到新建的位置处 用 法: char *strdup(char *str)&#xff1b; 这个函数在linux的man手册里解释为&#xff1a; The strdup() function returns a pointer toa new string which is a duplicate of the string s. Memory for thenew string is …