家谱处理 pta

来源:互联网 发布:mac需要重装系统吗 编辑:程序博客网 时间:2024/06/04 22:21
//可以用树处理
//可以用结构图处理
//重点处理 各种关系


#include<bits/stdc++.h>
using namespace std;

struct node
{
    char data[20];
    int num,parent;
} tree[1010];

int main()
{
    char name[1250],a[20];
    int n,m,l,x,k;
    scanf("%d %d",&n,&m);
    getchar();
    for(int i=0; i<n; i++)
    {
        gets(name);
        l=strlen(name);
        x=k=0;
        for(int j=0; j<l; j++)
        {
            if(name[j]==' ')
                x++;
            else
                a[k++]=name[j];
        }
        a[k]='\0';
        strcpy(tree[i].data,a);
        tree[i].num=x;
    }
    char w[10][20];
    while(m--)
    {
        for(int i=0; i<6; i++)
        {
            scanf("%s",w[i]);
        }
        int p,q,x1,x2;
        for(int i=0; i<n; i++)
        {
            if(strcmp(tree[i].data,w[0])==0)
            {
                p=tree[i].num;
                x1=i;
            }
            if(strcmp(tree[i].data,w[5])==0)
            {
                q=tree[i].num;
                x2=i;
            }
        }
        if(strcmp(w[3],"child")==0)
        {
            if(p-q==2&&x1>x2)
            {
                int z=0;
                for(int i=x2+1; i<=x1; i++)
                {
                    if(tree[i].num<=q)
                        z=1;
                }
                if(z)
                    printf("False\n");
                else
                    printf("True\n");
            }
            else
                printf("False\n");
        }
        else if(strcmp(w[3],"parent")==0)
        {
            if(q-p==2&&x1<x2)
            {
                int z=0;
                for(int i=x1+1; i<=x2; i++)
                {
                    if(tree[i].num<=p)
                        z=1;
                }
                if(z)
                    printf("False\n");
                else
                    printf("True\n");
            }
            else
                printf("False\n");
        }
        else if(strcmp(w[3],"sibling")==0)//xiongdi
        {
            if(p==q)
            {
                int z=0;
                if(x1>x2)
                {
                    z=x1;
                    x1=x2;
                    x2=z;
                }
                z=0;
                for(int i=x1; i<=x2; i++)
                {
                    if(tree[i].num<p)
                        z=1;
                }
                if(z)
                    printf("False\n");
                else
                    printf("True\n");
            }
            else
                printf("False\n");
        }
        else if(strcmp(w[3],"descendant")==0)//houdai
        {
            if(p-q>=2&&x1>x2)
            {
                int z=0;
                for(int i=x2+1; i<=x1; i++)
                {
                    if(tree[i].num<=q)
                        z=1;
                }
                if(z)
                    printf("False\n");
                else
                    printf("True\n");
            }
            else
                printf("False\n");
        }
        else if(strcmp(w[3],"ancestor")==0)//zuxian
        {
            if(q-p>=2&&x1<x2)
            {
                int z=0;
                for(int i=x1+1; i<=x2; i++)
                {
                    if(tree[i].num<=p)
                        z=1;
                }
                if(z)
                    printf("False\n");
                else
                    printf("True\n");
            }
            else
                printf("False\n");
        }
    }
    return 0;
}

0 0
原创粉丝点击