题目

首先看到这个出现长度至少为\(2\)的回文子串

这就等价于不能出现两个连续且相同的字符

于是我们用概率生成函数来搞

设\(g_i\)表示\(i\)次操作后游戏没有结束的概率,\(f_{i,j}\)表示\(i\)次操作之后出现最后两个字符都是\(j\)的概率,这样的话游戏就结束了

再定义\(f_i=\sum_{j=1}^nf_{i,j}\)

我们要求的东西显然就是\(F'(1)\),即期望长度

那个非常有用的\(g_i=g_{i+1}+f_{i+1}\)还是成立的

于是

\[xG(x)+1=F(x)+G(x)\]

代入\(x=1\),并两边求导

\[G(1)=F'(1)\]

显然对于任意的\(F_i(x)\)都会存在

\[G(x)p_i^2x^2=F_i(x)p_ix+F_i(x)\]

就是往一个非结束状态后面强塞两个字符\(i\),代入\(x=1\)就有

\[G(1)p_i^2=F_i(1)(1+p_i)\]

\[F_i(1)=\frac{p_i^2}{1+p_i}G(1)\]

又因为\(\sum_{i=1}^nF_i(1)=1\),于是\(\sum_{i=1}^n\frac{p_i^2}{1+p_i}G(1)=1\),于是答案就是

\[\frac{1}{\sum_{i=1}^n\frac{p_i^2}{1+p_i}}\]

之后发现\(n\leq 10^7\),带\(log\)求逆元显然不是很可行了

于是离线求一下逆元就可以了,就像十二省联考里的D2T3那样就好了

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define re register
const int mod=998244353;
const int maxn=1e7+5;
int n,ans;unsigned int seed;
int fac[maxn],p[maxn];
inline int Rand() {seed=(seed<<2)^(seed>>5)^(seed<<7)^(seed>>11);return seed%mod;
}
inline int ksm(int a,int b) {int S=1;for(;b;b>>=1,a=1ll*a*a%mod) if(b&1) S=1ll*S*a%mod;return S;
}
inline void Generate() { scanf("%d%u",&n,&seed);int sum=0; for(re int i=1;i<n;++i) p[i]=Rand(),sum=(sum+p[i])%mod;  p[n]=(mod+1-sum)%mod;
}
int main() {Generate();fac[0]=1;for(re int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*(p[i]+1)%mod;int Inv=ksm(fac[n],mod-2),inv;for(re int i=n;i;i--) {inv=1ll*Inv*fac[i-1]%mod;ans=(ans+1ll*p[i]*p[i]%mod*inv%mod)%mod;Inv=1ll*Inv*(p[i]+1)%mod;}printf("%d\n",ksm(ans,mod-2));return 0;
}

转载于:https://www.cnblogs.com/asuldb/p/10950678.html

【牛客挑战赛31D】 雷的打字机相关推荐

  1. 牛客挑战赛47 C 条件(Floyd bitset优化)

    牛客挑战赛47 C 条件 思路:首先我们要两个图,一个是一定能到达的,一个是可能到达的,如果我们使用floyd (n^3)就有可能会超时,因为只要求询问能否到达,所以权值只有0和1,那我们可以使用bi ...

  2. 牛客挑战赛47 A 一道GCD问题

    牛客挑战赛47 A 一道GCD问题 思路参考牛客上的题解: 根据多维的更相减损术得gcd(x,y,z)=gcd(x,y−x,z−y)得 gcd(a1+k,a2+k,a3+k-,an+k)=gcd(a1 ...

  3. 牛客挑战赛47 D Lots of Edges(最短路+递归枚举子集)

    牛客挑战赛47 D Lots of Edges 思路:点的权值最多只有(1<<17)-1(131071) ,那我们可以枚举终点的值来算最短路,每个点能连边的值都是固定的,可以通过递归枚举子 ...

  4. 牛客挑战赛42 A.小睿睿的数列

    牛客挑战赛42 A.小睿睿的数列 题目链接 题目描述 小睿睿给了你一个长度为n的数列,他想问你该数列中满足条件(区间内存在某个数是区间内所有数的公因数)的最长区间有多少个 输入描述: 第一行 111 ...

  5. 牛客挑战赛36 - 纸飞机

    题目链接:牛客挑战赛36 - 纸飞机 题目描述 直线上有n座山峰,第i座的高度为hi.从某座山峰上放飞一架纸飞机,它可以从左往右依次经过一系列高度严格递减的山头. 假设五座山峰的高度依次是3,4,3, ...

  6. 牛客挑战赛34 A 能天使的愿望 (dp 分组背包)

    链接:https://ac.nowcoder.com/acm/contest/2271/A 来源:牛客网 题目描述 出题人寄给大家的一些闲话:参加了CSP-J/S 2019 的同学,考的都怎么样啊?不 ...

  7. 牛客挑战赛34 A.能天使的愿望(分组背包)

    链接:https://ac.nowcoder.com/acm/contest/2271/A 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 65536K,其他语言1310 ...

  8. 牛客挑战赛48--A and B

    A-天使果冻 链接:https://ac.nowcoder.com/acm/contest/11161/A 来源:牛客网 题意:一个数组包含n个数,求前i个数的次大值是多少(倘若最大值有两个,则次大值 ...

  9. 【牛客挑战赛46】F.柠檬树

    Description 这是一棵有 n 个柠檬的柠檬树,由 n-1 条枝条连接而成. 秋天了,柠檬都成熟了, 牛牛和牛妹准备选一些柠檬送给他们的朋友们. 对于每一个朋友,牛妹会选择第 l-r 个柠檬送 ...

最新文章

  1. 如何在Gihub上面精准搜索开源项目?
  2. 设置input标签禁用_HTML option 标签
  3. fx2n4ad模块中文手册_三菱特殊模块FX2N-4AD-PT详细说明及编程应用
  4. android实现录像功能吗,Android实现录屏直播(一)ScreenRecorder的简单分析
  5. ubuntu下docker环境、php环境以及laravel的安装
  6. 2010年5月系统集成项目管理工程师上午试卷参考答案(讨论版)
  7. C#中的变量类型(值类型、引用类型)
  8. eclipse--eclipse(JavaEE版本)部署Tomcat工程(转)
  9. JAVA程序设计:接受数字并求和
  10. Android开发常用命令
  11. java 倒计时门栓,同步器
  12. 成功最快的就是改变你这个思维,拥有这个全新的思维
  13. 编程思想 —— 哨兵的使用
  14. Javascript之旅——第十站:为什么都说闭包难理解呢?
  15. 树莓派4B-Python-控制WS2812
  16. java kvm_KVM环境搭建
  17. 计算机模拟专业委员会,中国化工学会过程模拟及仿真专业委员会成立
  18. PAT | 1082 射击比赛 (20分)【附详解】
  19. itextpdf实现PDF模板文件动态赋值和绘制条形码
  20. 美国计算机专业大学排名前30,【最新】2015年美国大学计算机专业排名

热门文章

  1. 部署到ABAP服务器上的SAP UI5应用,其index.html的读取逻辑
  2. 更改软件typera的编辑页面背景色
  3. SAP S/4HANA生产订单创建之后,为什么会自动执行action
  4. 使用jMeter构造大量并发HTTP请求进行微服务性能测试
  5. python下载后是黑的_python下载文件记录黑名单的实现代码
  6. c语言数组与指针的基础知识,C语言学习笔记之数组与指针的关系
  7. 苹果APPLE最新MI芯片笔记本安装第三方内核扩展
  8. 400 bad request 原因_煤气柜腐蚀原因及防腐措施
  9. xshell vim 不能粘贴_编辑器之神——vim的入门指南
  10. jsp获取当前时间存入mysql数据库_jsp获取当前时间插入Mysql数据库?