Codechef中的约束

时间:2018-07-02 17:09:33

标签: c loops multidimensional-array constraints runtime

我目前正在解决此问题:https://www.codechef.com/problems/DISHLIFE

此问题中的输入格式如下(所有整数):

3(n)4(k)

3 1 2 3

2 1 3

2 1 2

在第2至第4行中,第一个数字表示该行中的元素数。让我们用p

表示这个数字

在约束中明确提到1 <= p <= k。

我想参加

1 2 3

1 3

1 2

作为二维数组。因此,我用a [n] [k]声明了这个数组。但是,当我这样做时,在某些测试案例中我得到了错误的答案或运行时错误。当我使用[n] [1000]时,我的代码可以正常工作。

以下是该问题的社论:https://discuss.codechef.com/questions/95658/dishlife-editorial?page=1#130775  如社论中所述,我采用的是二维数组a [n] [k],其大小为n * k,因为列数为Pi并且Pi <= K。请阅读代码的约束和输入部分:codechef.com/problems/DISHLIFE但是,当我提交问题时,在8个测试用例中有2个遇到运行时错误和错误答案。而不是a [n] [k],当我声明a [n] [1000]时,我的代码被接受。我只想知道为什么a [n] [k]会导致运行时错误,因为矩阵中的列数永远不会大于k

这是我的代码(如果有人感兴趣的话):

trasform: rotate

我还看到了一个代码,其中甚至a [n] [20]都运行得很好。这是代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    long t,n,k,i,j,s,all,some,sad;
    scanf("%ld",&t);
    while(t--){
        long temp;
        sad=all=some=0;
        scanf("%ld%ld",&n,&k);
        int a[k+1],matrix[n][k],size[n];
        for(i=1;i<=k;i++)
        a[i]=0;
        for(i=0;i<n;i++){
            scanf("%ld",&s);
            size[i]=s;
            for(j=0;j<s;j++){
            scanf("%ld",&matrix[i][j]);
            temp=matrix[i][j];
            a[temp]++;
        }
        }
        for(i=1;i<=k;i++)
        if(!a[i])
        sad=1;
        if(sad==1){
            printf("sad\n");
            continue;
        }

        for(i=0;i<n;i++){
            for(j=0;j<size[i];j++){
            temp=matrix[i][j];
            if(a[temp]==1){
            all++;
            break;
            }
        }
        }
        if(all==n)
        printf("all\n");
        else
        printf("some\n");

}

}

指导我我所缺少的东西

0 个答案:

没有答案