题意: 输入两个单词的起始地址和一个正整数N(=1e5),然后输入N行数据,每行包括一个五位数的字母地址,字母和下一个字母的地址。输出这两个单词的公共后缀首字母的地址,若无
题意:
输入两个单词的起始地址和一个正整数N(<=1e5),然后输入N行数据,每行包括一个五位数的字母地址,字母和下一个字母的地址。输出这两个单词的公共后缀首字母的地址,若无公共后缀则输出-1。
代码:
#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
string a1,a2;
int n;
string s,nex;
char x;
map<string,string>mp;
map<string,int>m;
int main(){
cin>>a1>>a2>>n;
for(int i=1;i<=n;++i){
cin>>s>>x>>nex;
mp[s]=nex;
}
int cnt=0;
while(++cnt){
if(cnt&1&&a1.size()==5){
++m[a1];
if(m[a1]==2){
cout<<a1;
return 0;
}
a1=mp[a1];
}
else if(!(cnt&1)&&a2.size()==5){
++m[a2];
if(m[a2]==2){
cout<<a2;
return 0;
}
a2=mp[a2];
}
if(a1.size()==2&&a2.size()==2){//不要使用a1.size()==a2.size()==2,尽管有些许样例可能如愿输出,实际上和想要的效果相差甚远,这样写先将a1的size和a2的size比较,相等即为1,不相等即为0,永远不会等于2
cout<<-1;
break;
}
}
return 0;
}