Getting WA for SPOJ smpseq

Getting WA for SPOJ smpseq

本文关键字:smpseq SPOJ for WA Getting      更新时间:2023-10-16

这是问题的链接:http://www.spoj.com/problems/SMPSEQ3/

我每次都得到WA,尽管代码适用于我尝试过的所有测试用例

请给我一个提示。我是的初学者

这是我的密码。

#include<iostream>
using namespace std;
int main()
{
    int n, m;
    bool check;
    int cnt=0;
    cin >> n;
    int s[n];
    int c[n];
    for(int i = 0; i < n; i++)
        cin >> s[i];
    cin >> m;
    int q[m];
    for(int i = 0; i < m; i++)
        cin >> q[i];
    for(int i = 0; i < n; i++)
    {
        check = false;
        int j = 0;
            while(q[j] <= s[i])
            {
                if(q[j] == s[i])
                    check = true;
                j++;
            }
            if(check == false)
            {
                c[cnt] = s[i];
                cnt++;
            }
    }
    for(int i = 0; i < cnt; i++)
        cout << c[i] << " ";
    return 0;
}

您的代码失败是因为您没有检查j的值,无论它是否小于m,您只需继续递增它,直到达到q[j] <= s[i]的值。因此,当您的jwhile循环中变成m时,您实际上正在访问未分配给您的内存,并且存储了一些垃圾值。由于垃圾值可以是任何东西,您最终可能会错过q[]中的一些值,这些值应该添加到c[]中。

因此,您的while条件应如下所示::

while(j < m && q[j] <= s[i])

我想这会给你一个AC

每次进入for循环时,还需要初始化j = 0,这是没有用的。由于在问题中给出了两个序列都是排序的,因此考虑序列::

S=a,b,c,d。

Q=aa、bb、cc、dd。

因此,如果aa < abb > a是这样,那么在第一次迭代中,j会停在bb。所以,现在当i出现在S中的b时,由于a > aab >= a(S是排序序列),所以b > aa也是。因此,您不需要在每次迭代开始时初始化j = 0,这将节省浪费的计算。您只需要在main的开头初始化j = 0

此外,您不需要将结果保存在新的数组中,只需打印即可,当您遇到check == false时,这样可以节省一些空间。