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>
#include <stdlib.h>
int main(void) {
int M = 0; // 격자칸의 한 변의 길이
int days = 0;
int i = 0, j = 0, k = 0;
int** arr = NULL; // 둥지
char** rule = NULL; // 규칙
short **input = NULL; // 겉 애벌레의 성장 값(패킹)
char* inputUnpack = NULL; // 겉 애벌레의 성장 값(언패킹)
char* last = NULL; // 임시 변수
int a = 0, b = 0, c = 0; // 임시 변수
char temp = 0, temp2 = 0; // 임시 변수
char t; // 임시 변수
scanf("%d", &M);
arr = (int**)malloc(sizeof(int*) * M);
for (i = 0; i < M; i++) {
arr[i] = (int*)malloc(sizeof(int) * M);
for (j = 0; j < M; j++)
arr[i][j] = 1;
} // 격자 생성 및 초기화
last = (char*)malloc(sizeof(char) * (M - 1)); // 임시 변수 생성
scanf("%d", &days); // 날짜 입력
rule = (char**)malloc(sizeof(char*) * (M - 1) * (M - 1));
for (i = 0; i < (M - 1) * (M - 1); i++) {
rule[i] = (char*)malloc(sizeof(char) * 27 + 1);
scanf("%s", rule[i]); // 속 애벌레 성장 규칙을 저장하는 배열 생성 및 입력
}
input = (short**)malloc(sizeof(short*) * days);
for (i = 0; i < days; i++) {
input[i] = (short*)malloc(sizeof(short) * 3);
}
for (i = 0; i < days; i++) {
scanf("%hd %hd %hd", &input[i][0], &input[i][1], &input[i][2]);
} // 겉 애벌레 성장 값 입력(pack)
for (i = 0; i < days; i++) {
inputUnpack = (char*)malloc(sizeof(char) * (2 * M - 1)); // 겉 애벌레의 성장 값을 저장하는 배열 생성(unpack)
j = 0;
for (k = 0; k < input[i][0]; k++)
inputUnpack[j + k] = 0;
j += input[i][0];
for (k = 0; k < input[i][1]; k++)
inputUnpack[j + k] = 1;
j += input[i][1];
for (k = 0; k < input[i][2]; k++)
inputUnpack[j + k] = 2;
for (j = 0; j < M; j++)
arr[M - 1 - j][0] += inputUnpack[j]; // 왼쪽 겉
for (k = 1; k < M; k++)
arr[0][k] += inputUnpack[j - 1 + k]; // 위쪽 겉
for (j = 1; j < M; j++) {
for (k = 1; k < M; k++) {
if (k == 1) {
a = inputUnpack[M - 1 - j];
b = inputUnpack[M - j];
if (j == 1)
c = inputUnpack[M - 1 + k];
else
c = last[k - 1];
}
else if (j == 1) {
a = temp2;
b = inputUnpack[M - 2 + k];
c = inputUnpack[M - 1 + k];
}
else {
a = temp2;
b = last[k - 2];
c = last[k - 1];
}
t = rule[(j - 1) * 3 + (k - 1)][a * 9 + b * 3 + c];
if (t == 'L') {
arr[j][k] += a;
temp = a;
}
else if (t == 'D') {
arr[j][k] += b;
temp = b;
}
else {
arr[j][k] += c;
temp = c;
}
if (k != 1)
last[k - 2] = temp2;
temp2 = temp;
}
last[k - 2] = temp2;
}
free(inputUnpack);
}
for (i = 0; i < M; i++) {
for (j = 0; j < M; j++)
printf("%d ", arr[i][j]);
printf("\n");
}
return 0;
}
# | 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... |