[BZOJ1444]有趣的游戏(AC自动机+矩阵乘法)

n个等长字符串,机器会随机输出一个字符串(每个字母出现的概率为p[i]),问每个字符串第一个出现的概率是多少。

显然建出AC自动机,套路地f[i][j]表示i时刻位于节点j的概率。

构建转移矩阵,当i为某个子串结束节点时A[i][i]=1,否则A[i][j]+=p[j]。

虽然事件总数无穷大,矩阵自乘50次就可以较为精确地得到结果了。

注意AC自动机的节点是从0开始的。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #define rep(i,l,r) for (int i=(l); i<=(r); i++)
 5 typedef long double ld;
 6 using namespace std;
 7 
 8 const int N=110;
 9 char str[N];
10 ld x,y,p[N];
11 int n,len,m,nd,q[N],fail[N],ch[N][12],pos[N],b[N];
12 
13 struct Mat{
14     ld a[N][N];
15     ld* operator [](int x){ return a[x]; }
16     Mat(){ memset(a,0,sizeof(a)); }
17 }A;
18 
19 Mat mul(Mat &a,Mat &b){
20     Mat c;
21     rep(i,0,nd) rep(j,0,nd) rep(k,0,nd) c[i][k]+=a[i][j]*b[j][k];
22     return c;
23 }
24 
25 void ins(char s[],int id){
26     int x=0;
27     rep(i,1,len){
28         int c=s[i]-'A'+1;
29         if (!ch[x][c]) ch[x][c]=++nd;
30         x=ch[x][c];
31     }
32     pos[id]=x; b[x]=1;
33 }
34 
35 void getfail(){
36     int st=0,ed=0;
37     rep(i,1,m) if (ch[0][i]) q[++ed]=ch[0][i];
38     while (st<ed){
39         int x=q[++st];
40         rep(i,1,m){
41             if (ch[x][i]) fail[ch[x][i]]=ch[fail[x]][i],q[++ed]=ch[x][i];
42                 else ch[x][i]=ch[fail[x]][i];
43         }
44     }
45 }
46 
47 int main(){
48     freopen("bzoj1444.in","r",stdin);
49     freopen("bzoj1444.out","w",stdout);
50     scanf("%d%d%d",&n,&len,&m);
51     rep(i,1,m) scanf("%Lf%Lf",&x,&y),p[i]=x/y;
52     rep(i,1,n) scanf("%s",str+1),ins(str,i);
53     getfail();
54     rep(i,0,nd){
55         if (b[i]) { A[i][i]=1; continue; }
56         rep(j,1,m) A[i][ch[i][j]]+=p[j];
57     }
58     rep(i,1,50) A=mul(A,A);
59     rep(i,1,n) printf("%.2lf\n",(double)A[0][pos[i]]);
60     return 0;
61 }

 

转载于:https://www.cnblogs.com/HocRiser/p/9721890.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/426713.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web前端开发——HTML学习

WEB前端开发 W3C学习网站 MDN学习网站 HTML 从语义角度&#xff0c;描述页面结构 语言不区分大小写&#xff0c;特殊字符要求全小写 html5文件结构 快速编辑&#xff1a;Tab键 <!DOCTYPE html> 文档类型&#xff1a;符合HTML5标准 <htmml lang"en"&…

python群发短信脚本_python实现zabbix发送短信脚本

