码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 1686 Oulipo

时间:2015-08-18 16:18:36      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

还是不怎么理解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;
} 


版权声明:本文为博主原创文章,未经博主允许不得转载。

hdu 1686 Oulipo

标签:

原文地址:http://blog.csdn.net/zafkiel_nightmare/article/details/47753057

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!