'e'. He was a member of the Oulipo group. A quote from the book:
'T's is not unusual. And they never use spaces.
'A','B', 'C', …, 'Z'} and two finite strings over that alphabet, a wordW and a text T, count the number of occurrences of W inT. All the consecutive characters of W must exactly match consecutive characters ofT. Occurrences may overlap.
- W, a string over {'A','B', 'C', …, 'Z'}, with 1 ≤ |W| ≤ 10,000 (here |W| denotes the length of the stringW).
- T, a string over {'A','B', 'C', …, 'Z'}, with |W| ≤ |T| ≤ 1,000,000.
W in the text T.
3BAPCBAPCAZAAZAZAZAVERDIAVERDXIVYERDIAN
130
#include <iostream>#include <cstdio>#include <cmath>#include <cstring>using namespace std;int next[10010],sum=0;void get_next(char *p){ int j,k,plen=strlen(p); memset(next,0,sizeof(next)); next[0]=-1; j=0; k=-1; while(j<plen) { if(k==-1||p[j]==p[k]) { j++; k++; next[j]=k; } else k=next[k]; }}void KMPMatch(char *s,char *p){ int i=0,j=0,slen=strlen(s),plen=strlen(p); get_next(p); while(i<slen) { if(j==-1||s[i]==p[j]) { i++; j++; } else { j=next[j]; } if(j==plen) sum++,j=next[j]; }}int main(){ char S[10010],T[1000100]; int n; scanf("%d",&n); while(n-- ) { scanf("%s%s",S,T); sum=0; KMPMatch(T,S); printf("%d\n",sum); } return 0;}