当前位置: 首页 > news >正文

传话游戏 题解

传话游戏 题解

题目描述

初始时你有一个长度为 \(m\) 的字符串 $ S_1 $ ,然后你可以进行 $ n-1 $ 次操作,每次操作修改当前字符串,形如删掉其中某些元素(可以全删,也可以都不删)。第 \(i\) 次操作得到的字符串记为 $ S_{i+1} $ ,这样得到了由 \(n\) 的字符串形成的序列 \(S\) ,问有多少种本质不同的序列?(对 $ 10^9 + 7 $ 取模。)

$ 1 \le n \le 10^9 , 1 \le (S_1)_i \le m \le 200 $

关键结论

如果你是一个有经验的选手,你就会对初始的每个元素赋一个存活时间 $ t_i $ ,表示该元素至多在 $ t_i $ 时刻还没有被删除。

注意到当两个相同的元素相邻时,删除哪一个都没有区别,那么我们钦定先删除后一个(如果有先后顺序的话),即 $ i < j , t_i > t_j $ 。换言之,对于一个 \(i\) ,设 \(j\) 为满足 $ j > i , t_j > t_i $ 的最小的 \(j\) ,若 $ (S_1)_i = (S_1)_j $ ,那么这个序列就是非法的(与其他情况重复)。

现在我们断言,每个合法的序列 \(t\) ,一定对应着两两不同的序列 \(S\) ,两者构成双射,证明不难的。只要对序列 \(t\) 计数就是答案。

朴素实现

扔到笛卡尔树上跑DP,设 $ f_{l,r,x} $ 表示区间 $ [l,r] $ 的的最大值为 \(x\) (有相同的认为靠前的更大)。

转移时,枚举一个 $ mid $ 表示当前区间的最大值的位置。

\[f_{l,r,x} = \sum_{mid} [ (S_1)_{r+1} \neq (S_1)_{mid} ] \times \sum_{ i<x } \sum_{ j \le x } f_{l,mid-1,i} \times f_{mid+1,r,j} \]

解释一下,由于这是一个类似于笛卡尔树的结构,限制是根节点的左子树的右链上的元素均与根节点不同。转移时枚举最大值的位置,那对于区间 $ [l,r] $ 来说, $ t_{r+1} $ 一定大于其中的所有元素的存活时间,所以 $ (S_1){r+1} \neq (S_1) $ 是必要的,不然会出现不合法的转移。

前缀和优化一下,记 $ s_{l,r,x} = \sum_{ i \le x } f_{l,r,i} $ ,可以做到 $ O(m ^3 n ) $ 的优秀复杂度,答案即为 $ s_{1,m,n} $

	for(int k=1;k<=n;k++)f[l][r][k]=(f[l][r][k]+s[l][mid-1][k-1]*s[mid+1][r][k])%mod;

拉插优化

直接上结论,$ f_{l,r} $ 是一个关于 $ x $ 的 $ r-l $ 次多项式。

首先,若 $ f_{l,r} $ 是一个 \(k\) 次多项式,那么对其中的一项做前缀和,是一个等比数列求和的形式,所以 $ s_{l,r} $ 是一个 $ k+1 $ 次多项式。

当 $ l=r $ ,不妨认为是一个0次多项式。再根据上述转移方程,显然可以归纳证明 $ s_{1,m} $ 是 $ m+1 $ 次多项式。

求出前 $ m+1 $ 项值,最后朗格朗日差值求第 \(n\) 项,复杂度 $ O(m^4) $ ,常数小,可以过。

http://www.hskmm.com/?act=detail&tid=9223

相关文章:

  • 智驾芯片三强对决:征程6P vs EyeQ Ultra vs Thor
  • 0132_访问者模式(Visitor)
  • 国内AI云市场:挤不进前三,生存将成问题!
  • P14053 [SDCPC 2019] Median 题解
  • lQueryDef查询Evaluate报该几何不包含M值问题。
  • 我的首个RCE漏洞发现之旅:Apache ActiveMQ远程代码执行实战
  • 北京市社保费用差额补缴计算工具
  • 使用自签名SSL证书有什么风险?
  • CDN可以使用iTrustSSL通配符证书吗?
  • OpenCvSharp基于颜色反差规避FBA面单贴标
  • AI CodeReview + Devops协同
  • 【API接口】最新可用手机号归属地查询接口
  • 【API接口】最新可用IP地址查询接口
  • UE5创建的对象无法用ai操控
  • 【API接口】最新可用喜马拉雅接口
  • 25/09/18 小结
  • 【API接口】最新可用番茄畅听接口
  • 【API接口】最新可用七猫短剧接口
  • 磁盘分析工具推荐(Wiztree)
  • 用FastAPI和Streamlit实现一个ChatBot
  • 搜索百科(2):Apache Solr — 企业级搜索的开源先锋
  • Markbook Day03
  • re分区为y盘,efi分区为z盘
  • 数组,java学习第五天
  • 文件结构与数据分析专项-解析
  • 销售能力——Steam平台我们应该做什么游戏?
  • 平静
  • 2025.9.18总结
  • Codeforces 2144F Bracket Groups 题解 [ 紫 ] [ AC 自动机 ] [ DP ] [ 构造 ]
  • Java进制,数据类型拓展Unicode编码学习