Oulipo



http://acm.hdu.edu.cn/showproblem.php?pid=1686

#include<iostream>
#include<string>
using namespace std;
int next1[100002];
int mount;
void getnext(string s)
{
 int i=0,j=-1;
 next1[0]=-1;
 while(i<s.size())
 {
  if(j==-1 || s[i]==s[j])
  {
   i++;
   j++;
   next1[i]=j;
  }
  else
   j=next1[j];
 }
}
void match(string w,string t)
{
 int i=0,j=0;
 while(i<t.size())
 {
  if(j==-1 || t[i]==w[j])
   i++,j++;
  else
   j=next1[j];
  if(j==w.size())
  {
   mount++;
   j=next1[j];
  }
 }
}
int main()
{
// freopen("C:\\Users\\John\\Desktop\\hi.txt","r",stdin);
 int t1;
 string w,t;
 cin>>t1;
 while(t1--)
 {
  mount=0;
  cin>>w>>t;
  if(t.size()<w.size())
  {
   cout<<"0"<<endl;
   continue;
  }
  getnext(w);
  match(w,t);
  cout<<mount<<endl;
 }
 return 0;
}

阅读更多

扫码向博主提问

去开通我的Chat快问

shuangyueliao

非学,无以致疑;非问,无以广识
个人分类: KMP
上一篇亲和串
下一篇前m大的数
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