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

     1 #include <iostream>
     2 #define black 'f'
     3 #define white 'e'
     4 #define grey 'p'
     5 using namespace std;
     6 struct node{
     7     char type;
     8     node* upper_r;
     9     node* upper_l;
    10     node* lower_l;
    11     node* lower_r;
    12 };
    13 node* build_tree(){
    14     node* root = new node;
    15     cin >> root->type;
    16     root->upper_l = root->upper_r = root->lower_l = root->lower_r = NULL;
    17     if(root->type == grey){
    18         root->upper_r = build_tree();
    19         root->upper_l = build_tree();
    20         root->lower_l = build_tree();
    21         root->lower_r = build_tree();
    22     }
    23     return root;
    24 }
    25 int fun(node* a,node* b,int p){ // p 为边长 , 表示当前处理的子方格边长
    26     if(a->type == black || b->type == black){ // 有黑
    27         return p * p;
    28     }else if(a->type == white && b->type == white){ // 全白
    29         return 0;
    30     }else if(a->type == white){ // 白灰
    31         return fun(b,b,p);
    32     }else if(b->type == white){ // 灰白
    33         return fun(a,a,p);
    34     }else{ // 灰灰
    35         int sum = 0;
    36         sum += fun(a->upper_r,b->upper_r,p>>1);
    37         sum += fun(a->upper_l,b->upper_l,p>>1);
    38         sum += fun(a->lower_l,b->lower_l,p>>1);
    39         sum += fun(a->lower_r,b->lower_r,p>>1);
    40         return sum;
    41     }
    42 }
    43 int main(){
    44     int t;
    45     cin >> t;
    46     while(t--){
    47         cin.get();
    48         node* a = build_tree();
    49         cin.get();
    50         node* b = build_tree();
    51         int ans = fun(a,b,32);
    52         cout << "There are " << ans <<" black pixels." << endl;
    53     }
    54     return 0;
    55 }

    题目不难,考查递归的基本应用和细节。

    另外,本题使用宏定义能够让代码逻辑更加清晰。

    ---- suffer now and live the rest of your life as a champion ----
  • 相关阅读:
    Nowcoder9981A.串(排列组合)
    267D.Fedor and Essay(强连通分量缩点+DAG上DP)
    1290C. Prefix Enlightenment(带权并查集)
    LeetCode1. 两数之和
    LeetCode451. 根据字符出现频率排序
    LeetCode205. 同构字符串
    LeetCode290. 单词规律
    LeetCode202. 快乐数
    LeetCode242. 有效的字母异位词
    LeetCode136. 只出现一次的数字
  • 原文地址:https://www.cnblogs.com/popodynasty/p/12539721.html
Copyright © 2011-2022 走看看