#include<stdio.h> #include<stdlib.h> #include<string.h> #define max 1005 void eli_fgets_newline(char *line){ char *pos; if ((pos=strrchr(line, '\n')) != NULL) *pos = '\0'; if ((pos=strrchr(line, '\r')) != NULL) *pos = '\0'; return ; } int binary_search(int db[max][2], int db_size, int c){ int left = 0 ; int right = db_size-1; while(left<=right){ int middle = (left+right)/2 ; if(db[middle][0] == c) return middle ; else if(db[middle][0] > c) right = middle-1 ; else left = middle+1 ; } return -1 ; } int compare(const void* a, const void* b){ if(*((int*)a+1) != *((int*) b+1)) return *((int*)a+1)-*((int*)b+1) ; else return *(int*)b-*(int*)a ; } int cmp(const void* a, const void* b){ return *(int*)a-*(int*)b ; } void print_db(int db[max][2], int db_size){ int i ; for(i=0 ; i<db_size ; ++i){ printf("%d %d\n",db[i][0],db[i][1]) ; } puts("") ; return ; } int main(){ char line[max] ; int db[max][2] ; int i, found ; int len = 0, db_size = 0; while(fgets(line,sizeof(line),stdin)){ eli_fgets_newline(line) ; db_size = 0, memset(db,0,sizeof(db)) ; len = strlen(line) ; for(i=0 ; i<len ; ++i){ qsort(db,db_size,sizeof(db[0]),cmp) ; found = binary_search(db,db_size,line[i]) ; if(found == -1){ db[db_size][0] = line[i] ; db[db_size][1]++ ; db_size++ ; } else{ db[found][1]++ ; } } qsort(db, db_size, sizeof(db[0]), compare) ; print_db(db,db_size) ; } return 0 ; }
2013年8月18日 星期日
c012: Tell me the frequencies! 、UVA 10062
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言