PKU_3461链接: http://acm.pku.edu.cn/JudgeOnline/problem?id=3461 TLE数次 这次虽然AC效率还是不咋滴,有待改进。。。。 //PKU_3461.cpp #include <string> #include <iostream> using namespace std; int size; int size1; int next[1000001]; void Get_next(string &s1,int *next){ //求NEXT数组 int i=0,j=-1;next[0]=-1; while(i<size1){ if(j==(-1)||s1[i]==s1[j]){ ++i; ++j; next[i]=j; } else j=next[j]; } } int Index_KMP(string &s,string &s1,int pos,int *next){ //KMP int i=pos-1; int j=-1;int sum=0; Get_next(s1,next); while(i<size){ if (j>=size1) { ++sum; --i; j=next[j-1]; } if(j==-1||s[i]==s1[j]){ ++i; ++j; } else j=next[j]; } if(j>=size1) ++sum; return sum; } int main(){ int i,sum=0; string s,s1; cin>>i; while(i--){ sum=0; cin>>s1; cin>>s; size=(int)(s.size()); size1=(int)(s1.size()); sum=Index_KMP(s,s1,0,next); cout<<sum<<endl; } return 0; }