本文实例为大家分享了zabbix发送短信的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下使用方法./sendSMS.py PHONE_NUMBER args_2 SMS_MSG接收参数输入参数一: 接收手机号(zabbix传来的第1个参数&#xff0c;报警接收手机号)&#xff0c;第一个参数可以对比发送邮件的…

java学习(3):学生管理系统3

总计分为六次修改&#xff0c;代码可直接拿出来用&#xff0c;建立一个类即可&#xff0c;注意类名同步 解决总分平均分问题 import java.util.*; public class student { public static void main(String[] args){ //存储学生人数 Scanner in new Scanner(System.in); System…

第二次作业重交

一、项目简介 1、Gitee项目地址&#xff1a;https://gitee.com/xnsy/WC 2、开发语言&#xff1a;C#语言 3、解题思路 刚看完作业要求后&#xff0c;只知道这个程序要完成对文件的统计工作&#xff0c;但是对于程序设计仍然是一头雾水&#xff0c;而后百度了怎么编写wordcount程…

2021/1/18

在家宅了两天&#xff0c;寒假立的flag不能就这样倒了&#xff0c;今天开始学数据结构和算法还有前端开发&#xff0c;不然我连寒假作业都写不完QAQ。

java学习(4):第一个java程序

1第一个java文件 编写一个.java后缀的文件 public class helloworld{ public static void main(String[] args){ System.out.println(“helloworld”); } } 2cmd 编译java javac helloworld 生成class文件使用 Java helloworld 输出helloworld结束 个人练习 public class test…

python单元测试的应用_单元测试pythongui应用程序的推荐方法是什么?

我目前愚蠢到试图为Python桌面应用程序维护两个并行代码基&#xff0c;一个使用PyGObject introspection for GTK 3&#xff0c;另一个使用PyGTK for GTK 2。我主要在PyGObject分支上工作&#xff0c;然后将变更移植到PyGTK分支上。由于这些实现之间的所有细微差异&#xff0c;…

洛谷P2480 [SDOI2010]古代猪文(卢卡斯定理+中国剩余定理)

传送门 好吧我数学差的好像不是一点半点…… 题目求的是$G^{\sum_{d|n}C^d_n}mod\ 999911659$ 我们可以利用费马小定理$a^{k}\equiv a^{k\ mod\ (p-1)}(mod\ p)$ 然后组合数可以直接用Lucas搞 那么就做完啦 然而$p-1$并不是质数orz&#xff0c;费马小定理不能用 那么我们考虑把…

java学习(5):全局变量和局部变量

public class qulitity{ static int num125; public static void main(String[] args){ System.out.println(“全局变量的值为”num1); int num212; System.out.println(num2); Test(); } public static void Test(){ int num21000; System.out.println(num2); } }

C语言知识点笔记完全整理

这个大长篇相当于是自己对于c语言学习的一个总结&#xff0c;会持续更新完善。 后续会在寒假整理一些经典的例题附带题解&#xff0c;当然希望我学到的东西、总结的经验&#xff0c;能够给后来者提供一个更好的学习途径&#xff0c;从入门到精通而不再是放弃。 也欢迎读者提出…

ajax 微信code获取_获取链接的参数,判断是否是微信打开,ajax获取数据

//获取链接参数function GetQueryString(name) {var reg new RegExp("(^|&)" name "([^&]*)(&|$)");var r window.location.search.substr(1).match(reg);if (r ! null) return unescape(r[2]); return null;}function is_weixin() {var u…

[HAOI2016]食物链

题目描述 如图所示为某生态系统的食物网示意图&#xff0c;据图回答第1小题现在给你n个物种和m条能量流动关系&#xff0c;求其中的食物链条数。物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3......am-1 bm-1am bm其中ai bi表示能量从物种ai流向物种bi,注意单独的…

java学习(6):数据类型

public class Shortdata{ public static void main(String[] args){ byte by 45; short sho 32767; System.out.println(“sho的值是”sho); //获取最大值 System.out.println(Byte.MAX_VALUE); System.out.println(Short.MAX_VALUE); //获取最小值System.out.println(Byte.M…

Xcode添加pch文件

1.打开Xcode工程. 在Supporting Files目录下,选择 File > New > File > iOS > Other > PCH File 然后点击下一步&#xff1b; 2.如果项目名称为Demo, PCH 文件的名字为Test.pch,然后创建&#xff1b;3.选择 PCH 文件创建Test.pch文件4.找到 Project > Build …

共轭方式怎么判断_怎样判断共轭双烯

本章重点共轭二烯烃的结构,共轭二烯烃的性质及制法,共轭 效应及其相对强弱。 本章难点共轭二烯烃的结构和性质,共轭效应及其相对强弱,周 环反应及共振论的概念。 ...第六章 烯烃 共轭二烯烃 1 分类 命名 6.1.1二烯烃的分类 二烯烃包括...6-3 共轭二烯烃 一. 二烯烃的分类、命名…

java学习(7):巩固练习

//任务1 //使用记事本或其他文本编辑器编写一个java控制台程序&#xff0c;定义一个包含main方法的java类&#xff0c;在main方法中使用合适的数据类型定义如下局部变量&#xff0c;标识符要严格遵守java规范。 //学生姓名&#xff1b;学生年龄&#xff1b;学生身高&#xff0c…

js fn无法访问,不报错

GD_List.prototype.test function(){}无法访问&#xff0c;浏览器console不报错。 附带条件&#xff1a; 1.其它某些fn能访问。 2.test是放在某些fn中的。 错误原因&#xff1a;fn命名冲突&#xff08;存放test&#xff09;&#xff0c;js调用了另外一个同名fn&#xff08;没存…

unionall mysql_5分钟了解MySQL5.7union all用法的黑科技

wKiom1f8bNajxqWNAAA4eVx2Dz8965.jpgwKioL1f8bNbCZ-bgAAA4pG6yXEQ597.jpgMySQL5.7union all用法的黑科技union all在MySQL5.6下的表现Part1:MySQL5.6.25[rootHE1 ~]# mysql -uroot -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL conn…

java学习(8):巩固练习

//任务2 编写控制台程序将以下给定的整数常量用合适的变量接收并将其10进制值与二进制表示形式分别输出打印在控制台界面 //55&#xff1b;666&#xff1b;1080&#xff1b;2500&#xff1b;78451&#xff1b; public class test02{ public static void main(String[] args){ /…

微信公众号开发经验总结

微信公众号开发经验总结 1. 快捷访问 1.1 测试公众号注册&#xff1a; http://mp.weixin.qq.com/debug/cgi-bin/sandbox?tsandbox/login 1.2 微信公众号开发指南&#xff1a; https://mp.weixin.qq.com/wiki?tresource/res_main&idmp1445241432 1.3 …