ACM 2009. 6. 2. 21:04
반응형

I got accept from Judge Server.

----------------------------------------------------------------------------------------------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <stdio.h>
#include <string.h>
 
#define MAX_CHAR    85    
#define MAX_LINE    101
#define PLAIN_TEXT    44
#define ALPHABET    26    
 
char replaceTable[ALPHABET];
char plainText[PLAIN_TEXT] = "the quick brown fox jumps over the lazy dog";
 
int makeReplaceTable(char inputText[PLAIN_TEXT]);
void changeInputLine(char inputText[]);
void initTable(void);
 
int main(void)
{
    int caseNum, lineNum=0, i=0, success=0, size=0;
    char inputLine[MAX_LINE][MAX_CHAR];
 
 
    scanf("%d\n", &caseNum);
    do {
        lineNum=0;
        success=0;
        caseNum--;
        while( gets(inputLine[lineNum]) && strlen(inputLine[lineNum]) )
        {
            lineNum++;
        }
 
        
        if( lineNum >= MAX_LINE ) 
        {
            lineNum = MAX_LINE-1;
        }
 
        for(i=0; i<lineNum; i++)
        {
            if( strlen(inputLine[i]) == strlen(plainText) )
            {
                if( makeReplaceTable(inputLine[i]) )
                {
                    success = 1;
                    break;
                }
            }
        }
 
        if( !success )
        {
            printf("%s\n", "No solution.");
        }
        else 
        {
            for(i=0; i<lineNum; i++)
            {
                changeInputLine(inputLine[i]);
                printf("%s\n", inputLine[i]);
            }
        }
 
        if( caseNum != 0 )
            printf("\n");
 
    } while(caseNum>0);
 
    return 0;
}
 
int makeReplaceTable(char inputText[PLAIN_TEXT])
{
    int i, c;
 
    initTable();
 
    for(i=0; i<PLAIN_TEXT; i++)
    {
        if( inputText[i] >= 'a' && inputText[i] <= 'z' )
        {
            c = inputText[i]-'a';
            if( replaceTable[c] == '\0' )
            {
                replaceTable[c] = plainText[i];
            }
            else
            {
                if ( replaceTable[c] != plainText[i] )
                {
                    return 0;
                }
            }
        }
    }
    
    for(i=0; i<ALPHABET; i++)
    {
        if( replaceTable[i] < 'a' || replaceTable[i] > 'z' )
        {
            return 0;
        }
    }
    return 1;
}
 
void changeInputLine(char inputText[])
{
    int index, i;
    int size = strlen(inputText);    
 
    for(i=0; i<size; i++)
    {
        if( inputText[i] != ' ' )
        {
            if( inputText[i] >= 'a' && inputText[i] <= 'z' )
            {
                index = inputText[i]-'a';
                inputText[i] = replaceTable[index];
            }
        }
    }
}
 
void initTable(void)
{
    int i;
    for(i=0; i<ALPHABET; i++)
    {
        replaceTable[i] = '\0';
    }
}

반응형

'ACM' 카테고리의 다른 글

[Accept] 10006 Carmichael Numbers  (0) 2009.06.02
[Accept] 10110 Light, more light  (0) 2009.06.02
[Accept] 10132 File Fragmentation  (0) 2009.06.02
[Accept] 10099 - The Tourist Guide  (0) 2009.06.02
[Accept] 10099 - The Tourist Guide  (0) 2009.06.02
posted by ssuk1010
: