ENCODING 문제 시간초과가 계속 발생하는데 원인을 못찾고 있습니다. 도와주세요.

  • rapguy
    rapguy

    안녕하세요. DECODE 문제는 금방 풀었는데, ENCODING 문제에서 시간초과가 나오는데 제 눈으로는 왜 시간초과가 나오는지 찾지 못하고 있어서 도움요청드립니다.
    복잡한 문제도 아닌데 원인을 못찾겠습니다.TT

    https://algospot.com/judge/problem/read/ENCODING

    #include <stdio.h>
    #include <string.h>
    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;
    }
    


    10년 전
1개의 댓글이 있습니다.
  • Being
    Being

    음... 문제에 잘 드러났는지는 모르겠습니다만 "text string"의 길이가 0일 수도 있습니다.


    10년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.