#include<stdio.h>
#include<string.h>
char s[2000];
int len=32;
int vis[32][32],ans; //数组用于标记是否染黑
void solve(char*s,int &p,int x,int y,int w){//当前正方形的左上角坐标为(x,y)
char ch=s[p++];//先赋值,再移动
if(ch=='p'){
solve(s,p,x+w/2,y, w/2);//右上角正方形
solve(s,p,x, y, w/2);//左上角正方形
solve(s,p,x, y+w/2, w/2);//左下角正方形
solve(s,p,x+w/2,y+w/2, w/2);//右下角正方形
}
else if(ch=='f'){
for(int i=x+1;i<=x+w;i++){
//由于上一层的处理,此处w即当前正方形的边界
//注意i,j初始值是点的坐标,将其+1视作染正方形左上角第1~x+w个像素
for(int j=y+1;j<=y+w;j++){
if(vis[i][j]==0){
vis[i][j]=1;
ans++;
}
}
}
}
}
int main(){
int t;
scanf("%d",&t);
while(t--){
memset(vis,0,sizeof(vis));
ans=0;
//每一组数据操作之前都要初始化
for(int i=1;i<=2;i++){
scanf("%s",s);
int p=0;//用于记录将要读取的字符串的下标
solve(s,p,0,0,len);
}
printf("There are %d black pixels.\n",ans);
}
return 0;
}
【树】[11.1]
猜你喜欢
转载自blog.csdn.net/weixin_45561591/article/details/102866205
今日推荐
周排行