若智错误1.3

发布时间 2023-11-14 17:27:50作者: Vsinger_洛天依

很不好的消息,银狼所有的桥都被封掉了

她一款一款游戏的登录,但是她忘了游戏名都有什么

只好写出一个KMP模式匹配的板子去匹配游戏的名称,并且查询游戏名称在封禁名单里出现了几次

点击查看代码
#include<bits/stdc++.h>
#define lC q<<1
#define rC q<<1|1
#define int long long
#define INF 0x66ccff0712
#define endl "\n"
#define maxm 0x66ccff
#define maxn 0x6cf 
#define mid ((l+r)>>1)
#define void inline void
using namespace std;
inline int read(){
    int s = 0,w = 1;char ch = getchar();
    while(ch<'0'||ch>'9'){ if(ch == '-') w = -1;ch = getchar();}
    while(ch>='0'&&ch<='9'){ s = s*10+ch-'0';ch = getchar();}
    return s*w;
}
int Next[maxm],f[maxm],n,m,ans;
signed main(){
    freopen("1.in","r",stdin);
    freopen("1.out","w",stdout);
    n=read();
    while(n--){
        string a,b;
        cin>>a>>b;
        int N=a.size(),M=b.size();
        Next[1]=0;
        ans=0;
        for(int i=2,j=0;i<=N;i++){
            while(j>0 && a[i]!=a[j+1]) 
                j=Next[j];
            if(a[i]==a[j+1]) j++;
            Next[i]=j;
        }
        for(int i=1,j=0;i<=M;i++){
            while(j>0 && (j==N || b[i]!=a[j+1])) 
                j=Next[j];
            if(b[i]==a[j+1]) j++;
            f[i]=j;
            if(f[i]==n) ans++;
        }
        cout<<ans<<endl;
    }
}

明显,这个有问题

你看,银狼都看到崩坏星穹铁道被封禁了,居然输出的是\(0\)

只好继续检查问题出现在哪里了

emmm

她检查了很久都没检查出来

只好求助于人

成功得到了大佬的帮助

string 下标从零开始,但是她是从1开始访问的

她在main函数中加上了几行代码

a=' '+a;
b=' '+b;

好,这回肯定对了,提交!

然后她发现...

根据程序

VERDI这款游戏在AVERDXIVYERDIAN中出现了13次

事实上,一次都没有

那...问题在哪里呢?

经过几分钟的全盘检查,她发现了问题所在

if(f[i]==n) ans++;

中应该为f[i]==N

这回还不对?

没错,真的不对

现在输出文件只有0了

懵逼.jpg

再次询问大佬,原来是....越界了

真·越权访问

"我没有又哭又闹"

银狼莫名说了一句话

后记

感谢K8He帮我条题