【问题标题】:Why my code is giving wrong answer on SPOJ?为什么我的代码在 SPOJ 上给出错误答案?
【发布时间】:2014-05-18 11:21:16
【问题描述】:

问题:http://www.spoj.com/problems/TSORT/

以下代码在我的计算机上给出了正确的输出,但在 spoj 上给出了错误的答案。我已经尝试了几个输入,它给出了正确的输出。但仍然在 spoj 上显示错误答案。

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
  int t;
  cin>>t;
  cin.tie(0); 
  ios::sync_with_stdio(false);
  int *arr= new int[t];
  for(int i=0;i<t;i++)
  {
    cin>>arr[i];
  }
  sort(arr,arr+t);
  for(int i=0;i<t;i++)
  {
    cout<<"\n";
    cout<<arr[i];

  }

  return 0;

  }

【问题讨论】:

  • 是否显示错误答案或 TLE?
  • 它显示了错误的答案,但是在我将 cin.tie(0) 和 ios::sync_with_stdio(false) 放在 int t 之上之后,它被接受了。我还在想为什么?

标签: c++ sorting quicksort mergesort


【解决方案1】:

正如 Tejas 所说,在优化问题中不建议使用 cin 和 cout,因为它们比 scanf 和 printf 慢。扩展他的答案,您需要注意您使用的 STL sort 比 STL qsort 慢。考虑到这一点,我用 qsort 尝试了你的代码,我得到了 AC:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
using namespace std;
int a[1000008];
int compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}
int main()
{
    int n,i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    qsort(a,n,sizeof(int),compare);
    for(i=0;i<n;i++)
    printf("%d\n",a[i]);
    return 0;
}

int 函数 compare 是使用 qsort 所必需的。

更多信息:

http://www.cplusplus.com/reference/cstdlib/qsort/

http://www.cplusplus.com/reference/algorithm/sort/

【讨论】:

    【解决方案2】:

    如果您使用cout&lt;&lt;arr[i]&lt;&lt;endl;,它将提供 TLE 而不是 WA。所以这意味着它与新行有关。

    但是,如果您想让您的答案被接受,您必须使用 printf 和 scanf 而不是 cin、cout。在此类竞赛中总是建议使用 scanf 和 printf 来读取大量输入。

    我尝试了以下代码,它被接受了

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int a[1000008];
    int main()
    {
        int n,i;
        scanf("%d",&n);
        for(i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        sort(a,a+n);
        for(i=0;i<n;i++)
        printf("%d\n",a[i]);
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多