uva 297 - Quadtrees

 
题意记不太清楚了,不过貌似比较水,无论是数据还是算法
 
#include<iostream>

#include<cstdlib>

#include<cstdio>

using namespace std;

typedef struct _node node;

struct _node

{

    int st;

    node *son[4];

};

int sum;

char s1[10005],s2[10005];

char *p;

node* tree()

{

    node* root=(node*)malloc(sizeof(node));

    root->st=0;

    if(*p=='p')

    {

        for(int i=0;i<4;i++)

        {

            ++p;

            root->son[i]=tree();

        }

    }

    else

    {

        if(*p=='f')

        root->st=1;

        for(int i=0;i<4;i++)

        root->son[i]=NULL;

    }

    return root;

}

void dfs(node *root1,node *root2,int cur)

{

    if(root1==NULL&&root2==NULL)

    return ;

    if(root1==NULL)

    {

        if(root2->st)

        {

            sum+=(1024>>(2*cur));

            return;

        }

        for(int i=0;i<4;i++)

        dfs(root1,root2->son[i],cur+1);

        return ;

    }

    if(root2==NULL)

    {

        if(root1->st)

        {

            sum+=(1024>>(2*cur));

            return;

        }

        for(int i=0;i<4;i++)

        dfs(root1->son[i],root2,cur+1);

        return ;

    }

    if(root1->st||root2->st)

    {

        sum+=(1024>>(2*cur));

        return;

    }

    for(int i=0;i<4;i++)

        dfs(root1->son[i],root2->son[i],cur+1);

}



int main()

{

    int T;

    cin>>T;

    while(T--)

    {

        cin>>s1;

        cin>>s2;

        p=s1;

        node *root1=tree();

        p=s2;

        node *root2=tree();

        sum=0;

        dfs(root1,root2,0);

        printf("There are %d black pixels.\n",sum);

    }

    return 0;

}

 

你可能感兴趣的:(dtree)