很不好的消息,银狼所有的桥都被封掉了
她一款一款游戏的登录,但是她忘了游戏名都有什么
只好写出一个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帮我条题
标签:ch,游戏,错误,1.3,int,Next,++,&&,若智 From: https://www.cnblogs.com/LuoTianYi66ccff/p/17832113.html