题意:
有一个大小为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.\n",cnt); } }
时间: 2024-11-10 14:49:52