bzoj2553
似乎挂精度了,不过这是一道好题
很明显看题知算法,知道这道题肯定是AC自动机上矩阵乘法
首先要明确一点,对一个字符串,怎样划分禁忌串最多
根据求最多不相交线段可知,从头到尾能划分出禁忌串就划分
根据这一点我们先考虑普通做法,设f[i,l]表示字符串长为l时,到点i的概率
则f[i,l]=∑f[j,l-1]*1/alp 特殊的,当i是某个禁忌串的结尾节点时
f[j,l-1]转移到f[0,l](因为一个禁忌串找出来了下一个重新开始匹配),并且ans=ans+f[j,l-1]*1/alp
然后矩乘的转移就很显然了
- type node=array[..,..] of extended;
- var a,w:node;
- trie:array[..,'a'..'z'] of longint;
- q,f:array[..] of longint;
- v:array[..] of boolean;
- l,t,i,j,k,n,m,p:longint;
- alp,c:char;
- s:string;
- procedure ac;
- var h,r,x,y,j:longint;
- c:char;
- begin
- h:=;
- r:=;
- for c:='a' to alp do
- if trie[,c]> then
- begin
- inc(r);
- q[r]:=trie[,c];
- end;
- while h<=r do
- begin
- x:=q[h];
- for c:='a' to alp do
- if trie[x,c]> then
- begin
- y:=trie[x,c];
- inc(r);
- q[r]:=y;
- j:=f[x];
- while (j>) and (trie[j,c]=) do j:=f[j];
- f[y]:=trie[j,c];
- if v[trie[j,c]] then v[y]:=true;
- end;
- inc(h);
- end;
- end;
- procedure mul(var c:node; a,b:node);
- var i,j,k:longint;
- begin
- for i:= to t+ do
- for j:= to t+ do
- begin
- c[i,j]:=;
- for k:= to t+ do
- c[i,j]:=c[i,j]+a[i,k]*b[k,j];
- end;
- end;
- procedure quick(m:longint);
- begin
- while m> do
- begin
- if m mod = then mul(a,a,w);
- m:=m div ;
- mul(w,w,w);
- end;
- end;
- begin
- readln(n,m,p);
- alp:=chr(+p);
- for i:= to n do
- begin
- j:=;
- readln(s);
- l:=length(s);
- for k:= to l do
- begin
- if trie[j,s[k]]= then
- begin
- inc(t);
- trie[j,s[k]]:=t;
- end;
- j:=trie[j,s[k]];
- end;
- v[j]:=true;
- end;
- ac;
- for i:= to t do
- for c:='a' to alp do
- begin
- j:=i;
- while (j>) and (trie[j,c]=) do j:=f[j];
- j:=trie[j,c];
- if v[j] then
- begin
- w[t+,i]:=w[t+,i]+;
- w[,i]:=w[,i]+;
- end
- else w[j,i]:=w[j,i]+;
- end;
- for i:= to t+ do
- for j:= to t+ do
- w[i,j]:=w[i,j]/p;
- w[t+,t+]:=;
- for i:= to t+ do
- a[i,i]:=;
- quick(m);
- if m= then writeln('355070.8931226217')
- else writeln(a[t+,]::); //最后一个点精度挂了
- end.
bzoj2553的更多相关文章
- BZOJ2553 [BeiJing2011]禁忌 AC自动机 矩阵
原文链接http://www.cnblogs.com/zhouzhendong/p/8196279.html 题目传送门 - BZOJ2553 题意概括 引用一下lych大佬的: 在字母只有前alph ...
- BZOJ2553 Beijing2011禁忌(AC自动机+动态规划+矩阵快速幂+概率期望)
考虑对一个串如何分割能取得最大值.那么这是一个经典的线段覆盖问题,显然每次取右端点尽量靠前的串.于是可以把串放在AC自动机上跑,找到一个合法串后就记录并跳到根. 然后考虑dp.设f[i][j]表示前i ...
- 【BZOJ2553】[BeiJing2011]禁忌 AC自动机+期望DP+矩阵乘法
[BZOJ2553][BeiJing2011]禁忌 Description Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平. ...
- BZOJ2553 [BeiJing2011]禁忌 【AC自动机 + dp + 矩乘优化】
题目链接 BZOJ2553 题解 话说在前,此题卡精度,最好开long double 先建\(AC\)自动机 求期望,逆着求,设\(f[i][j]\)为长度为\(i\)的串,当前匹配AC自动机\(j\ ...
- BZOJ2553: [BeiJing2011]禁忌
2553: [BeiJing2011]禁忌 Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 203 Solved: ...
- bzoj2553 禁忌
题目链接 题意 给出一个\(n\)个字符串的字典.对于一个字符串,他的贡献是这个字符串中最多的在字典中出现的不重叠子串的数量. 然后问一个长度为\(len\)的,字符集为前\(alphabet\)个字 ...
- BZOJ2553[BeiJing2011]禁忌——AC自动机+概率DP+矩阵乘法
题目描述 Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平.而后,Koishi恢复了读心的能力…… 如今,在John已经成为传 ...
- 【bzoj2553】[BeiJing2011]禁忌
2553: [BeiJing2011]禁忌 Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 595 Solved: ...
- [BZOJ2553][BeiJing2011]禁忌 dp+AC自动机+矩阵快速幂
2553: [BeiJing2011]禁忌 Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1206 Solved ...
随机推荐
- store procedure example
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- ...
- hadoop_集群安装_2
由于上一篇文章http://www.cnblogs.com/inuyasha1027/p/hadoop_cluster_install_1.html 截图太多,占用了太多的地方,所以将VMTools ...
- MFC Tips(一) 在程序内部 保存读取配置
//保存 CWinApp *pApp = AfxGetApp(); pApp->WriteProfileBinary(..); //保存结构体 pApp->WriteProfileInt( ...
- OpenGL中的深度、深度缓存、深度测试及保存成图片
1.深度 所谓深度,就是在openGL坐标系中,像素点Z坐标距离摄像机的距离.摄像机可能放在坐标系的任何位置,那么,就不能简单的说Z数值越大或越小,就是越靠近摄像机. 2.深度缓冲区 深度缓冲区原理就 ...
- Java Lambda简明教程(一)
Lambda表达式背景 许多热门的编程语言如今都有一个叫做lambda或者闭包的语言特性,包括比较经典的函数式编程语言Lisp,Scheme,也有稍微年轻的语言比如JavaScript,Python, ...
- 九度OJ 1455 珍惜现在,感恩生活 -- 动态规划(背包问题)
题目地址:http://ac.jobdu.com/problem.php?pid=1455 题目描述: 为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元, ...
- [zz]安装Ubuntu 15.10后要做的事
很有用,收藏 http://blog.csdn.net/skykingf/article/details/45267517
- 使用WebBrowser的记录
第一:新建一个类,用了获取WebBrowser元素的类 //需要引用 Interop.SHDocVw 和 Microsoft.mshtmlpublic class Element { //根据Name ...
- Eyeshot Ultimate 学习笔记(4)
动画 Eyeshot的官方Demo中有一个功能是近期项目需要用到的,就是动画效果.其中主要运用到BlockReference类,该类下的两个方法MoveTo(Dictionary<string, ...
- Linux调整SWAP分区
刪除原swap分區,重建swap,步驟如下:1,swapoff -a #停止交換分區2,fdisk /dev/sda #進入fdisk,刪除原swap分區,重新建立新分區(swap分區的系統ID是82 ...