Codechef-Chef和他的序列

时间:2016-09-01 14:30:28

标签: c++ arrays algorithm loops

我正在尝试解决以下问题。

链接到问题: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;
}

1 个答案:

答案 0 :(得分:0)

在循环中

    for (l = 0; l < m; l++)

j可能会大于n,从而导致对p的越界访问。这会导致不确定的行为;所有的赌注都已关闭。