我正在尝试解决以下问题。
链接到问题:problem link
问题: Chef有一系列N个数字。如果序列包含他最喜欢的序列作为子串,他更喜欢序列。
鉴于序列和他最喜欢的序列(F),检查序列中是否包含喜欢的序列
输入
第一行将包含测试用例的数量,然后是案例。 每个测试用例由四行组成:序列的长度,序列N,F的长度和序列F
输出
如果序列包含喜欢的序列,则打印“是”,否则打印“否”。
然而,我的回答是错误的。看看我的代码
代码:
#include<iostream>
using namespace std;
int check(int *p,int *q,int n,int m)
{
int i,j,l;
for(i=0;i<n;i++)
{
if(p[i]==q[0])
{
j=i;
for(l=0;l<m;l++)
{
if(q[l]==p[j])
j++;
else
break;
}
}
if(l==m)
return 1;
}
return 0;
}
int main(void)
{
int a,*p,*q,m,t,i,n;
cin>>t;
while(t--)
{
cin>>n;
p=new int[n];
for(i=0;i<n;i++)
cin>>p[i];
cin>>m;
q=new int[m];
for(i=0;i<m;i++)
cin>>q[i];
if(check(p,q,n,m)==1)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
return 0;
}
答案 0 :(得分:0)
在循环中
for (l = 0; l < m; l++)
j
可能会大于n
,从而导致对p
的越界访问。这会导致不确定的行为;所有的赌注都已关闭。