LA3490 Generator(KMP + 高斯消元)】的更多相关文章

题意 一开始给你一个长为 \(S\) 的字符串. 从空串开始,不断在后面添加一个 \([A, A + n]\) 的一个字符. 第一次包含 \(S\) 的时候会停止添加.问期望的添加次数. 有 \(T\) 组数据. \(T \le 10, |S| \le 12, n \le 26\) 题解 单模板匹配的直接用 \(\mathrm{KMP}\) 就可以了. 那么我们枚举 \(S\) 第 \(i\) 位 \(S_i\) ,然后枚举当前这位填的数 \(c\) ,那么就会转移到 \(S_{\delta (…
4820: [Sdoi2017]硬币游戏 Time Limit: 10 Sec  Memory Limit: 128 MB Description 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利.大家纷纷觉得这个游戏非常符 合同学们的特色,但只是扔硬币实在是太单调了.同学们觉得要加强趣味性,所以要找一个同学扔很多很多次硬币 ,其他同学记录下正反面情况.用H表示正面朝上,用T表示反面朝上,扔很多次硬币后,会得到一个硬币序列.比 如HTT表示第一次正面朝上,后两次反面朝上.…
UVA 1358 - Generator option=com_onlinejudge&Itemid=8&page=show_problem&category=524&problem=4104&mosmsg=Submission+received+with+ID+14082913" target="_blank" style="">题目链接 题意:有m种字符(从'A'開始往后数的大写字母),如今有一个字符串,长…
有点神,按照1444的做法肯定会挂 注意到它的概率是相同的,所以可以简化状态 详见http://www.cnblogs.com/candy99/p/6701221.html https://www.cnblogs.com/liu-runda/p/6919077.html 总之就是靠在kmp中的ne数组上跳来找到对当前串概率有影响的串然后把概率加起来-- #include<iostream> #include<cstdio> #include<cmath> using n…
[Sdoi2017]硬币游戏 题意:硬币序列,H T等概率出现,\(n \le 300\)个人猜了一个长为$ m \le 300$的字符串,出现即获胜游戏结束.求每个人获胜概率 考场用了[1444: Jsoi200]有趣的游戏的做法,40分 标解好神! 思想就是用N表示所有没有人获胜的状态,然后列方程 对于A,B两个串 例如: A=TTH, B=HTT 那么N+TTH一定会到终止点,但不一定TTH加完后才停止 NTTH = A + BH + BTH 0.125N = A + 0.75B 获胜概率…
BZOJ 洛谷 建出AC自动机,每个点向两个儿子连边,可以得到一张有向图.参照 [SDOI2012]走迷宫 可以得到一个\(Tarjan\)+高斯消元的\(O((nm)^3)\)的做法.(理论有\(60\)分啊但是第\(5.6\)个点WA了smg) 其实\(O((nm)^3)\)就是 [JSOI2009]有趣的游戏...只需建出AC自动机一遍高斯消元即可,比上面那个不知道好写到哪里去.. \(40\)分的做法问题在于状态(变量)太多.考虑把类似的状态合并成一个. 假设现在一共有两个串\(TTH\…
比较神的一道题,正解比较难以理解. 首先不难得出一个(nm)^3的算法,对所有串建AC自动机,将在每个点停止的概率作为未知数做高斯消元即可. 可以证明,AC自动机上所有不是模式串终止节点的点可以看成一个点,不妨合并为同一个点(n+1号点). 对于一个模式串,它肯定是从n+1号点走了m步后到达的,概率为0.5^m.但是有可能还没走到m步的时候就已经匹配上另一个串了(可能是它本身),那么这另一个串的后缀一定是这个串的前缀.枚举这种串的位置,将它的概率贡献减去. 这样就是单模式串匹配问题了,可以用KM…
容易想到的做法是建出AC自动机,高斯消元.然而自动机上节点数量是nm的. 注意到我们要求的变量只有n个,考虑将其他不用求的节点合并为一个变量.这个变量即表示随机生成一个串,其不包含任何一个模板串的概率. 现在即有n+1个变量,考虑列出n+1个方程.设pi表示第i个人胜利的概率,显然有Σpi=1.然后对每个pi列一个方程,即考虑其胜利概率.在无胜利者的随机串后面接上这个串,这样这个人有可能成为胜利者,但也有可能之前的随机串加上这个串的一段前缀后已经包含了另一个串(可能是其自身),需要减掉这一部分.…
初始有一个空串s,从前n个大写字母中不断随机取出一个字母添加到s的结尾,出现模式串t时停止,求停止时s的长度期望. 这道题解法不唯一,比较无脑的方法是对模式串t建一个单串AC自动机,设u为自动机上的一个结点,dp[u]为从该结点出发走到终结状态时的期望步数,则dp[u]=∑(1+dp[v])/n,v为u的后继状态.特别地,终结状态的dp值为0. 这样一来,就可以列出线性方程组进行高斯消元了.由于答案非常大,用double会损失精度,所以改成longlong. 由于有除法的存在,为了防止出现除不开…
做法太神了,理解不了. 自己想到的是建出AC自动机然后建出矩阵然后求逆计算,感觉可以过$40%$ 用一个状态$N$表示任意一个位置没有匹配成功的概率和. 每种匹配不成功的情况都是等价的. 然后我们强制在后面加上长度为m的01串,那么这个串的概率是一定的. 然后考虑加上的这些字符还能拼成什么串,因为状态$N$的末尾是不确定的. 如果另外一个串的后缀等于这个串的前缀的话,是可能带来影响的. 所以计算出影响的概率,然后高斯消元即可. 然而有一个问题,N的概率最后消出来代表什么意思啊,是指期望的长度吗?…