题面

传送门

题解

不知道概率生成函数是什么的可以看看这篇文章,题解也在里面了

//minamoto
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=305,P=1e9+7;const double eps=1e-10;
double mp[N][N],b[N];char s[N];int bin[N],h[N][N],n,m;
inline int Hash(R int i,R int l,R int r){return ((h[i][r]-1ll*h[i][l-1]*bin[r-l+1])%P+P)%P;}
void Gauss(int n){
fp(i,1,n){
if(mp[i][i]>-eps&&mp[i][i]<eps){
fp(j,i+1,n)if(mp[j][i]<-eps||mp[j][i]>eps){
fp(k,i,n+1)swap(mp[i][k],mp[j][k]);
break;
}
}
double t=1.0/mp[i][i];fp(j,i,n+1)mp[i][j]*=t;
fp(j,i+1,n){
t=mp[j][i];
fp(k,i,n+1)mp[j][k]-=mp[i][k]*t;
}
}
fd(i,n-1,1)fp(j,i+1,n)mp[i][n+1]-=mp[j][n+1]*mp[i][j];
}
int main(){
// freopen("testdata.in","r",stdin);
scanf("%d%d",&n,&m);
bin[0]=b[0]=1;
fp(i,1,m)bin[i]=(bin[i-1]<<1)%P,b[i]=b[i-1]*2;
fp(i,1,n){
scanf("%s",s+1);
fp(j,1,m)h[i][j]=((h[i][j-1]<<1)+(s[j]=='H'))%P;
}
fp(i,1,n){
fp(j,1,n)fp(k,1,m)(Hash(i,1,k)==Hash(j,m-k+1,m))?mp[i][j]+=b[k]:0;
mp[i][n+1]=-1;
}
fp(i,1,n)mp[n+1][i]=1;mp[n+1][n+2]=1;
Gauss(n+1);
fp(i,1,n)printf("%.8lf\n",mp[i][n+2]);
return 0;
}

最新文章

  1. [JS]笔记14之事件委托
  2. 【工具】清理Windows Installer冗余文件(支持64位NT6.x系统)
  3. MyISAM与InnoDB两者之间怎么选择
  4. linux系统vsftpd登陆慢卡怎么办
  5. javac编译提示编码GBK的不可映射字符
  6. Mapper映射器
  7. JavaWeb应用中重定向与跳转的区别
  8. npm 模块安装机制简介
  9. servlet上传图片 服务器路径
  10. NYOJ 104 最大子矩阵(二维DP)
  11. Js的Url中传递中文参数乱码的解决
  12. 【转】 linux下的awk程序执行
  13. Mysql自连接的一些用法
  14. Best Time to Buy and Sell Stock i
  15. vmware虚拟机安装vmware tools
  16. 循环结构-for,while,do-while
  17. 突然 不能f**q
  18. java :: Java中的双冒号操作符
  19. MySQL重复数据处理
  20. Apache与Tomcat整合的配置

热门文章

  1. 网络编程基础之C/S架构和TCP/IP协议
  2. java web 读取配置文件两种方法
  3. Centos7.2下编译安装python3.7
  4. 求Half向量
  5. 143. Reorder List(List)
  6. HRESULT:0x80070057 (E_INVALIDARG)
  7. iOS 打印结构体
  8. 543. Diameter of Binary Tree 二叉树的最大直径
  9. Tftp上传、下载
  10. JVM类加载机制详解