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

  • User Avatar
    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개의 댓글이 있습니다.
  • User Avatar
    Being

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


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