2013-05-22 2 views
-2

어제 답변. 나는 포럼과 코멘트에서 모든 테스트 케이스를 시도했다. 유효한 해결책이 있거나 파일에있는 유일한 해결책입니까?SPOJ ABCD는 잘못된 나는 SPOJ 문제 ABCD를 해결했다

LOGIC :

  1. 이 ROW1에서 각 문자의 발생을 계산합니다. 디버그에 무엇을 모르고

    #include<stdio.h> 
    int i; 
    int main() 
    { 
        int n; 
        int counts[4] = {0}; 
        char row1[1000000], row2[1000000]; 
        scanf("%d", &n); 
        scanf("%s", row1); 
    
        while(row1[i]) 
        { 
        counts[row1[i] - 'A']++; 
        i++; 
        } 
    
        i = 0; 
        if(counts[0] < n && row1[i] != 'A') 
        { 
        row2[i] = 'A'; 
        counts[0]++; 
        } 
        else if(counts[1] < n && row1[i] != 'B') 
        { 
        row2[i] = 'B'; 
        counts[1]++; 
        } 
        else if(counts[2] < n && row1[i] != 'C') 
        { 
        row2[i] = 'C'; 
        counts[2]++; 
        } 
        else 
        { 
        row2[i] = 'D'; 
        counts[3]++; 
        } 
        i++; 
        while(i < (2 * n)) 
        { 
        if(counts[0] < n && row1[i] != 'A' && row2[i - 1] != 'A') 
        { 
         row2[i] = 'A'; 
         counts[0]++; 
        } 
        else if(counts[1] < n && row1[i] != 'B' && row2[i - 1] != 'B') 
        { 
         row2[i] = 'B'; 
         counts[1]++; 
        } 
        else if(counts[2] < n && row1[i] != 'C' && row2[i - 1] != 'C') 
        { 
         row2[i] = 'C'; 
         counts[2]++; 
        } 
        else 
        { 
         row2[i] = 'D'; 
         counts[3]++; 
        } 
    
        i++; 
    } 
    row2[i] = '\0'; 
    printf("%s", row2); 
    return 0; 
    } 
    

    내가 시간 동안 디버깅 봤는데 :

  2. 채우기

내 코드는 < N. 카운트 위 캐릭터에게 또한 왼쪽 문자를 확인 하나 하나 ROW2 . SPOJ 포럼조차도 해결책을 찾지 못했습니다.

+3

스택 오버플로는 디버거가 아닙니다. 특히 학교 경연 대회에는 적합하지 않습니다. –

답변

0

안녕하세요, 저는 똑같은 일을했고 WA도 받았습니다 : P 여기에이 논리의 문제가 있습니다.

출력 될 수있는이 테스트 케이스를 ABACAD을 시도해보십시오 BCDBDC