uva297

来源:互联网 发布:残疾人人口基础数据库 编辑:程序博客网 时间:2024/05/19 23:28

题目描述:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=19243

//其实就是四叉树的构建,在构建过程中求解#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 1024 + 10;char str[maxn];int flag[32][32], cnt;      //flag用来做标记,因为两张图加一起时有些部分可能重叠,求结果不能重复计算重叠的部分void draw(const char* s, int &p, int r, int c, int w) {    //根据s创建一个以(r, c)为顶点,w为宽的正方形,用p来记录读到s的什么位置    char ch = s[p++];    if(ch == 'p') { //如果读到一个父节点,则递归求之        draw(s, p, r,           c,          w/2);      //分别递归四个正方形,注意边此时变为一半        draw(s, p, r,           c+w/2, w/2);        draw(s, p, r+w/2,   c,          w/2);        draw(s, p, r+w/2,   c+w/2, w/2);    }    else if(ch == 'f') {        for(int i = r; i < r + w; i++)            for(int j = c; j < c + w; j++)                if(flag[i][j] == 0)      //没有重叠                {   flag[i][j] = 1;    cnt++;  }    }}int main(){    int T;    scanf("%d", &T);    while(T--) {        cnt = 0;        memset(flag, 0, sizeof(flag));        for(int i = 0; i < 2; i++) {            scanf("%s", str);            int p = 0;            draw(str, p, 0, 0, 32);        }        printf("There are %d black pixels.\n", cnt);    }    return 0;}
0 0
原创粉丝点击