ACM
2009. 6. 2. 21:05
반응형
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 |
#include <stdio.h> #include <math.h> int main(void) { unsigned long number, i, light=OFF; unsigned long maxNum = (unsigned long)(pow((double)2,(double)32)-1); while( scanf("%u", &number) && number ) { if( number > maxNum ){ //printf("!!! %u\n", number); return 0; } light = (unsigned long)sqrt(number); if( light*light == number ) printf("yes\n"); else printf("no\n"); light = OFF; } return 0; } |
반응형
'ACM' 카테고리의 다른 글
[Time Limit] Carmichael Numbers (0) | 2009.06.02 |
---|---|
[Accept] 10006 Carmichael Numbers (0) | 2009.06.02 |
[Accept] 850 Crypt Kicker II (0) | 2009.06.02 |
[Accept] 10132 File Fragmentation (0) | 2009.06.02 |
[Accept] 10099 - The Tourist Guide (0) | 2009.06.02 |
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 |
ACM
2009. 6. 2. 21:03
반응형
I got accept form Judge Server
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
#include <stdio.h> #include <string.h> #define FILENUM 144 #define FILEFRAGMENT 2 #define FILESIZE 256 #define FALSE 0 #define TRUE 1 char* getOriginalFile(int inputNum, int originalFileLen, int originalFileOneNum, int fileIndex[4]); void findPair(int inputNum, int originalFileLen, int originalFileOneNum, int fileIndex[4]); char fileInfo[FILENUM*FILEFRAGMENT][FILESIZE]; int fragmentLen[FILENUM*FILEFRAGMENT], fragmentOneNum[FILENUM*FILEFRAGMENT]; int main(void) { char* originalFile; int caseNum, inputNum, i, j, originalFileLen, originalFileOneNum, count; int firstLen, secondLen, fileIndex[4]; scanf("%d", &caseNum); if(caseNum>FILENUM-1) return 0; getchar(); getchar(); do{ // initialize originalFileLen=0; originalFileOneNum=0; memset(fileInfo, 0x00, sizeof(fileInfo)); memset(fragmentLen, 0x00, sizeof(fragmentLen)); memset(fragmentOneNum, 0x00, sizeof(fragmentOneNum)); memset(fileIndex, 0x00, sizeof(fileIndex)); for(i=0; i<FILENUM*FILEFRAGMENT; i++) { fgets(fileInfo[i], 255, stdin); // size check fragmentLen[i]=strlen(fileInfo[i])-1; fileInfo[i][fragmentLen[i]] = '\0'; if(fragmentLen[i]>=FILESIZE-1){ printf("Your input size is more than 256\n"); return 0; } if(!fragmentLen[i]) break; // 1의 개수를 구함 count=0; for(j=0; j<fragmentLen[i]; j++){ if(fileInfo[i][j]=='1') count++; } fragmentOneNum[i] = count; } inputNum = i; // 원래 파일 사이즈(originalFileLen)와 1의 개수(originalFileOneNum)을 구함) for(i=0; i<inputNum; i++) { originalFileLen += fragmentLen[i]; originalFileOneNum += fragmentOneNum[i]; } originalFileLen = originalFileLen * 2 / inputNum; originalFileOneNum = originalFileOneNum * 2 / inputNum; if(originalFileLen >= FILESIZE-1) return 0; // file size check findPair(inputNum, originalFileLen, originalFileOneNum, fileIndex); originalFile = getOriginalFile(inputNum, originalFileLen, originalFileOneNum, fileIndex); if(!originalFile) break; // file null check // result caseNum--; if(!caseNum) printf("%s\n", originalFile); // 마지막 case일때 else printf("%s\n\n", originalFile); // 마지막 case가 아니면 한 줄 더 띄기 } while(caseNum>0); return 0; } // find get the original File char* getOriginalFile(int inputNum, int originalFileLen, int originalFileOneNum, int fileIndex[4]) { static char resultFile[4][FILESIZE]; int i, j; // index를 조합해서 original file이 될 수 있는 후보를 찾음 sprintf(resultFile[0], "%s%s", fileInfo[fileIndex[0]], fileInfo[fileIndex[1]]); sprintf(resultFile[1], "%s%s", fileInfo[fileIndex[1]], fileInfo[fileIndex[0]]); sprintf(resultFile[2], "%s%s", fileInfo[fileIndex[2]], fileInfo[fileIndex[3]]); sprintf(resultFile[3], "%s%s", fileInfo[fileIndex[3]], fileInfo[fileIndex[2]]); // 후보 중에 같은 것이 있으면, 그것이 original file if(!strncmp(resultFile[0], resultFile[2], originalFileLen) || !strncmp(resultFile[0], resultFile[3], originalFileLen)) return resultFile[0]; else if(!strncmp(resultFile[1], resultFile[2], originalFileLen) || !strncmp(resultFile[1], resultFile[3], originalFileLen)) return resultFile[1]; else return NULL; } // Fine 2 pair of file and save indexes; void findPair(int inputNum, int originalFileLen, int originalFileOneNum, int fileIndex[4]) { int i, j; int findFlag=FALSE, count=0; for(i=0; i<inputNum; i++) { for(j=0; j<inputNum; j++) { if(i==j) continue; // 자신의 쌍을 찾았을 경우 if(fragmentLen[i]+fragmentLen[j]==originalFileLen && fragmentOneNum[i]+fragmentOneNum[j]==originalFileOneNum) { // 자신의 쌍의 후보가 2개 이상일 경우(break) if(findFlag){ // pair is more than 2 fileIndex[count]=0; fileIndex[count+1]=0; findFlag = FALSE; break; } // 자신의 쌍을 찾았을 경우 index를 저장 else{ fileIndex[count]=i; fileIndex[count+1]=j; findFlag = TRUE; } } } if(findFlag) { count+=2; if(count>=4) break; } findFlag = FALSE; } return; }
반응형
'ACM' 카테고리의 다른 글
[Accept] 10110 Light, more light (0) | 2009.06.02 |
---|---|
[Accept] 850 Crypt Kicker II (0) | 2009.06.02 |
[Accept] 10099 - The Tourist Guide (0) | 2009.06.02 |
[Accept] 10099 - The Tourist Guide (0) | 2009.06.02 |
[Time Limit] 10099 - The Tourist Guide (0) | 2009.06.02 |