标签:
#include<stdio.h> #include<string.h> const int MAXN = 2e5+7; const int oo = 1e9+7; const int mod = 10007; char s[MAXN], a[MAXN], pass[MAXN]; int next[MAXN]; void GetNext(char s[], int N) { int i=0, j=-1; next[0] = -1; while(i < N) { if(j==-1 || s[i]==s[j]) next[++i] = ++j; else j = next[j]; } } int main() { int T; scanf("%d", &T); while(T--) { int i, N, Mid; scanf("%s%s", s, a); for(i=0; s[i]; i++) { pass[ s[i]-‘a‘ ] = i+‘a‘; } N = strlen(a); Mid = (N+1)/2; for(i=0; i<Mid; i++) s[i] = pass[ a[i]-‘a‘ ]; s[i] = ‘*‘, s[i+1]=0; strcat(s, a+i); GetNext(s, N+1); Mid = N-next[N+1]; for(i=0; i<Mid; i++) { s[i] = a[i]; s[i+Mid] = pass[ a[i]-‘a‘ ]; } s[i+Mid] = 0; printf("%s\n", s); } return 0; }
Clairewd’s message - HDU 4300(next[]运用)
标签:
原文地址:http://www.cnblogs.com/liuxin13/p/4732661.html