poj 3461 Oulipo

和hihocoder一样的一道题。。

不过G++超时,也不是很懂。。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<vector>
#include<string>
using namespace std;
string a,b;
vector<int>next;
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        a.clear();
        b.clear();
        next.clear();
        cin>>a>>b;
        int lena=a.size();
        int lenb=b.size();
        next.push_back(-1);
        int i=0;
        int j=next[0];
        while(i<lena)
        {
            if(j==-1||a[i]==a[j])
            {
                i++;
                j++;
                next.push_back(j);
            }
            else
            {
                j=next[j];
            }
        }
        i=0;
        j=0;
        int ans=0;
        while(i<lenb)
        {
            if(j==-1||b[i]==a[j])
            {
                i++;
                j++;
            }
            else
            {
                j=next[j];
            }
            if(j==lena)
            {
                ans++;
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}

你可能感兴趣的:(KMP,poj)