似乎挂精度了,不过这是一道好题

很明显看题知算法,知道这道题肯定是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的更多相关文章

  1. BZOJ2553 [BeiJing2011]禁忌 AC自动机 矩阵

    原文链接http://www.cnblogs.com/zhouzhendong/p/8196279.html 题目传送门 - BZOJ2553 题意概括 引用一下lych大佬的: 在字母只有前alph ...

  2. BZOJ2553 Beijing2011禁忌(AC自动机+动态规划+矩阵快速幂+概率期望)

    考虑对一个串如何分割能取得最大值.那么这是一个经典的线段覆盖问题,显然每次取右端点尽量靠前的串.于是可以把串放在AC自动机上跑,找到一个合法串后就记录并跳到根. 然后考虑dp.设f[i][j]表示前i ...

  3. 【BZOJ2553】[BeiJing2011]禁忌 AC自动机+期望DP+矩阵乘法

    [BZOJ2553][BeiJing2011]禁忌 Description Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平. ...

  4. BZOJ2553 [BeiJing2011]禁忌 【AC自动机 + dp + 矩乘优化】

    题目链接 BZOJ2553 题解 话说在前,此题卡精度,最好开long double 先建\(AC\)自动机 求期望,逆着求,设\(f[i][j]\)为长度为\(i\)的串,当前匹配AC自动机\(j\ ...

  5. BZOJ2553: [BeiJing2011]禁忌

    2553: [BeiJing2011]禁忌 Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 203  Solved: ...

  6. bzoj2553 禁忌

    题目链接 题意 给出一个\(n\)个字符串的字典.对于一个字符串,他的贡献是这个字符串中最多的在字典中出现的不重叠子串的数量. 然后问一个长度为\(len\)的,字符集为前\(alphabet\)个字 ...

  7. BZOJ2553[BeiJing2011]禁忌——AC自动机+概率DP+矩阵乘法

    题目描述 Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平.而后,Koishi恢复了读心的能力…… 如今,在John已经成为传 ...

  8. 【bzoj2553】[BeiJing2011]禁忌

    2553: [BeiJing2011]禁忌 Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 595  Solved: ...

  9. [BZOJ2553][BeiJing2011]禁忌 dp+AC自动机+矩阵快速幂

    2553: [BeiJing2011]禁忌 Time Limit: 20 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 1206  Solved ...

随机推荐

  1. Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW _TASK flag.

    在Activity中使用startActivity()方法不会有任何限制,因为Activity重载了Context的startActivity()方法.但是如果是在其他地方(如Widget或Servi ...

  2. POJ 3254 Corn Fields(DP + 状态压缩)

    题目链接:http://poj.org/problem?id=3254 题目大意:Farmer John 放牧cow,有些草地上的草是不能吃的,用0表示,然后规定两头牛不能相邻放牧.问你有多少种放牧方 ...

  3. (转)C++设计模式——观察者模式

    转自:http://www.jellythink.com/archives/359 前言 之前做了一个性能测试的项目,就是需要对现在的产品进行性能测试,获得测试数据,然后书写测试报告,并提出合理化的改 ...

  4. Struts2配置文件_常量属性_独立测试分析

    <constant name="struts.devMode" value="true" /> 设置开发模式,可以了解详细信息,该属性指定视图标签默 ...

  5. (转) IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)

    首先了解一下CGContextRef: An opaque type that represents a Quartz 2D drawing environment. Graphics Context ...

  6. 日期字符串转换为NSDate

    // 纯数字日期 NSString *str1 = "; // 日期字符串 NSString *str2 = @"2015/05/12 10:22:01"; // 带时区 ...

  7. Percona XtraBackup 备份原理

    前言 Percona XtraBackup(简称PXB)是 Percona 公司开发的一个用于 MySQL 数据库物理热备的备份工具,支持 MySQl(Oracle).Percona Server 和 ...

  8. HA高可用配置

    HA 即 (high available)高可用,又被叫做双机热备,用于关键性业务. 简单理解就是,有两台机器A和B,正常是A提供服务,B待命闲置,当A宕机或服务宕掉,会切换至B机器继续提供服务. 下 ...

  9. 浅谈页面无刷新技术ajax

    现在一般网站都是用ajax来实现页面无刷新操作的. 什么是无刷新:ajax可以实现页面与后台的数据交互,用户完全感觉不出页面有任何的刷新,这就是AJAX的无刷新. ajax方法实现: 可以对ajax进 ...

  10. facebook快速登录常见错误:后台设置、域名权限、开发模式、公开、沙盒

    开发人员登录地址 :  https://developers.facebook.com/?ref=pf 官方登录API文档地址 : https://developers.facebook.com/do ...