POJ 2418
题意:给你一堆字符串,然后按字典序输出,再输出他们出现的频率。
思路:trie。
#include <set> #include <map> #include <stack> #include <cmath> #include <queue> #include <cstdio> #include <string> #include <vector> #include <iomanip> #include <cstring> #include <iostream> #include <algorithm> #define Max 2505 #define FI first #define SE second #define ll long long #define PI acos(-1.0) #define inf 0x3fffffff #define LL(x) ( x << 1 ) #define bug puts("here") #define PII pair<int,int> #define RR(x) ( x << 1 | 1 ) #define mp(a,b) make_pair(a,b) #define mem(a,b) memset(a,b,sizeof(a)) #define REP(i,s,t) for( int i = ( s ) ; i <= ( t ) ; ++ i ) using namespace std; /*********************************************/ #define N 111111 struct TT{ int next[128] ; int count ; void init(){ mem(next ,0) ; count = 0 ; } }T[N] ; int num = 0 ; void insert(char *a){ int l = strlen(a) ; int now = 0 ; for (int i = 0 ; i < l ; i ++ ){ int x = a[i] ; if(T[now].next[x] == 0){ T[now].next[x] = ++ num ; T[num].init() ; } now = T[now].next[x] ; } T[now].count ++ ; } char ans[11111] ; int cnt = 0 ; void dfs(int now ,int dp){ // int fkk = 0 ; if(T[now].count){ ans[dp] = '\0' ; cout << ans <<" " ; printf("%.4f\n",T[now].count * 1.0 / cnt * 100) ; } for (int i = 0 ; i < 128 ; i ++ ){ if(T[now].next[i]){ // fkk ++ ; ans[dp] = char(i) ; dfs(T[now].next[i] , dp + 1 ) ; } } } char sfk[111] ; int main() { num = 0 ; cnt = 0 ; T[0].init() ; while(gets(sfk)){ int l = strlen(sfk) ; if(!l)break ; cnt ++ ; insert(sfk) ; } dfs(0 , 0) ; return 0 ; }
POJ 1056 还是水题,就不开新的一篇博客了。
#include <set> #include <map> #include <stack> #include <cmath> #include <queue> #include <cstdio> #include <string> #include <vector> #include <iomanip> #include <cstring> #include <iostream> #include <algorithm> #define Max 2505 #define FI first #define SE second #define ll long long #define PI acos(-1.0) #define inf 0x3fffffff #define LL(x) ( x << 1 ) #define bug puts("here") #define PII pair<int,int> #define RR(x) ( x << 1 | 1 ) #define mp(a,b) make_pair(a,b) #define mem(a,b) memset(a,b,sizeof(a)) #define REP(i,s,t) for( int i = ( s ) ; i <= ( t ) ; ++ i ) using namespace std; #define N 111111 struct TT{ int next[2] ; int count ; void init(){ mem(next ,0) ; count = 0 ; } }T[N] ; int num = 0 ; bool flag = 0 ; void insert(char *a){ int l = strlen(a) ; int now = 0 ; for (int i = 0 ; i < l ; i ++ ){ int x = a[i] - '0' ; if(T[now].count)flag = 1 ; if(T[now].next[x] == 0){ T[now].next[x] = ++ num ; T[num].init() ; } now = T[now].next[x] ; } T[now].count ++ ; } void init(){ T[0].init() ;num = 0 ; } char in[N] ; int main() { int ca = 0 ; while(scanf("%s",in) != EOF){ if(in[0] != '9'){ insert(in) ; } else { if(flag) printf("Set %d is not immediately decodable\n",++ca) ; else printf("Set %d is immediately decodable\n",++ca) ; flag = 0 ; init() ; } } return 0 ; }
POJ 1204
POJ 2513
ZOJ 3228
HDU 1671 POJ 3630
HDU 2846
POJ 2001
作者:kdqzzxxcc 发表于2013-8-30 19:36:19 原文链接
阅读:29 评论:0 查看评论