bzoj1444】的更多相关文章

[BZOJ1444][JSOI2009]有趣的游戏(高斯消元,AC自动机) 题面 BZOJ 题解 先把\(AC\)自动机构建出来,最好构成\(Trie\)图.然后这样子显然是在一个有向图中有一堆概率的转移,并且存在环,所以高斯消元解决. #include<iostream> #include<cstdio> #include<queue> using namespace std; struct Node{int son[26],fail,lst;}t[500]; int…
n个等长字符串,机器会随机输出一个字符串(每个字母出现的概率为p[i]),问每个字符串第一个出现的概率是多少. 显然建出AC自动机,套路地f[i][j]表示i时刻位于节点j的概率. 构建转移矩阵,当i为某个子串结束节点时A[i][i]=1,否则A[i][j]+=p[j]. 虽然事件总数无穷大,矩阵自乘50次就可以较为精确地得到结果了. 注意AC自动机的节点是从0开始的. #include<cstdio> #include<cstring> #include<algorithm…
[BZOJ1444][Jsoi2009]有趣的游戏 Description Input 注意 是0<=P Output Sample Input Sample Output HINT  30%的数据保证, n ≤ 2. 50%的数据保证, n ≤ 5. 100%的数据保证, n , l, m≤ 10. 题解:本题的做法真的很多啊,概率DP,期望DP,当然还有矩乘黑科技~ 就是先跑AC自动机,弄出转移矩阵,然后自乘50次就行了. #include <cstdio> #include <…
今天学校跳蚤市场摆摊聚众吸毒打call,东西卖了一百多好开心_(:з」∠)_ (然后大家中午就去吃了一顿好的x) 下午听演讲然后现在来填坑orz(其实是昨晚的坑) 题目:bzoj1444 先用字符串构造一个AC自动机,对于一个节点$k$来说,转移到$tr[k][i]$的概率是$p[i]$,根据概率构造出转移矩阵,如果一个点是模式串的结尾就自己给自己连一条1,发现一些点之间会相互影响,那么把转移矩阵乘几十次就可以了- (这好像是个马尔科夫链的模型? #include<cstdio> #inclu…
建立AC自动机,并求出转移矩阵. 再用$\sum E(终止节点)=1$去替换第一个方程,高斯消元即可. 时间复杂度$O(n^3l^3)$. 注意精度问题,要特判0.00的情况. #include<cstdio> #include<cmath> #include<algorithm> #define N 110 using namespace std; int n,l,S,i,j,k,tot,son[N][10],v[N],fail[N],q[N],fin[N]; cha…
显然自动机上高斯消元根据AC自动机上的转移可以列出一系列方程但这个样的方程解出来全0是一组解说明有线性组合的情况考虑除非没人能赢,否则每个人赢的概率和为1那么我们只要把原来的第一个方程换成这个即可 ..] of double; a:..,..] of double; w,q,f:..] of longint; trie:..,..] of longint; v:..] of boolean; j,k,i,n,m,l,x,y,t:longint; s:string; procedure swap(…
题面 bzoj 我要向师父学习善待每一只数据结构 考虑成环,那么高斯消元 然鹅这道题太小了 所以直接转移矩阵自乘就好啦 终点不向外连边 有一条向自己的,概率为一的自环来作为结尾 对于其他店 若有边\((u -> v) = p\) 那么mat[u][v] += p #include <cmath> #include <cstring> #include <cstdio> #include <cstdlib> #include <algorithm&…
题目描述 输入 注意 是0<=P, n , l, m≤ 10. 输出 样例输入 input 1 3 2 2 1 2 1 2 AB BA AA input 2 3 4 2 1 2 1 2 AABA ABAA BAAA 样例输出 output 1 0.25 0.50 0.25 output 2 0.31 0.33 0.37 提示 一个显然的思路是在$AC$自动机上跑概率$DP$,答案就是当$T=∞$时,从根节点到每个终止节点的概率.那么我们可以建出$trie$图然后求出$trie$图的邻接矩阵,第$…
Description Input 注意 是0<=P, n , l, m≤ 10. Output Sample Input input 1 3 2 2 1 2 1 2 AB BA AA input 2 3 4 2 1 2 1 2 AABA ABAA BAAA Sample Output output 1 0.25 0.50 0.25 output 2 0.31 0.33 0.37 HINT Solution 一个很显然的想法就是我们模拟然后往死里跑,跑到天荒地老,总会跑到精度符合要求的时候┑( ̄…
1444: [Jsoi2009]有趣的游戏 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1007  Solved: 334[Submit][Status][Discuss] Description Input 注意 是0<=P Output Sample Input Sample Output         [题解]   AC自动机+矩阵乘法   首先把模式串建成AC自动机,构建出转移矩阵.   构造方法:a[i][j]表示从第i个结点转移到第…
题目描述 输入 注意 是0<=P 输出 样例输入 样例输出 题解 AC自动机+矩阵乘法 先将所有字符串放到AC自动机中,求出Trie图. 然后构建邻接矩阵:如果x不是某个字符串的末位置,则x连向next[x][i],边权为pi/qi:否则x只连向x,边权为1. 然后这个矩阵的无穷次方即为答案. 由于这个矩阵乘了很多次后概率基本不变,可以认定为答案.所以我们可以将这个矩阵自乘50次(相当于求出这个矩阵的2^50次方),得出答案. #include <cstdio> #include <…
题意: 给定n个长度为l的模式串,现在要用前m个大写字母生成一个随机串,每个字符有自己的出现几率,第一次出现的字符串获胜,求最终每个字符串的获胜几率. 分析: 容易想到先把所有的字符串建成一个AC自动机 然后对于生成的随机串就相当于从AC自动机的root开始在自动机上走,然后求走到每个单词节点的概率 因为这是存在环的,不是DAG图,所以不能直接DP 考虑构造出刚开始的转移矩阵,然后对转移矩阵作矩阵乘法不断迭代就能得到正确答案了 转移矩阵如何建呢? 1)a[i][ch[i][j]]+=p[j] (…
Description Input 注意 是0<=P, n , l, m≤ 10. Output Sample Input input 1 3 2 2 1 2 1 2 AB BA AA input 2 3 4 2 1 2 1 2 AABA ABAA BAAA Sample Output output 1 0.25 0.50 0.25 output 2 0.31 0.33 0.37 解题思路: 可以理解为Trie上倍增佛洛依德做矩乘累和. 代码: #include<cstdio> #inc…
[BZOJ4820][SDOI2017]硬币游戏(高斯消元) 题面 BZOJ 洛谷 题解 第一眼的感觉就是构\(AC\)自动机之后直接高斯消元算概率,这样子似乎就是\(BZOJ1444\)了.然而点数太多了,三方的消元没法做. 考虑如何优化点数,首先我们的所有点可以分为两种,一种是终止节点,另外一种则不是. 既然现在要某一个串出现,因此我们唯一需要考虑的是到达终止节点的情况.设\(f_i\)表示到达第\(i\)个串的终止位置,并且没有到达过其他终止节点的概率,也就是第\(i\)个串的答案.设\(…
定义 解决文本串和多个模式串匹配的问题: 本质是由多个模式串形成的一个字典树,由tie的意义知道:trie上的每一个节点都是一个模式串的前缀: 在trie上加入fail边,一个节点fail边指向这个节点所代表的前缀的最长后缀节点(除开自身的后缀): 也就是说如果x->y,那么y所代表的串是x所代表的串在trie上出现过的最大后缀: 例子 (黑边为trie,红边为fail) 以"hers","she","his","i"为…
题面 题目描述 小阳阳发明了一个有趣的游戏:有n个玩家,每一个玩家均有一个长度为 l 的字母序列,任何两个玩家的字母序列不同.共有m种不同的字母,所有的字母序列都由这m种字母构成,为了方便,我们取大写字母的前.个字母.例如.m =3 , l = 4 , ABAA , CBCA 为两个合法的字母序列.现在由小阳阳来操控一台神奇的机器,每个时刻机器会随机产生一个字母,其中第i种字母随机出来的概率为pi/qi,显然 sum(pi/qi)=1 .这样T个时刻后机器会产生一个长度为 T 的字母序列.如果某…
bzoj1009:kmp想法+递推+矩阵快速幂.很好的想法,考虑用长串去kmp匹配短串,dp[i][j]表示匹配指针分别指在i.j位置时候,前i位母字符串一共有多少种可能性,那么dp[i][j]=Σdp[i-1][k]*p[k][j] p[k][j]就是状态k后加一位数字转移到状态j一种多少种可能(通过自己匹配自己来预处理p),那么可以看做一个矩阵dp[i-1]和p[][]不断相乘,矩阵快速幂即可 bzoj2120:莫对算法.最基础的莫队,O(1)转移的,按照block[l]为第一关键字,r为第…
https://blog.sengxian.com/solutions/bzoj-1444 orz 一直是我想错了,建出AC自动机之后,实际上这个定义是设f[i]为经过i节点的 * 期望次数 * ,因为单词末尾节点走到意味着游戏结束,所以经过单词末尾节点的概率就是经过单词末尾节点的期望次数.为什么是期望呢,因为概率的上限是1,不能随便转移 这样定义状态之后,得到dp转移为 \[ f[i]=\sum_{pr节点可以通过字符c转移到i节点}p[c]*f[pr] \] 因为是期望,所以root节点右边…
AC自动机题目 真的超级感谢xzy 真的帮到我很多 题单 [X] [luogu3808][模板]AC自动机(简单版) https://www.luogu.org/problemnew/show/P3808 [X] [luogu3796][模板]AC自动机(加强版)https://www.luogu.org/problemnew/show/P3796 [ ] [CJOJ1435] [模板题 USACO]AC自动机 https://oj.changjun.com.cn/problem/detail/…
一些题库: bzoj.uoj.luogu(洛谷).CF.loj.hdu.poj.51nod 下面是一些近期的做题记录 省选爆炸-然后大概就先这样了,要回去读一段时间文化课,如果文化课还不错的话也许还会回来- 2020.9.3 这篇停更了吧x过几天开个新的 2018.2.25 ·[bzoj1257]余数之和-数学(根号求和) ·[loj6006]「网络流 24 题」试题库-最大流 ·[bzoj1001]狼抓兔子-最大流最小割 ·[poj3422]Kaka's Matrix Travels-拆点+最…