zoukankan      html  css  js  c++  java
  • Uva 297 四分树

    题意:

    有一个大小为32*32的图像, 它可以描述为一颗四分树, 如下图

    注意描述顺序为

    2 1

    3 4

     

    给出两棵四分树的先序遍历, 求两者合并后, 黑色像素的个数。

    分析:

    因为本题给的树是一颗完全的树, 所以只需要给出先序遍历, 就能确定整棵树。

    我们可以建一个32*32的数组模拟涂色的过程, 是一个锻炼递归的好题目, 递归的代码通常也可以写的很简便。

    每次确定一个左上角坐标(r,c), 和长度len,就可以把一个矩形区域填充。

    最后数一下填充多少个即可。

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 1e5;
    const int len = 32;
    int buf[len][len], cnt;
    char s[maxn];
    // 2 1
    // 3 4
    int draw(int& p, int r, int c,int len){
        char ch = s[p++];
        if(ch == 'p'){
            draw(p,r,c+len/2, len/2);
            draw(p,r,c      , len/2);
            draw(p,r+len/2,c, len/2);
            draw(p,r+len/2,c+len/2, len/2);
        }else if(ch == 'f'){
            for(int i = r; i < r+len; i++){
                for(int j = c; j < c +len; j++){
                    if(buf[i][j] == 0) {
                        buf[i][j] = 1;
                        cnt++;
                    }
                }
            }
        }
    }
    int main(){
       int T;
       scanf("%d", &T);
       while(T--){
            memset(buf,0,sizeof(buf));
            cnt = 0;
            for(int i=  0; i < 2; i++){
                scanf("%s", s);
                int p = 0;
                draw(p , 0 , 0, len);
            }
            printf("There are %d black pixels.
    ",cnt);
       }
    
    }
  • 相关阅读:
    js 保留两位小数 input要求是数字框,
    ionic实现滑动的三种方式
    如何在只封装异步请求的两个接口中实现同步请求
    ng-trim
    ng-repeat
    angular.js开发 将多页面开发成单页面
    接口
    记忆
    心情
    最小化安装CentOS-7-x86_64-Minimal-1511图文教程
  • 原文地址:https://www.cnblogs.com/Jadon97/p/7205015.html
Copyright © 2011-2022 走看看