首页 > 其他分享 >Uva--297 Quadtrees(非二叉树/四叉树)

Uva--297 Quadtrees(非二叉树/四叉树)

时间:2023-05-20 18:44:25浏览次数:48  
标签:-- ++ len Quadtrees int solve 二叉树 buf result

记录
18:34 2023-5-20

uva.onlinejudge.org/external/2/297.html

reference:《算法竞赛入门经典第二版》例题6-11

非二叉树,这还是比较有趣的,图形学上还有八叉树用来划分空间的。
这道题将图和四叉巧妙的结合起来,其原理也是使用先序遍历,边读边建树

#include<cstdio>
#include<cstring>
#define MAX_N 1024
using namespace std;
typedef long long ll;
typedef unsigned int uint;
const int INF = 0x3f3f3f3f;

const int len = 32;
char s[MAX_N];
int buf[len][len];
int result = 0;

//以(r, c)为左上角, w为此时方块长度
void solve(const char*s, int &p , int r, int c, int w) {
    char t = s[p++];
    if(t == 'p') {
        solve(s, p, r, c + w / 2, w / 2); // 1
        solve(s, p, r, c, w / 2); // 2
        solve(s, p, r + w / 2, c, w / 2); // 3
        solve(s, p, r + w / 2, c + w / 2, w / 2 ); // 4
    } else if (t == 'f') {
        for(int i = r; i < r + w ; i++) {
            for(int j = c; j < c + w; j++) {
                if(buf[i][j] == 0) {
                    buf[i][j] = 1;
                    result += 1;
                }
            }
        }
    } else {
        //empty 不用进行处理
    }
}

int main() {
    int T;
    scanf("%d", &T);
    while (T--) {
        memset(buf, 0, sizeof(buf));
        result = 0;
        for(int i = 0; i < 2; i++) {
            scanf("%s", s);
            int p = 0;
            solve(s, p, 0, 0, len);
        }
        printf("There are %d black pixels.\n", result);        
    }
}

标签:--,++,len,Quadtrees,int,solve,二叉树,buf,result
From: https://www.cnblogs.com/57one/p/17417616.html

相关文章

  • 《程序员修炼之道--从小工到专家》阅读笔记01
    《程序员修炼之道–从小工到专家》是一本经典的软件开发实践指南书籍,被许多程序员视为进阶必读之书。以下是本人对该书第一章节的阅读笔记。第一章节题为:为什么需要修炼?显然,程序员和武林中的武功修炼者一样,都需要经过长期的学习、训练和实践,才能成为真正的专家。而与武术不同的是......
  • 源代码管理工具博客
    为了解决在软件开发过程中遇见的各种繁琐的问题,比如说无法实现多人同时开发,无法对代码进行合理保存,无法对比软件版本之间的差异……因此,诞生了各种各样的源代码管理工具:git,CVS,SVN,Clearcase,VSS等这些工具具有追踪项目全过程,记录内容的变化,方便查阅特定版本修订情况的功能......
  • 算法学习day25回溯part02-216、17
    packageLeetCode.backtrackpart02;importjava.util.ArrayList;importjava.util.LinkedList;importjava.util.List;/***216.组合总和III*找出所有相加之和为n的k个数的组合,且满足下列条件:*只使用数字1到9*每个数字最多使用一次*返回所有可能的有效......
  • java引用类型传值
    引用类型参数的传递,调用方的变量,和接收方的参数变量,地址指向的是同一个对象。双方任意一方对这个对象的修改,都会影响对方myself:这样也不用像php加&,说变就跟着变,会不会很麻烦,出现一些隐匿的bugpublicclassImoocStudent{publicvoidreplaceFirstPlayer(String......
  • Fortran程序的Makefile文件
      qqqq #获取文件夹中所有.f90文件列表notdir把展开的文件去除掉路径信息SRCS_F90=$(wildcard*.f90)SRCS_F=$(wildcard./*.f)SRCS_DIR=$(notdir$(SRCS_F))#替换.f90后缀为.o后缀得到.o文件列表OBJS_F90=$(patsubst%.f90,%.o,$(SRCS_F90))OBJS_F=$......
  • Ubuntu20.04清华版配置以及ROS的安装和rosdep的初始化
    一、配置Linux清华镜像源这里我以 Ubuntu20.04LTS 为例来配置 清华源首先进入清华大学开源软件镜像站(https://mirrors.tuna.tsinghua.edu.cn)在列表里选择自己的系统,这里我选择的是 Ubuntu,点击后面的问号图案    进入后选择自己的系统版本 20.04LTS 随即文......
  • Jatpack Compose
    ColumnColumn垂直排列元素Modifier.verticalScroll可令屏幕垂直滚动@Composable@PreviewfunUI(){valstate=rememberScrollState()Column(modifier=Modifier.fillMaxWidth(1f).verticalScroll(state)){(1..200step1).map{......
  • Python编写输出斐波那契数列的前n项
    以下是一个使用Python编写的程序代码,可以计算并输出斐波那契数列的前n项(n由用户输入):n=int(input("请输入斐波那契数列的项数:"))a,b=0,1foriinrange(n):print(b,end="")a,b=b,a+b代码解释:用户输入斐波那契数列的项数n,并使用int()函数将输入的字符串......
  • OverTheWire攻关过程-Leviathan模块0
    我们学习下leviathan模块,查看下信息机器翻译你敢面对海洋之王吗?利维坦是一个从死亡中拯救出来的战争游戏。intruded.net,曾于leviathan.intruded.net。非常感谢adc,morla和reth在复活这个游戏中的帮助!下面是利维坦的原始描述,复制自intruded.net:摘要:难度:1/10级别:8平台:Linux/x86作者......
  • 直线导轨在机床上的应用优势
    直线导轨用于高精或高速直线往复运动场合,且可以承担一定的扭矩,可在高负载的情况下实现高精度的直线运动,随着工业4.0时代的到来,市场对直线导轨的需求也将迅速增长,越来越多的直线导轨被用于各式各样的机器。直线导轨在机床的应用中,能影响到工件定位和表面关节度,在系统中,机械元件的反......