输入是严格的前序序列,若某一节点缺失就是白色的,所以只用前序序列就可以把树唯一的建起来;
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const double epos=1e-8;
const int maxn=400;
char s[maxn];
int f[32][32];
int res;
int n;
int i;
//r,c为左上角;
void build(int r,int c,int l){
if(i>n) return ;
char x=s[i];
++i;
if(x=='p'){
build(r,c+l/2,l/2);
build(r,c,l/2);
build(r+l/2,c,l/2);
build(r+l/2,c+l/2,l/2);
}
else if(x=='f'){
for(int j=r;j<r+l;++j)
for(int k=c;k<c+l;++k)
if(f[j][k]==0){
++res;
f[j][k]=1;
}
}
}
int main(){
int t;
scanf("%d",&t);
int len=32;
while(t--){
memset(f,0,sizeof(f));
scanf("%s",s);
n=strlen(s);
res=0;
i=0;
build(0,0,len);
scanf("%s",s);
n=strlen(s);
i=0;
build(0,0,len);
printf("There are %d black pixels.\n",res);
}
return 0;
}