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 一个很显然的想法就是我们模拟然后往死里跑,跑到天荒地老,总会跑到精度符合要求的时候┑( ̄…
题目描述 输入 注意 是0<=P 输出 样例输入 样例输出 题解 AC自动机+矩阵乘法 先将所有字符串放到AC自动机中,求出Trie图. 然后构建邻接矩阵:如果x不是某个字符串的末位置,则x连向next[x][i],边权为pi/qi:否则x只连向x,边权为1. 然后这个矩阵的无穷次方即为答案. 由于这个矩阵乘了很多次后概率基本不变,可以认定为答案.所以我们可以将这个矩阵自乘50次(相当于求出这个矩阵的2^50次方),得出答案. #include <cstdio> #include <…
今天学校跳蚤市场摆摊聚众吸毒打call,东西卖了一百多好开心_(:з」∠)_ (然后大家中午就去吃了一顿好的x) 下午听演讲然后现在来填坑orz(其实是昨晚的坑) 题目:bzoj1444 先用字符串构造一个AC自动机,对于一个节点$k$来说,转移到$tr[k][i]$的概率是$p[i]$,根据概率构造出转移矩阵,如果一个点是模式串的结尾就自己给自己连一条1,发现一些点之间会相互影响,那么把转移矩阵乘几十次就可以了- (这好像是个马尔科夫链的模型? #include<cstdio> #inclu…
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…
题目描述 输入 注意 是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$图的邻接矩阵,第$…
题面 bzoj 我要向师父学习善待每一只数据结构 考虑成环,那么高斯消元 然鹅这道题太小了 所以直接转移矩阵自乘就好啦 终点不向外连边 有一条向自己的,概率为一的自环来作为结尾 对于其他店 若有边\((u -> v) = p\) 那么mat[u][v] += p #include <cmath> #include <cstring> #include <cstdio> #include <cstdlib> #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 <…
1444: [Jsoi2009]有趣的游戏 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1382  Solved: 498[Submit][Status][Discuss] Description Input 注意 是0<=P Output Sample Input Sample Output HINT  30%的数据保证, n ≤ 2. 50%的数据保证, n ≤ 5. 100%的数据保证, n , l, m≤ 10. Source 析:很容易…
1444: [Jsoi2009]有趣的游戏 题意:每种字母出现概率\(p_i\),有一些长度len的字符串,求他们出现的概率 套路DP的话,\(f[i][j]\) i个字符走到节点j的概率,建出转移矩阵来矩乘几十次可以认为是无穷个字符,就得到概率了 但我们发现Trie图也是图啊,直接高斯消元就好了,\(f[i]\)表示走到节点i的期望次数 注意\(f[0]\)需要+1 #include <iostream> #include <cstdio> #include <cstrin…
诶这题洛谷居然没有??? 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1444 题解: 我见到主要有三种做法. 一是矩阵乘法.设\(dp[t][i]\)表示时间\(t\)之后在AC自动机\(i\)节点的概率,那么转移是一个矩阵乘法的形式,构造转移矩阵\(f\), 如果\(u\)是某个串的结尾点,则\(f[u][u]=1,f[u][v]=0 (v\ne u)\), 否则直接按概率搞. 然后这个矩阵的\(t\)次幂就可以得到\(t\)…