标签:style blog http color os io for art
题目地址 : Hardwood Species
题目大意:
给你多组字符串,算出其占所有给出字符串占的比重。
解题思路:
字典树,将每个字符的最后一个字符的节点里count++。 最后求出count/sum。 即可。关键是字符串的输出。因为存到字典树里的值就是本身字符的ASCII码值,所以最后输出的时候,i(0->MAX)判断有没有该节点,有的将i 赋值到一个字符串即可。
代码:
1 #include <algorithm> 2 #include <iostream> 3 #include <sstream> 4 #include <cstdlib> 5 #include <cstring> 6 #include <cstdio> 7 #include <string> 8 #include <bitset> 9 #include <vector> 10 #include <queue> 11 #include <stack> 12 #include <cmath> 13 #include <list> 14 //#include <map> 15 #include <set> 16 using namespace std; 17 /***************************************/ 18 #define ll long long 19 #define int64 __int64 20 #define PI 3.1415927 21 /***************************************/ 22 const int INF = 0x7f7f7f7f; 23 const double eps = 1e-8; 24 const double PIE=acos(-1.0); 25 const int d1x[]= {0,-1,0,1}; 26 const int d1y[]= {-1,0,1,0}; 27 const int d2x[]= {0,-1,0,1}; 28 const int d2y[]= {1,0,-1,0}; 29 const int fx[]= {-1,-1,-1,0,0,1,1,1}; 30 const int fy[]= {-1,0,1,-1,1,-1,0,1}; 31 /*vector <int>map[N];map[a].push_back(b);int len=map[v].size();*/ 32 /***************************************/ 33 void openfile() 34 { 35 freopen("data.in","rb",stdin); 36 freopen("data.out","wb",stdout); 37 } 38 priority_queue<int> qi1; 39 priority_queue<int, vector<int>, greater<int> >qi2; 40 /**********************华丽丽的分割线,以上为模板部分*****************/ 41 const int MAX=150; 42 struct Trie 43 { 44 Trie *next[MAX]; //存储下一层 45 int v; //存储到此有多少相同前缀的数目 46 int count; 47 }; 48 Trie *root; 49 int sum; 50 int d=0; 51 char str[35]= {‘\0‘}; 52 void creatTrie(char s[]) 53 { 54 Trie *p,*q; 55 p=root; 56 int len=strlen(s); 57 for(int i=0; i<len; i++) 58 { 59 int ce=s[i]; 60 if (p->next[ce]==NULL) 61 { 62 q=(Trie *)malloc(sizeof(Trie)); 63 q->v=1; 64 for(int j=0; j<MAX; j++) 65 { 66 q->next[j]=NULL; 67 q->count=0; 68 } 69 p->next[ce]=q; 70 p=p->next[ce]; 71 } 72 else 73 { 74 p->v++; 75 p=p->next[ce]; 76 } 77 } 78 p->v=-1; 79 p->count++; 80 } 81 int find(char s[]) 82 { 83 int len=strlen(s); 84 Trie *p=root; 85 for(int i=0; i<len; i++) 86 { 87 int ce=s[i]; 88 p=p->next[ce]; 89 if (p==NULL) 90 return 0; 91 if (p->v==-1) 92 return 1; 93 } 94 return 1; 95 } 96 void outp(Trie *T) 97 { 98 if (T->count!=0) 99 { 100 for(int j=0;j<d;j++) 101 printf("%c",str[j]); 102 printf(" %.4lf\n",(double)(T->count)/(double)sum*100.0); 103 } 104 for(int i=0; i<MAX; i++) 105 if (T->next[i]!=NULL) 106 { 107 str[d]=i; 108 d++; 109 outp(T->next[i]); 110 d--; //树的构造,-1到上一层的d值。 111 } 112 } 113 int dealTrie(Trie *T) 114 { 115 if (T==NULL) 116 return 0; 117 for(int i=0; i<MAX; i++) 118 if (T->next[i]!=NULL) 119 dealTrie(T->next[i]); 120 free(T); 121 return 0; 122 } 123 int main() 124 { 125 char s[35]; 126 root=(Trie *)malloc(sizeof(Trie)); 127 for(int i=0; i<MAX; i++) //初始化 128 { 129 root->next[i]=NULL; 130 root->count=0; 131 } 132 while(gets(s)) 133 { 134 if (s[0]==0) 135 break; 136 sum++; 137 creatTrie(s); 138 } 139 outp(root); 140 dealTrie(root); 141 return 0; 142 }
poj2418(Hardwood Species),布布扣,bubuko.com
标签:style blog http color os io for art
原文地址:http://www.cnblogs.com/ZhaoPengkinghold/p/3884581.html