Getting WA for SPOJ smpseq
Getting WA for SPOJ smpseq
这是问题的链接: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]
的值。因此,当您的j
在while
循环中变成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 < a
而bb > a
是这样,那么在第一次迭代中,j
会停在bb
。所以,现在当i
出现在S
中的b
时,由于a > aa
和b >= a
(S是排序序列),所以b > aa
也是。因此,您不需要在每次迭代开始时初始化j = 0
,这将节省浪费的计算。您只需要在main
的开头初始化j = 0
。
此外,您不需要将结果保存在新的数组中,只需打印即可,当您遇到check == false
时,这样可以节省一些空间。
相关文章:
- SPOJ 上的主生成器 PRIME1
- SPOJ中的运行时错误
- 代码在代码块上运行良好,但在 SPOJ 上无法运行
- 对于 spoj 的问题 TRT(对待奶牛)的 dp 的最佳方法是什么?
- 当我的代码工作正常时,为什么在SPOJ中遇到运行时(Sigabrt)错误
- TLE试图使用Dinic算法在SPOJ上求解Fastflow
- 如何提高主生成器 (SPOJ) 解决方案的效率
- 为什么我在SPOJ上为Buglife获得WA
- SPOJ 问题 ADDREV - 添加反转数字(考虑到我的代码,我得到了一个错误的答案,这很荒谬......
- BFS 方法中的 TLE for SPOJ AKBAR
- 在 spoj AP2 上弄错了
- 我在spoj-lastdig2中使用我的代码 - 重新访问的最后一位数字
- Spoj :ENIGMATH - PLAY WITH MATH
- SPOJ - Prime Path (PPATH)
- 最近一对SPOJ logN时间回答错误
- SPOJ FASTFLOW上的错误答案
- spoj http://www.spoj.com/problems/JULKA/
- 程序以计算2个数字之间的素数-SPOJ Quality2
- 解决SPOJ Diehard的正确方法是什么?
- Getting WA for SPOJ smpseq