hdu 3689 Infinite monkey theorem
来源:互联网 发布:php语言入门 编辑:程序博客网 时间:2024/06/05 20:24
去年杭州区域赛的一道题目,比较简单的AC自动机
#include <stdio.h>#include <string.h>const int NODE = 1000;const int CH = 26;int tree[NODE][CH], cnt;int fail[NODE], word[NODE], Que[NODE];int num[128];char str[20];double gl[128];double dp[1010][20];int mark;int n, m;double sum;int Ins(char *a, int val){ int p = 0; for(; *a; a++) { int c = num[*a]; if(!tree[p][c]) { memset(tree[cnt], 0, CH * sizeof(int)); word[cnt] = 0; tree[p][c] = cnt++; } p = tree[p][c]; } word[p] += val; return p;}void AC(){ int *s = Que, *e = Que; for(int i = 0; i < CH; i++) if(tree[0][i]) { fail[tree[0][i]] = 0; *e++ = tree[0][i]; } while(s != e) { int p = *s++; for(int i = 0; i < CH; i++) { if(tree[p][i]) { int v = tree[p][i]; *e++ = v; fail[v] = tree[fail[p]][i]; } else { tree[p][i] = tree[fail[p]][i]; } } }}void solve(){ memset(dp, 0, sizeof(dp)); sum = 0; dp[0][0] = 1; for(int i = 0; i < m; i++) { for(int j = 0; j < cnt; j++) if(i >= j) { for(int k = 0; k < CH; k++) { int v = tree[j][k]; dp[i + 1][v] += dp[i][j] * gl[k]; } } if(dp[i+1][mark] >= 0) { sum += dp[i+1][mark]; dp[i+1][mark] = 0; } } /*for(int i = 1; i < m; i++) { for(int j = 0; j < cnt; j++) printf("dp[%d][%d] = %0.4lf ", i, j, dp[i][j]); printf("\n"); }*/ printf("%0.2lf%%\n", sum * 100);}int main(){ for(int i = 0; i < 26; i++) num[i + 'a'] = i; while(scanf("%d%d", &n, &m) != EOF) { if(n == 0 && m == 0) break; fail[0] = 0; cnt = 1; memset(tree[0], 0, CH * sizeof(int)); memset(gl, 0, sizeof(gl)); for(int i = 1; i <= n; i++) { double x; scanf("%s%lf", str, &x); gl[str[0] - 'a'] = x; } scanf("%s", str); mark = Ins(str, 1); AC(); solve(); } return 0;}
- hdu 3689 Infinite monkey theorem
- HDU 3689 Infinite monkey theorem
- hdu 3689 Infinite monkey theorem
- hdu 3689 Infinite monkey theorem dp
- 【DP】 HDU 3689 Infinite monkey theorem 预处理
- HDU 3689 Infinite monkey theorem (uva11468)ac自动机+dp
- [AC自动机+概率dp] hdu 3689 Infinite monkey theorem
- HDU 3689 Infinite monkey theorem(KMP + DP)
- HDU 3689 Infinite monkey theorem (KMP + 概率DP)
- 【hdu 3689】Infinite monkey theorem(概率dp+kmp)
- 【hdu3689】 Infinite monkey theorem
- Infinite monkey theorem
- 【AC自动机+DP】 hdu3689 Infinite monkey theorem
- HDU 4775 Infinite Go
- HDU -4775:Infinite Go
- 杭州现场J题_Infinite monkey theorem
- HDU 6124 Euler theorem
- hdu 6124 Euler theorem
- 解决could not create the java virtual machine问题
- struts2整合spring2.5.6
- CSS样式表无效的解决办法
- Kruskal算法
- 大数据量算法
- hdu 3689 Infinite monkey theorem
- 本地计算机上的OracleOraHome92Agent服务启动后又停止了
- 在内核中创建文件 filp_open/sys_open
- 2010武汉IT环境~
- 使用NDK进行网络文件传输
- usaco contact
- Prime算法
- cocoa 文件操作
- V4L2采集摄像头数据