Я работаю над проблемой в онлайн-судье (ссылка here), и каждый раз, когда я отправляю свое решение, я получаю вердикт ошибки во время выполнения. Я смотрел на него какое-то время, я все еще не могу понять, что с ним не так. Я также рассмотрел типичные причины ошибки времени выполнения (массивы из связей, предел памяти превышен, логические ошибки ... ect). Я не могу найти ни одного из них в приведенном ниже кодексе:C: Runtime Error Verdict (Help debugging)
#include<stdio.h>
int Hall[110][110];
int isValid(int x, int y){
int i,j,cnt=0;
for(i=x-1; i<=x+1; i++)
for(j=y-1; j<=y+1; j++)
if(Hall[x][y]==Hall[i][j])
cnt++;
if(cnt>1)
return 0;
else
return 1;
}
int notChecked(int N,int* checked,int size){
int i;
for(i=0; i<size; i++)
if(checked[i] == N)
return 0;
return 1;
}
int main (void){
int T,R,C,checked[110],i,j,k,size;
scanf("%d",&T);
for(i=0; i<T; i++){
scanf("%d %d",&R,&C);
//initialize
size=0;
for(j=0; j<R*C; j++) checked[j] = -1;
for(j=0; j<=C+1; j++){
Hall[0][j] = -1;
Hall[R+1][j] = -1;
}
for(j=0; j<=R+1; j++){
Hall[j][0] = -1;
Hall[j][C+1] = -1;
}
//read input
for(j=1; j<=R; j++)
for(k=1; k<=C; k++)
scanf("%d",&Hall[j][k]);
//algo:
for(j=1; j<=R; j++)
for(k=1; k<=C; k++)
if(Hall[j][k]>=0){
if(notChecked(Hall[j][k],checked,size)){
if(isValid(j,k)==0){
checked[size] = Hall[j][k];
size++;
}
}
}
printf("%d\n",size);
}
return 0;}
Любая помощь очень ценится!
Что произойдет, если вы запустите его самостоятельно и с каким вводом? – dbush
@dbush Он работает довольно хорошо. Я попробовал ввод, предложенный на странице проблемы, и сам придумал угловые тестовые примеры, такие как сетка с одной ячейкой (вывод должен быть 0), все ячейки сетки содержат -1 (вывод 0) ... Не пробовали максимальный размер ввода. – Njw96
'int checked [110] ... для (j = 0; j 'checked [j]' вне границ? –
chux