SPOJ:665 String it out

要求输出a最大几次方以后仍然是b的子串。

 

题目关键在子串判断上。几次方可以将某个字符重匹配几次。

 

没有想象的那么难。但比赛没有做出来还是反映了我实力不足。

 

 


 

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char a[500015]={0},b[500015]={0};
bool Judge(char *x,char *y,int n)
{
    int lx=strlen(x),ly=strlen(y);
    int pos=0,nn=0;
    for(int i=0;i<ly;++i)
    {
        if(pos<lx&&x[pos]==y[i])
        {
           nn++;
           if(nn==n)
           {
               pos++;
               nn=0;
           }
        }
    }
    if(pos==lx) return true;
    return false;
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s %s",a,b);
        int La=strlen(a),Lb=strlen(b);
        int ans=0;
        int n=Lb/La;
        for(int i=n;i>0;--i)
        if(Judge(a,b,i))
        {
            ans=i;break;
        }
        printf("%d\n",ans);
    }
    return 0;
}


你可能感兴趣的:(字符串)