原题地址:http://codeforces.com/contest/1016/problem/B

题意:给出一个长度为n的字符串,和长度为m子串,进行q次查询,每次查询给出一个区间,求出每个区间里共有几个子串。

介绍一个神器——substr()函数;使用方法如下:

头文件:#include<string>

string s="012345678";

string s1;

s1=s.substr(0,3);    //获取字符串第0位开始之后长度为3的字符串

 

s1的输出结果为:s1="012";

 该函数可以提取字符串特定区间内的子串,很实用。

代码:

#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int s[1005];
int main()
{
	int l1,l2,n,m,i,a,b,num;
	string s1,s2;
	memset(s,0,sizeof(s));
	cin>>l1>>l2>>n;
	cin>>s1>>s2;
	for(i=0;i<=l1-l2;i++)            //提前查找出所有子串的位置,以防查询次数过多导致超时
		if(s1.substr(i,l2)==s2)
			s[i]=1;
	while(n--)
	{
		num=0;
		cin>>a>>b;
		for(i=a-1;i<=b-l2;i++)
			if(s[i])
				num++;
		cout<<num<<endl;
	}
	return 0;
}