C代码在ideone上正常运行,但在使用spoj时运行WA

时间:2014-06-22 05:41:51

标签: c

http://www.spoj.com/problems/MORENA/ 对于测试用例,在spoj中获取WA,否则在ideone上运行正常。任何的想法? 早些时候我用java写了这个,得到了NZEC。那么在C中写下这个。

#include<stdio.h>

int main(){

    int n,i;
    scanf("%d",&n);
    long num[n];
    for(i=0;i<n;i++){
        scanf("%ld",&num[i]);
    }

    int flag;
    int l;
    for(l=0;l<n;l++){
        if(num[l+1] > num[l]){
            flag = 1;
            break;
        }
        else if(num[l+1] < num[l]){
            flag = 0;
            break;
        }
    }
    int count = 1,k;

    for(k =0; k<n-1; k++){
        if(flag){
            if (num[k+1] > num[k]){
                count++;
                flag = 0;
            }
            else if(num[k+1]==num[k]){
                flag = 1;
            }
            else if(num[k+1]<num[k]){
                //count++;
                flag=1;
            }
        }
        else{
            if(num[k+1] < num[k]){
                count++;
                flag = 1;
            }
            else if(num[k+1]==num[k]){
                flag = 0;
            }
            else if(num[k+1]>num[k]){
                //count++;
                flag = 0;
            }
        }
    }

    printf("%d",count);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

等什么,这里有很多问题。 这里有几个,第一个:

  int n,i;
  scanf("%d",&n);
  long num[n];

不可能(或者至少不可能)以某个变量的大小声明一个数组,通过这样做来使用malloc()

long* num = malloc(sizeof(long)*n);

另一个问题是你在第一个循环中越过数组的边界,这很奇怪,因为你在第二个循环中处理它:P 只需将for(l = 0 ; l < n ; l++)更改为for(l = 0 ; l < n-1 ; l++),就像在IF语句中使用数组l + 1元素一样,当l为n-1时,实际测试n-1个元素与第N个元素相比 - 这不是& #39; t在数组的边界。 除此之外,代码似乎还可以。

答案 1 :(得分:0)

这个问题与competitive programming有很强的联系。通常会显示一个问题,并且用户需要提交代码,该代码为online judge的测试输入提供预期输出,并且SPOJ是其中之一。实际上有样本输入和样本输出显示几乎所有问题。因此,您的代码将为ideone中问题的示例输入的示例输出中显示相同的输出,但您的代码在在线判断中会对大量数据进行测试,这将导致NZEC。