ENCODING 문제 시간초과가 계속 발생하는데 원인을 못찾고 있습니다. 도와주세요. rapguy 안녕하세요. DECODE 문제는 금방 풀었는데, ENCODING 문제에서 시간초과가 나오는데 제 눈으로는 왜 시간초과가 나오는지 찾지 못하고 있어서 도움요청드립니다. 복잡한 문제도 아닌데 원인을 못찾겠습니다.TT https://algospot.com/judge/problem/read/ENCODING ~~~ c++ #include #include using namespace std; char inString[(21 * 21) / 5 + 1]; char outStrMap[21][21 + 1]; int outMap[21][21], out[21 * 21]; int main() { // if(freopen("infile_encoding.txt", "r", stdin) == NULL) return 0; int T, R, C, TC; scanf("%d", &T); TC = 1; while(T--) { scanf("%d %d ", &R, &C); gets(inString); int inLen = strlen(inString); int num, index = 0; for(int i = 0; i < inLen; i++, index += 5) { if(inString[i] == ' ') num = 0; else num = inString[i] - 0x40; out[index] = (num & 0x10) >> 4; out[index + 1] = (num & 0x8) >> 3; out[index + 2] = (num & 0x4) >> 2; out[index + 3] = (num & 0x2) >> 1; out[index + 4] = num & 0x1; } for(int y = 0; y < R; y++) { for(int x = 0; x < C; x++) outStrMap[y][x] = '0'; outStrMap[y][C] = 0; } memset(outMap, -1, sizeof(outMap)); int direction = 0; int i, cur_x = 0, cur_y = 0; index = 0; while(index < inLen * 5) { if(direction == 0) { for(i = 0; cur_x + i < C && outMap[cur_y][cur_x + i] == -1; i++) { outMap[cur_y][cur_x + i] = out[index++]; if(outMap[cur_y][cur_x + i] == 1) outStrMap[cur_y][cur_x + i] = '1'; } direction = 1; cur_x = cur_x + i - 1; cur_y++; } else if(direction == 1) { for(i = 0; cur_y + i < R && outMap[cur_y + i][cur_x] == -1; i++) { outMap[cur_y + i][cur_x] = out[index++]; if(outMap[cur_y + i][cur_x] == 1) outStrMap[cur_y + i][cur_x] = '1'; } direction = 2; cur_y = cur_y + i - 1; cur_x--; } else if(direction == 2) { for(i = 0; cur_x - i >= 0 && outMap[cur_y][cur_x - i] == -1; i++) { outMap[cur_y][cur_x - i] = out[index++]; if(outMap[cur_y][cur_x - i] == 1) outStrMap[cur_y][cur_x - i] = '1'; } direction = 3; cur_x = cur_x - i + 1; cur_y--; } else if(direction == 3) { for(i = 0; cur_y - i >= 0 && outMap[cur_y - i][cur_x] == -1; i++) { outMap[cur_y - i][cur_x] = out[index++]; if(outMap[cur_y - i][cur_x] == 1) outStrMap[cur_y - i][cur_x] = '1'; } direction = 0; cur_y = cur_y - i + 1; cur_x++; } } printf("%d ", TC++); for(int y = 0; y < R; y++) printf("%s", outStrMap[y]); printf("\n"); } return 0; } ~~~ 12년 전
1개의 댓글이 있습니다. Being 음... 문제에 잘 드러났는지는 모르겠습니다만 "text string"의 길이가 0일 수도 있습니다. 12년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
rapguy
안녕하세요. DECODE 문제는 금방 풀었는데, ENCODING 문제에서 시간초과가 나오는데 제 눈으로는 왜 시간초과가 나오는지 찾지 못하고 있어서 도움요청드립니다.
복잡한 문제도 아닌데 원인을 못찾겠습니다.TT
https://algospot.com/judge/problem/read/ENCODING
~~~ c++
#include
#include
using namespace std;
char inString[(21 * 21) / 5 + 1];
char outStrMap[21][21 + 1];
int outMap[21][21], out[21 * 21];
int main()
{
// if(freopen("infile_encoding.txt", "r", stdin) == NULL) return 0;
int T, R, C, TC;
scanf("%d", &T);
TC = 1;
while(T--)
{
scanf("%d %d ", &R, &C);
gets(inString);
int inLen = strlen(inString);
int num, index = 0;
for(int i = 0; i < inLen; i++, index += 5)
{
if(inString[i] == ' ') num = 0;
else num = inString[i] - 0x40;
out[index] = (num & 0x10) >> 4;
out[index + 1] = (num & 0x8) >> 3;
out[index + 2] = (num & 0x4) >> 2;
out[index + 3] = (num & 0x2) >> 1;
out[index + 4] = num & 0x1;
}
for(int y = 0; y < R; y++)
{
for(int x = 0; x < C; x++)
outStrMap[y][x] = '0';
outStrMap[y][C] = 0;
}
memset(outMap, -1, sizeof(outMap));
int direction = 0;
int i, cur_x = 0, cur_y = 0;
index = 0;
while(index < inLen * 5)
{
if(direction == 0)
{
for(i = 0; cur_x + i < C && outMap[cur_y][cur_x + i] == -1; i++)
{
outMap[cur_y][cur_x + i] = out[index++];
if(outMap[cur_y][cur_x + i] == 1) outStrMap[cur_y][cur_x + i] = '1';
}
direction = 1;
cur_x = cur_x + i - 1;
cur_y++;
}
else if(direction == 1)
{
for(i = 0; cur_y + i < R && outMap[cur_y + i][cur_x] == -1; i++)
{
outMap[cur_y + i][cur_x] = out[index++];
if(outMap[cur_y + i][cur_x] == 1) outStrMap[cur_y + i][cur_x] = '1';
}
direction = 2;
cur_y = cur_y + i - 1;
cur_x--;
}
else if(direction == 2)
{
for(i = 0; cur_x - i >= 0 && outMap[cur_y][cur_x - i] == -1; i++)
{
outMap[cur_y][cur_x - i] = out[index++];
if(outMap[cur_y][cur_x - i] == 1) outStrMap[cur_y][cur_x - i] = '1';
}
direction = 3;
cur_x = cur_x - i + 1;
cur_y--;
}
else if(direction == 3)
{
for(i = 0; cur_y - i >= 0 && outMap[cur_y - i][cur_x] == -1; i++)
{
outMap[cur_y - i][cur_x] = out[index++];
if(outMap[cur_y - i][cur_x] == 1) outStrMap[cur_y - i][cur_x] = '1';
}
direction = 0;
cur_y = cur_y - i + 1;
cur_x++;
}
}
printf("%d ", TC++);
for(int y = 0; y < R; y++) printf("%s", outStrMap[y]);
printf("\n");
}
return 0;
}
~~~
12년 전