我目前正在解决此问题: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");
}
}
指导我我所缺少的东西