Submission #18036

#TimeUsernameProblemLanguageResultExecution timeMemory
18036gs13068여왕벌 (KOI15_queen)C11
0 / 100
5000 ms54668 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...