zoukankan      html  css  js  c++  java
  • hdu 1686 Oulipo

    还是不怎么理解KMP

    #include<iostream>
    #include<string>
    #define maxn 10010
    using namespace std;
    string s1,s2;
    int nextt[maxn];
    void kmp()
    {
    	nextt[0]=-1;
    	int l=0;
    	int k=-1;
    	while(l<s1.size())
    	{
    		if(k==-1||s1[l]==s1[k]) nextt[++l]=++k;
    		else k=nextt[k];
    	}
    }
    int solve()
    {
    	int sum=0;
    	int i=0,j=0;
    	while(j<s2.size())
    	{
    		if(i==-1||s1[i]==s2[j])
    		{
    			i++;j++;
    		}
    		else
    		{
    			i=nextt[i];
    		}
    		if(i==s1.size())
    		{
    			//cout<<i<<"!"<<j<<endl;
    			i=nextt[i];
    			//cout<<i<<"~"<<j<<endl; 
    			sum++;
    		}
    	}
    	return sum;
    }
    int main()
    {
    	cin.sync_with_stdio(false);
    	int t;
    	cin>>t;
    	while(t--)
    	{
    		cin>>s1>>s2;
    		if(s1.size()>s2.size())//不加会WA? 
    		{
    			cout<<"0"<<endl;
    			continue;
    		}
    		kmp();
    		cout<<solve()<<endl;
    	}
    	return 0;
    } 


  • 相关阅读:
    平时十二测
    无题十四
    暑假第十测
    无题十三
    noip错题集
    无题十二
    BZOJ整理
    志愿者招募
    修车
    任务安排
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7214500.html
Copyright © 2011-2022 走看看