ZOJ3643 Keep Deleting

来源:互联网 发布:浙大教务网络管理系统 编辑:程序博客网 时间:2024/05/19 03:25

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 10000char 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;}


原创粉丝点击