poj3167 奶牛模式 wa求解

求问一下 poj3167 奶牛pattern 我的代码出错在哪 试了很多数据还是wa

#include 
#include 
#include  
#include 
using namespace std;
const int N=1000010,K=30000;
int n,k,s,h,ans;
int s1[N],s2[K],s3[N][30],s4[K][30],a[N];
int nxt[K];
bool fun(int a,int b) //判断文本串和模式串是否匹配 
{
    int t1=0,t2=0,t3=0,t4=0;  
    for(int i=1;i<=s;i++)
    {
        if(i>=s1[a]) break;
        t1+=(s3[a][i]-s3[a-b][i]);//t1 文本串中第a个位置为终点,长度为 b的子串内比s1[a]小的个数。 
    }
    t2=(s3[a][s1[a]]-s3[a-b][s1[a]]);//t2 文本串中第a个位置为终点,长度为 b的子串内和s1[a]相等的个数。 
    for(int i=1;i<=h;i++)
    {
        if(i>=s2[b]) break;
        t3+=s4[b][i];//t3 模板串中前b个位置内比s2[b]小的个数。
    }
    t4=s4[b][s2[b]];//t4 模板串中前b个位置内和s2[b]相等的个数。
    if(t1==t3&&t2==t4) return true;
    else return false;
} 
bool ffun(int a,int b) //构造next数组 
{
    int t1=0,t2=0,t3=0,t4=0;
    for(int i=1;i<=h;i++)
    {
        if(i>=s2[a]) break;
        t1+=(s4[a][i]-s4[a-b][i]);
    }
    t2=s4[a][s2[a]]-s4[a-b][s2[a]];
    for(int i=1;i<=h;i++)
    {
        if(i>=s2[b]) break;
        t3+=s4[b][i];
    }
    t4=s4[b][s2[b]];
    if(t1==t2&&t3==t4) return true;
    else return false;
}
int main(void)
{
    scanf("%d%d%d",&n,&k,&s);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&s1[i]);
        s3[i][s1[i]]++;
    }
    for(int i=1;i<=k;i++)
    {
        scanf("%d",&s2[i]);
        h=max(s2[i],h);//求一下模板串中的最大值 
        s4[i][s2[i]]++;
    }
    for(int i=2;i<=n;i++)
    {
        for(int j=1;j<=s;j++)
        {
            s3[i][j]+=s3[i-1][j];//处理前缀和 
        }
    }
    for(int i=2;i<=k;i++)
    {
        for(int j=1;j<=h;j++)
        {
            s4[i][j]+=s4[i-1][j];//处理前缀和 
        }
    }
    for(int i=2,j=0;i<=k;i++)
    {
        while(j&&!ffun(i,j+1)) j=nxt[j];
        if(j==0||ffun(i,j+1)) j++;//j==0 成立 因为第一个数必定匹配 
        nxt[i]=j;
    }
    for(int i=1,j=0;i<=n;i++)
    {
        while(j&&!fun(i,j+1)) j=nxt[j];
        if(j==0||fun(i,j+1)) j++;
        if(j==k) 
        {
            a[ans++]=i-k+1;
            j=nxt[j];
        }
    }
    cout<0;i0;
} 

https://blog.csdn.net/m0_66603329/article/details/126353795

可以看一下

内存,时间是否有问题?