bzoj4820
来源:互联网 发布:mac修容偏白用哪个色 编辑:程序博客网 时间:2024/06/06 00:44
表示高斯消元总写错。。。
注意,概率和期望高斯消元,我们消的时候,取一个fabs最大的就好,别用eps判了,re惨了。。
#include<cstdio>#include<cmath>#include<cstdlib>#include<algorithm>#include<cstring>#include<queue>using namespace std;const int N=305; int n,m,pos[N]; int head[N*N],tot,to[N*N],pre[N*N];void addedge(int u,int v) {to[++tot]=v;pre[tot]=head[u];head[u]=tot;} char s[N];int ch[N*N][2],cnt,dep[N*N],fail[N*N];inline int idx(char ch) {return ch=='T'? 0:1;}void get_fail(){ queue<int> q; if (ch[0][0]) q.push(ch[0][0]); if (ch[0][1]) q.push(ch[0][1]); while (!q.empty()) { int u=q.front();q.pop(); for (int i=0;i<=1;i++) if (ch[u][i]==0) ch[u][i]=ch[fail[u]][i]; else fail[ch[u][i]]=ch[fail[u]][i],q.push(ch[u][i]); }}double a[N][N],bin[N];void jump(int id) { a[id][n+1]=-bin[m]; int x=pos[id]; while (x) { for (int i=head[x];i;i=pre[i]) a[to[i]][id]+=bin[m-dep[x]]; x=fail[x]; }}void gauss(int n){ for (int i=1;i<=n;i++) { int j=i; for (int k=i+1;k<=n;k++) if (fabs(a[k][i])>fabs(a[i][i])) j=k; if (i!=j) swap(a[i],a[j]); double tmp=a[i][i]; for (j=i;j<=n+1;j++) a[i][j]/=tmp; for (j=1;j<=n;j++) if (j!=i) { tmp=a[j][i]; for (int k=1;k<=n+1;k++) a[j][k]-=a[i][k]*tmp; } }}int main(){ scanf("%d%d",&n,&m); bin[0]=1;for (int i=1;i<=m;i++) bin[i]=bin[i-1]*0.5; for (int i=1;i<=n;i++) { scanf("%s",s+1); int u=0,id; for (int j=1;j<=m;j++) { id=idx(s[j]); if (ch[u][id]==0) ch[u][id]=++cnt; u=ch[u][id];dep[u]=j;addedge(u,i); } pos[i]=u; } get_fail(); for (int i=1;i<=n;i++) jump(i); for (int i=1;i<=n;i++) a[n+1][i]=1.0; a[n+1][n+2]=1.0; gauss(n+1); for (int i=1;i<=n;i++) printf("%.10lf\n",a[i][n+2]); return 0;}
0 0
- bzoj4820
- bzoj4820
- [BZOJ4820] 硬币游戏
- 我的笔记 LinkedList 集合类
- iOS view无限360度旋转和停止
- 九度OJ题目1441:人见人爱 A ^ B
- 电脑之间用网线直接连接起来快速传送大文件技巧
- 我的笔记 Vector 和 Stack 集合类
- bzoj4820
- SQL:查询出数据,按序号排序,并将一个或是多个特定的数据排在最前面
- php实现数据结构线性表(顺序)
- 我的Spring之旅——(二)Spring AOP实现的两种方式
- 从链表中删除重复数据(三种方法)
- 如何以椭圆形显示位图
- android 系统状态栏的---布局延伸到系统状态栏里面 4.4++
- Linux下动态库生成和使用
- 我的笔记 集合类的分类