http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3643
题意:若A为B子串,则从B中删去A,重复直到A不再为B子串为止,输出次数。
题解:A串长度只有256而B非常长,所以用A来进行比较。B用栈来处理,每次入栈一个字符并比较,如果符合则将A长度的字符出栈。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <vector>
#include <iostream>
#include <algorithm>
#include<string>
using namespace std;
//const double eps=1e-7;
//const double INF=1e50;
//const double pi=acos(-1);
#define N 512005
#define M 10000
char a[N],b[N],c[N],l;
bool check(int m)
{
int i;
for (i=m-l+1;i<=m;i++)
if (c[i]!=a[i+l-m-1]) return false;
return true;
}
int main()
{
//freopen("a","r",stdin);
int sum,i,j,l2;
while (gets(a))
{
gets(b);
l=strlen(a);
l2=strlen(b);
sum=0;
for (i=0;i<l-1;i++) c[i]=b[i];
j=l-2;
for (i=l-1;i<l2;i++)
{
j+=1;
c[j]=b[i];
if (j>=(l-1) && check(j))
{
sum+=1;
j-=l;
}
}
printf("%d\n",sum);
}
return 0;
}