【PAT甲级】1032 Sharing (25 分)

题意:

输入两个单词的起始地址和一个正整数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 }

 

 

 

posted @ 2019-09-11 23:31  sewage  阅读(170)  评论(0编辑  收藏  举报