原题地址:http://codeforces.com/contest/1016/problem/B
题意:给出一个长度为n的字符串,和长度为m子串,进行q次查询,每次查询给出一个区间,求出每个区间里共有几个子串。
介绍一个神器——substr()函数;使用方法如下:
头文件:#include<string>
string s="012345678";
string s1;
s1=s.substr(3,5);
s1的输出结果为:s1="345";
该函数可以提取字符串特定区间内的子串,很实用。
代码:
#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;
}