洛咕 P3706 [SDOI2017]硬币游戏】的更多相关文章

假设f[i]是第i个同学胜利的概率,也就是随机序列第一个匹配到s[i]的概率 假设前面有一个字符串\(S\),(假设无限长但没有匹配),现在往后面要加上第i个串\(s[i]\),这个的概率设为\(P_i\).因为所有s[i]长度一样,所以每个\(P_i\)都相等. S s[i] 现在在\(S\)后面加\(s[i]\)的时候,可能先匹配到了别的串 S s[i] s[j] 假设\(S\)与\(s[j]\)的匹配长度为\(a\),\(s[i]\)与\(s[j]\)的匹配长度为\(b\),因为\(S\)…
题面 传送门 题解 不知道概率生成函数是什么的可以看看这篇文章,题解也在里面了 //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i) #define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i) #define go(u) for(int i=head[u],v=e[i].v;i;i=e[…
题目:https://www.luogu.org/problemnew/show/P3706 题解:https://blog.csdn.net/gjghfd/article/details/80355976 令 \( p_x \) 表示哪个串都没在结尾匹配上的概率,那么在 \( p_x \) 的基础上再出现 m 个特定的字符就能拼出任意一个串了. 但是在再出现 m 个字符的过程中可能已经匹配上了某个串,比如 HTT 和 THT ,想在 \( p_x \) 的基础上出现 THT 拼出第二个串,但如…
[BZOJ4820][SDOI2017]硬币游戏(高斯消元) 题面 BZOJ 洛谷 题解 第一眼的感觉就是构\(AC\)自动机之后直接高斯消元算概率,这样子似乎就是\(BZOJ1444\)了.然而点数太多了,三方的消元没法做. 考虑如何优化点数,首先我们的所有点可以分为两种,一种是终止节点,另外一种则不是. 既然现在要某一个串出现,因此我们唯一需要考虑的是到达终止节点的情况.设\(f_i\)表示到达第\(i\)个串的终止位置,并且没有到达过其他终止节点的概率,也就是第\(i\)个串的答案.设\(…
1444: [Jsoi2009]有趣的游戏 4820: [Sdoi2017]硬币游戏 这两道题都是关于不断随机生成字符后求出现给定字符串的概率的问题. 第一题数据范围较小,将串建成AC自动机以后,以AC自动机上每个点为一个未知数,列出方程高斯消元求解即可,时间复杂度$O(n^{3}m^{3})$. #include<queue> #include<cstdio> #include<algorithm> #define MN 21 #define ld double #d…
[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 获胜概率…
4820: [Sdoi2017]硬币游戏 链接 分析: 期望dp+高斯消元. 首先可以建出AC自动机,Xi表示经过节点i的期望次数,然后高斯消元,这样点的个数太多,复杂度太大.但是AC自动机上末尾节点只有n个,并且只有n个有用.所以考虑优化一下. 一个串内部的转移是没有必要的,考虑转移到结尾节点的转移. 当前的一个串S如果加入一个字符串T,变成ST,那么一定会结束,因为T这个字符串出现了.但是可能在T的某个前缀就出现了, 即存在一个字符串的后缀是T的前缀,那么统计出这样的转移,然后高斯消元. 加…
BZOJ4820 Sdoi2017 硬币游戏 Description 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利.大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了.同学们觉得要加强趣味性,所以要找一个同学扔很多很多次硬币,其他同学记录下正反面情况.用H表示正面朝上,用T表示反面朝上,扔很多次硬币后,会得到一个硬币序列.比如HTT表示第一次正面朝上,后两次反面朝上.但扔到什么时候停止呢?大家提议,选出n个同学,每个同学猜一个长度为m的序列,当某一个…
[BZOJ4820][Sdoi2017]硬币游戏 Description 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利.大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了.同学们觉得要加强趣味性,所以要找一个同学扔很多很多次硬币,其他同学记录下正反面情况.用H表示正面朝上,用T表示反面朝上,扔很多次硬币后,会得到一个硬币序列.比如HTT表示第一次正面朝上,后两次反面朝上.但扔到什么时候停止呢?大家提议,选出n个同学,每个同学猜一个长度为m的序列,当某…
[BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash) 题面 扔很多次硬币后,用H表示正面朝上,用T表示反面朝上,会得到一个硬币序列.比如HTT表示第一次正面朝上,后两次反面朝上. 选出n个同学,每个同学猜一个长度为m的序列,当某一个同学猜的序列在硬币序列中出现时(匹配时的序列必须连续),就不再扔硬币了,并且这个同学胜利.猜的n个序列两两不同. 假设硬币正反面朝上的概率相同,求每个同学胜利的概率. \(n \leq 300\) 分析 (注意,本题中不区分序列和…