标签:string 50010 int 家谱 祖先 1388 默认值 gen
http://ybt.ssoier.cn:8088/problem_show.php?pid=1388
方法一:普通模拟,时间复杂度O(50000*1000)只能拿40分
1 #include<bits/stdc++.h> 2 using namespace std; 3 string s; 4 string pep[50010];//存放名字 5 int fa[50010];//记录他的祖先,默认值为0时本人就是祖先 6 7 int main() 8 { 9 int i=0; 10 int f=-1; 11 while(1){ 12 cin>>s; 13 if(s.length()==1 && s=="$")break;//结束条件 14 if(s[0]=='#'){//如果是父亲 15 int t=0; //判断是否已经存在 16 for(int j=1; j<=i; j++){//从家谱中找 17 if(pep[j]==s.substr(1)){ 18 t=j; break; 19 } 20 } 21 if(!t){//如果不在家谱中,插入 22 i++; 23 pep[i]=s.substr(1); 24 f=i; 25 } 26 else//在家谱中,记录他的位置下标 27 f=t; 28 } 29 if(s[0]=='+'){//如果是孩子 30 i++; 31 pep[i]=s.substr(1);//插入到家族 32 // cout<<i<<":"<<pep[i]<<endl; 33 while(fa[f])f=fa[f];//寻找这个孩子的祖先 34 fa[i]=f;//标记祖先下标 35 } 36 if(s[0]=='?'){ 37 38 int t; 39 cout<<s.substr(1)<<" "; 40 for(int j=1; j<=i; j++){//查找存储下标 41 if(pep[j]==s.substr(1)){ 42 t=j; break; 43 } 44 } 45 if(fa[t]==0)cout<<pep[t]<<endl;//如果祖先是0说明就是祖先 46 else cout<<pep[fa[t]]<<endl;//否则输出祖先 47 } 48 } 49 return 0; 50 }
方法一:
标签:string,50010,int,家谱,祖先,1388,默认值,gen 来源: https://www.cnblogs.com/tflsnoi/p/14250572.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。