This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <stdio.h>
#define MAX 100*100*100+10
int board[101][101][101];
int x1, y1, x2, y2, N, M, L;
int min = 99999;
typedef struct tomato{
int x; int y; int z;
int day;
}TOMATO;
TOMATO queue[MAX];
int head, tail;
int dx[6] = { 1, 0, -1, 0, 0, 0 };
int dy[6] = { 0, -1, 0, 1, 0, 0 };
int dz[6] = { 0, 0, 0, 0, 1, -1 };
void enqueue(int x, int y, int z, int day);
TOMATO dequeue();
TOMATO popped;
int main(){
int x, y, z, day, i, j, k, sum;
sum = 0; day = 0;
scanf("%d %d %d", &M, &N, &L);
for (k = 0; k < L; k++){
for (i = 0; i < N; i++){
for (j = 0; j < M; j++){
scanf(" %d", &board[k + 1][i + 1][j + 1]);
if (board[k + 1][i + 1][j + 1] == 1) enqueue(i + 1, j + 1, k +1 , 0);
}
}
}
while (head != tail){
popped = dequeue();
x = popped.x; y = popped.y; z = popped.z; day = popped.day;
for (i = 0; i < 6; i++){
if (!(x + dx[i] > 0 && x + dx[i] < (N + 1))) continue;
if (!(y + dy[i] > 0 && y + dy[i] < (M + 1))) continue;
if (!(z + dz[i] > 0 && z + dz[i] < (L + M))) continue;
if (board[z+dz[i]][x + dx[i]][y + dy[i]] == 1) continue;
if (board[z + dz[i]][x + dx[i]][y + dy[i]] == -1) continue;
if (board[z + dz[i]][x + dx[i]][y + dy[i]] == 0){
enqueue(x + dx[i], y + dy[i], z+ dz[i], day + 1);
}
}
}
min = day;
for (k = 0; k < L; k++){
for (i = 0; i < N; i++){
for (j = 0; j < M; j++){
if (board[k + i][i + 1][j + 1] == 0){
min = -1; break;
}
}
}
}
printf("%d", min);
return 0;
}
void enqueue(int x, int y, int z, int day){
tail++; tail %= MAX;
queue[tail].x = x; queue[tail].y = y; queue[tail].z = z; queue[tail].day = day;
board[z][x][y] = 1;
return;
}
TOMATO dequeue(){
head++; head %= MAX;
TOMATO out;
out.x = queue[head].x; out.y = queue[head].y; out.z = queue[head].z;
return out;
}
Compilation message (stderr)
cc.cpp: In function 'int main()':
cc.cpp:21:29: warning: variable 'sum' set but not used [-Wunused-but-set-variable]
int x, y, z, day, i, j, k, sum;
^~~
cc.cpp:23:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d %d", &M, &N, &L);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
cc.cpp:27:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf(" %d", &board[k + 1][i + 1][j + 1]);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |