1016BSegment Occurrences
题意:给你字符串a,b,查询区间q,在每个查询区间内b出现的次数
分析:前缀数组
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
char a[1005],b[1005];
int t[1005],sum[1005];
int main()
{
int n,m,p,i,j,l,r;
while(~scanf("%d %d %d",&n,&m,&p))
{
memset(t,0,sizeof(t));
scanf("%s%s",a,b);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(a[i+j]!=b[j])
break;
else if(j==m-1)
t[i]=1;//b在a中有出现
}
}
sum[0]=t[0];
for(i=1;i<n;i++)
sum[i]=sum[i-1]+t[i];//统计前i个字符里b字符出现的次数
for(i=1;i<=p;i++)
{
scanf("%d %d",&l,&r);
l--,r--;
if(r-l+1<m||n<m)
{
printf("0\n");
}
else
{
printf("%d\n",sum[r-m+1]-sum[l-1]);//sum[r-m+1]表示t[i]=1,i=r-m+1;
}
}
}
return 0;
}