题意:
输入两个单词的起始地址和一个正整数N(<=1e5),然后输入N行数据,每行包括一个五位数的字母地址,字母和下一个字母的地址。输出这两个单词的公共后缀首字母的地址,若无公共后缀则输出-1。
AAAAAccepted code:
1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 string a1,a2; 5 int n; 6 string s,nex; 7 char x; 8 map<string,string>mp; 9 map<string,int>m; 10 int main(){ 11 cin>>a1>>a2>>n; 12 for(int i=1;i<=n;++i){ 13 cin>>s>>x>>nex; 14 mp[s]=nex; 15 } 16 int cnt=0; 17 while(++cnt){ 18 if(cnt&1&&a1.size()==5){ 19 ++m[a1]; 20 if(m[a1]==2){ 21 cout<<a1; 22 return 0; 23 } 24 a1=mp[a1]; 25 } 26 else if(!(cnt&1)&&a2.size()==5){ 27 ++m[a2]; 28 if(m[a2]==2){ 29 cout<<a2; 30 return 0; 31 } 32 a2=mp[a2]; 33 } 34 if(a1.size()==2&&a2.size()==2){//不要使用a1.size()==a2.size()==2,尽管有些许样例可能如愿输出,实际上和想要的效果相差甚远,这样写先将a1的size和a2的size比较,相等即为1,不相等即为0,永远不会等于2 35 cout<<-1; 36 break; 37 } 38 } 39 return 0; 40 }