UVA - 297 Quadtrees

题目链接

题意:

又是看了半天才看题意懂系列,其实题目看明白就蛮好动手了,直接看图吧( • ̀ω•́ )✧
在这里插入图片描述

  • 1 先是那一串英文: 'p’表示父节点,且为混色,因为只有叶结点会有两种颜色(黑or白,'e’表示白色,'f’表示黑色),字符串从左到右对应到四叉树的图中就是从上往下,从左往右的建树顺序。
  • 2 再是那张图:表示,从根节点(大正方形),假如存在混色(方块中存在两种颜色的小方块),往下找叶结点(均分四块),顺序是按照图中所示。
  • 3 最后是对应计算,总的像素为32*32,求两块大正方形合并后(黑+白=黑),黑色区域的像素值为多少。

思路:

从头遍历字符串,遇到’p’则递归,遇到’f’则标记并像素点加1,坐标选取的是从左上方开始。

#include<iostream>
#include<algorithm>
using namespace std;
char s[2000];
int maps[32][32];
int ans;
int t;
void dfs(int &t,int x,int y,int len)
{
    char ch=s[t++];
    if(ch=='p')
    {
        dfs(t,x,y+len/2,len/2);//1
        dfs(t,x,y,len/2);//2
        dfs(t,x+len/2,y,len/2);//3
        dfs(t,x+len/2,y+len/2,len/2);//4
    }
    else if(ch=='f')
    {
        for(int i=x;i<x+len;i++)
            {
                for(int j=y;j<y+len;j++)
                {
                    if(maps[i][j]==0)
                    {
                        maps[i][j]=1;
                        ans++;
                    }
                }
           }
    }
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        ans=0;
        memset(maps,0,sizeof(maps));
        for(int j=0;j<2;j++)
        {
        scanf("%s",s);
        t=0;
        dfs(t,0,0,32);
        }
        printf("There are %d black pixels.\n",ans);
    }
    return 0;
}

总结:

1.对于这道题看懂图比看懂英文要快。
2.思维定势,看见树就哒哒哒建树,然后挺耗时耗力的,题目本身数据范围比较小,可以用递归去做。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值