• hdu 3786 寻找直系亲属


    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3786

    题目思路: 我们用p[i]=j 来表示 i 的孩子是j (因为一个parent只有一个孩子,但是一个孩子有两个parent不好形成对应)

    然后初始化为-1,这样如果遇到父母不清楚的(‘-’) 还是-1,一遇到就break掉,把count还原为0;  如果是家族树上存在的两个结点,那么一定可以通过这样知道他们相隔的代数,于是就可以知道相应的称谓  一堆if-else  比较考基本功

    代码:

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    
    int p[26];
    /*
    int chartoint(char  ch)
    {
        if(ch=='0')  return 0;
        else if(ch=='1')  return 1;
        else if(ch=='2')  return 2;
        else if(ch=='3')  return 3;
        else if(ch=='4')  return 4;
        else if(ch=='5')  return 5;
        else if(ch=='6')  return 6;
        else if(ch=='7')  return 7;
        else if(ch=='8')  return 8;
        else if(ch=='9')  return 9;
        else if(ch=='-')  return -1;
    
    }
    */
    int main()
    {
       int n,m;
       while(cin>>n>>m)
       {
           if(n==0&&m==0)  break;
           memset(p,-1,sizeof(p));
           char c;
           char p1;
           char p2;
    
           string s;
           for(int i=0;i<n;i++)
           {
              cin>>s;
              c=s[0];
              p1=s[1];
              p2=s[2];
    
             if(p1!='-') p[p1-'A']=c-'A';
             if(p2!='-') p[p2-'A']=c-'A';
    
           }
    
           char c1,c2;
           for(int i=0;i<m;i++)
           {
              cin>>s;
              c1=s[0];
              c2=s[1];
    
              int count1=0,count2=0;
              int target1=c1-'A';
              int target2=c2-'A';
              int cur=target1;
              while(cur!=target2)
              {
                 cur=p[cur];
                 if(cur==-1)
                 {
                     count1=0;
                     break;
                 }
    
                 else  count1++;
    
              }
    
              if(count1==0)
              {
                 cur=target2;
                  while(cur!=target1)
              {
                 cur=p[cur];
                 if(cur==-1)
                 {
                     count2=0;
                     break;
                 }
                 else count2++;
    
              }
    
    
              }
    
             if(count1==0&&count2==0)
            {
               cout<<'-'<<endl;
    
            }
    
            else if(count1!=0)
            {
                if(count1==1)  cout<<"parent"<<endl;
                else if(count1==2)  cout<<"grandparent"<<endl;
                else
                {
                   while(count1>=3)
                   {
                       cout<<"great-";
                       count1--;
                   }
    
                     cout<<"grandparent"<<endl;
    
                }
            }
    
            else if(count2!=0)
            {
                if(count2==1)  cout<<"child"<<endl;
                else if(count2==2)  cout<<"grandchild"<<endl;
                else
                {
                   while(count2>=3)
                   {
                       cout<<"great-";
                       count2--;
                   }
    
                     cout<<"grandchild"<<endl;
    
                }
            }
           }
       }
    }
    




  • 相关阅读:
    2014第2周四部署环境&买火车票
    2014第2周三Web安全学习
    2014第2周二
    2014第2周一
    2013第一周日小结
    2013第1周六意外加班到很晚
    2014第一周五开发问题记URL传参乱码等
    XML文档形式&JAVA抽象类和接口的区别&拦截器过滤器区别
    通过WriteProcessMemory改写进程的内存
    【java】Windows7 下设置环境变量
  • 原文地址:https://www.cnblogs.com/814jingqi/p/3310426.html
Copyright © 2020-2023  润新知