以下是问题的链接:man page
我每次都会收到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;
}
答案 0 :(得分:0)
您的代码失败是因为您没有检查j
的值是否小于m
,您只需继续递增它,直到您达到{{1}的值为止}}。因此,当q[j] <= s[i]
在j
循环中变为m
时,您实际上正在访问未分配给您的内存,并且存储了一些垃圾值。由于垃圾值可以是任何值,您最终可能会遗漏while
中应添加到q[]
的某些值。
因此,您的c[]
条件应如下所示::
while
我认为这会给你一个AC。
每次进入while(j < m && q[j] <= s[i])
循环时,您都会初始化j = 0
一些内容,这是无用的。因为在问题中给出了两个序列都被排序,所以考虑序列::
S = a,b,c,d。 。 。
Q = aa,bb,cc,dd。 。
因此,考虑for
但aa < a
是否如此,在第一次迭代中,bb > a
停在j
。所以,现在bb
来自i
b
,S
和a > aa
(S是排序后的序列),b >= a
为b > aa
好。因此,您不需要在每次迭代开始时初始化j = 0
,这将为您节省浪费的计算。您只需在j = 0
开头{/ 1}}初始化main
。
此外,您不需要将结果保存在新数组中,只需打印它,当遇到check == false
时,这可以节省一些空间。