【问题标题】:Unordered_set not working on codechef ide [closed]Unordered_set 不适用于 codechef ide [关闭]
【发布时间】:2019-01-05 14:52:55
【问题描述】:

“unordered_set”在 codechef 上无法正常工作并在其在线 ide 上给出错误的输出,而我在 geeksforgeeks ide 和 codeblocks 上得到正确的输出 对于像 3 2 10 1 100 4 3 这样的输入,我在代码块和 geeksforgeeks 中得到了 4 行,因为 n+m-1 是 4,而我在 codechef 中只有 2 行,这可能是背后的原因,现在它将如何工作在 codechef 上?

#include<stdio.h>
#include<bits/stdc++.h>
#include<unordered_set>
using namespace std;
int main()
{
int n,m,c=0,d,i,j,sum;
int a[10000];
int b[10000];
unordered_set <int> s;
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
    scanf("%d",&a[i]);
for(i=0;i<m;i++)
    scanf("%d",&b[i]);
for(i=0;i<n;i++)
{
    for(j=0;j<m;j++)
    {
        sum=a[i]+b[j];
        if(s.find(sum)==s.end())
        {
            s.insert(sum);
            printf("%d %d\n",i,j);
            c++;
        }
        if(c>=(n+m-1))
            {d=1;break;}
    }
    if(d==1)
        break;

}
}

【问题讨论】:

  • 像 Codechef 这样的竞赛网站的一个问题是它不会告诉你程序的输入。这使得调试它非常困难。这样的网站也非常不利于教授编程和语言,他们真正教的只是如何擅长这样的网站而不是更多(除了养成像including bits/stdc++.h这样的坏习惯)。
  • 如果你想成为一名优秀的 C++ 程序员,here's a curated list of good books to read
  • 建议 -- 如果您要从在线编码网站发布尝试,并且您知道导致问题的输入,请发布代码将输入硬编码到程序中。不需要scanf 调用——只需用程序中的数据填充数组或变量。这使您可以更轻松地获取代码、编译、运行并查看结果。没有人会每次都必须不断地输入已知数据。
  • 以上也方便你调试。几乎不费吹灰之力,您就可以在调试器中使用完全相同的输入一遍又一遍地运行程序,直到您破解案例为止。
  • 如果您使用描述性变量名称,您可能会发现调试更容易。当您只使用一个字母时,不仅将偶然的拼写错误从编译器错误转变为逻辑错误要容易得多,而且当您的大脑在 q 中替换为 r 时真的很糟糕,因为这是它所期望的在查看代码以查找错误时阅读。

标签: c++ set unordered-set


【解决方案1】:

通过访问未初始化变量 d 的值,您的程序表现出未定义的行为。

【讨论】:

    猜你喜欢
    • 2010-09-18
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    相关资源
    最近更新 更多