好贷网好贷款

hdu 3786 寻找直系亲属

发布时间:2016-12-5 8:34:37 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"hdu 3786 寻找直系亲属",主要涉及到hdu 3786 寻找直系亲属方面的内容,对于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; } } } } }

上一篇:百度笔试题:malloc/free与new/delete的区别
下一篇:Linux FAQ and Tips

相关文章

相关评论