博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 297 Quadtrees
阅读量:6586 次
发布时间:2019-06-24

本文共 1270 字,大约阅读时间需要 4 分钟。

UVA_297

    由于这个题目可以看成是完全四叉树,所以借用了一下线段树的思想,把题目转化成了对区间进行两次染色,然后求最后色块的个数。

    当然我的程序写得复杂了,lazy可以不用的,在统计的时候遇到黑色节点就返回即可,只不过这样计数的方式就要稍加变化了。

#include
#include
#define MAXD 4000 int tree[MAXD], lazy[MAXD], cur, M, res; char b[1500]; void down(int t) {
if(lazy[t] == 1) {
tree[t] = 1, lazy[t] = 0; if(t < M) lazy[4 * t - 2] = lazy[4 * t - 1] = lazy[4 * t] = lazy[4 * t + 1] = 1; } } void build(int t) {
int i; down(t); if(b[cur] == 'f') {
lazy[t] = 1; cur ++; } else if(b[cur] == 'e') cur ++; else {
cur ++; for(i = -2 ; i <= 1; i ++) build(4 * t + i); } } void dfs(int t) {
int i; down(t); if(t >= M) {
if(tree[t]) res ++; } else {
for(i = -2; i <= 1; i ++) dfs(4 * t + i); } } void solve() {
int i, j; for(i = 1, M = 1; i <= 5; i ++, M = (M << 2) - 2); memset(tree, 0, sizeof(tree)); memset(lazy, 0, sizeof(lazy)); gets(b); cur = 0; build(1); gets(b); cur = 0; build(1); res = 0; dfs(1); printf("There are %d black pixels.\n", res); } int main() {
int t; gets(b); sscanf(b, "%d", &t); while(t --) {
solve(); } return 0; }

转载地址:http://hhqno.baihongyu.com/

你可能感兴趣的文章
tomcat集群
查看>>
java_生态环境
查看>>
笔记-人老了-github
查看>>
https域名强弱校验的区别
查看>>
MariaDB 10.3 instant ADD COLUMN亿级大表毫秒级加字段
查看>>
堆结构导致数据文件不能收缩
查看>>
linux运维常见英文报错中文翻译(菜鸟必知)
查看>>
微软私有云Azure Pack实践系列之三创建虚拟机角色
查看>>
Exchange 2010 UM角色安装后无法启动服务,错误 1000,1001
查看>>
运维的核心竞争力是什么
查看>>
.NET Micro Framework开发板用户简明手册(v3.0)
查看>>
Gartner:智能SOC/情报驱动的SOC的五大特征
查看>>
【毕业寄语】人生处处都是毕业季
查看>>
机器学习算法实战
查看>>
学习产品型是否要满足人们的“懒”需求
查看>>
oracle执行计划解释
查看>>
两台linux建立GRE隧道
查看>>
ASA L2L *** IKEV2共享密钥配置
查看>>
Ubunut14.04安装wps最新方法
查看>>
Windows Server 2016-命令行Ntdsutil迁移FSMO角色
查看>>