标签:
搞了半天才理解题目的意思,以为是拓展KMP,没想到普通的KMP也可以做,无语
#include<iostream> #include<map> #define maxn 100010 using namespace std; string a,b,c; int nextt[maxn]; map<char,char>mapp; void change() { mapp.clear(); for(int i=0;i<a.size();i++) { mapp[a[i]]='a'+i; } } void get_next() { nextt[0]=-1; int l=0,k=-1; while(l<c.size()) { if(k==-1||c[l]==c[k]) nextt[++l]=++k; else k=nextt[k]; } } int solve() { int j=(b.size()+1)/2,i=0; int flag=j; while(j<b.size()) { if(b[j]==c[i]||i==-1) i++,j++; else i=nextt[i]; } //cout<<c<<"~"<<i<<endl; return i; } int main() { cin.sync_with_stdio(false); int t; cin>>t; while(t--) { cin>>a>>b; change(); c=""; for(int i=0;i<b.size();i++) c+=mapp[b[i]]; get_next(); int flag=solve(); cout<<b<<c.substr(flag,b.size()-2*flag)<<endl; } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/zafkiel_nightmare/article/details/47814383