【BZOJ】4872: [Shoi2017]分手是祝愿 期望DP
【题意】给定n盏灯的01状态,操作第 i 盏灯会将所有编号为 i 的约数的灯取反。每次随机操作一盏灯直至当前状态能够在k步内全灭为止(然后直接灭),求期望步数。n,k<=10^5。
【算法】期望DP
【题解】对于当前状态,编号最大的亮灯必须通过操作自身灭掉。
证明:假设通过操作编号更大的灯灭掉,那么编号更大的灯只能通过操作自己灭掉,则与原来状态无区别,得证。
运用这个结论,每次灭掉最大编号的灯后的局面中,编号最大的灯一定严格小于原最大灯,所以至多需要n次操作。
从大到小,处理出m盏待操作灯,这样一个局面就可以描述成待操作灯的数目,从而考虑期望DP。
最直观地,设f[i]表示剩余 i 盏操作灯的期望步数,根据全期望公式:
$$f[i]=\frac{i}{n}*f[i-1]+\frac{n-i}{n}*f[i+1]+1$$
等等,高斯消元?不资瓷!我们想办法变成单方向DP,去掉f[i-1]。
设f[i]表示从 i 盏待操作灯变成 i-1 盏待操作灯的期望步数,那么根据全期望公式:(省略i/n*0)
$$f[i]=\frac{n-i}{n}*(f[i+1]+f[i])+1$$
好啦!移项即可计算f[i],最后:
$$ans=\sum_{i=k+1}^{m}f[i]*n!$$
复杂度O(n√n)。
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=,MOD=;
int n,m,k,ans,a[maxn],f[maxn];
void exgcd(int a,int b,int &x,int &y){if(!b){x=;y=;}else{exgcd(b,a%b,y,x);y-=x*(a/b);}}
int inv(int a){int x,y;exgcd(a,MOD,x,y);return (x%MOD+MOD)%MOD;}
int main(){
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
for(int i=n;i>=;i--)if(a[i]){
m++;
for(int j=;j*j<=i;j++)if(i%j==){
if(j*j==i)a[j]^=;else a[j]^=,a[i/j]^=;
}
}
for(int i=n;i>k;i--)f[i]=(n+1ll*(n-i)*f[i+]%MOD)*inv(i)%MOD;
if(m<=k)ans=m;else{
for(int i=m;i>k;i--)ans=(ans+f[i])%MOD;
ans=(ans+k)%MOD;
}
for(int i=;i<=n;i++)ans=1ll*ans*i%MOD;
printf("%d",ans);
return ;
}
【BZOJ】4872: [Shoi2017]分手是祝愿 期望DP的更多相关文章
- bzoj 4872: [Shoi2017]分手是祝愿 [期望DP]
4872: [Shoi2017]分手是祝愿 题意:n个灯开关游戏,按i后i的约数都改变状态.随机选择一个灯,如果当前最优策略\(\le k\)直接用最优策略.问期望步数\(\cdot n! \mod ...
- BZOJ 4827 [Shoi2017]分手是祝愿 ——期望DP
显然,考虑当前状态最少需要几步,直接贪心即可. 显然我们只需要考虑消掉这几个就好了. 然后发现,关系式找出来很简单,是$f(i) f(i+1) f(i-1)$之间的. 但是计算的时候并不好算. 所以把 ...
- bzoj 4872: [Shoi2017]分手是祝愿
Description Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态 ...
- 【bzoj4872】[Shoi2017]分手是祝愿 期望dp
Description Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态 ...
- [BZOJ4872][六省联考2017]分手是祝愿(期望DP)
4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 516 Solved: 342[Submit][Statu ...
- P3750 [六省联考2017]分手是祝愿 期望DP
\(\color{#0066ff}{ 题目描述 }\) Zeit und Raum trennen dich und mich. 时空将你我分开. B 君在玩一个游戏,这个游戏由 \(n\) 个灯和 ...
- 【BZOJ4872】【SHOI2017】分手是祝愿 期望DP
题目大意 有\(n\)盏灯和\(n\)个开关,初始时有的灯是亮的,有的灯是暗的.按下第\(i\)个开关会使第\(j\)盏灯的状态被改变,其中\(j|i\).每次你会随机操作一个开关,直到可以通过不多于 ...
- [六省联考2017]分手是祝愿 期望DP
表示每次看见期望的题就很懵逼... 但是这题感觉还是值得一做,有可借鉴之处 要是下面这段文字格式不一样的话(虽然好像的确不一样,我也不知道为什么,是直接从代码里面复制出来的,因为我一般都是习惯在代码里 ...
- [六省联考2017]分手是祝愿——期望DP
原题戳这里 首先可以确定的是最优策略一定是从大到小开始,遇到亮的就关掉,因此我们可以\(O(nlogn)\)的预处理出初始局面需要的最小操作次数\(tot\). 然后容(hen)易(nan)发现即使加 ...
随机推荐
- 第三章 广义线性模型(GLM)
广义线性模型 前面我们举了回归和分类得到例子.在回归的例子中,$y \mid x;\theta \sim N(u,\sigma ^{2})$,在分类例子中,$y\mid x;\theta \sim ...
- Linux安装weblogic
一.软件安装 1. 安装前的准备工作 1.1 首先请确认您要安装的WebLogic版本所在的平台已通过了BEA的认证,完整的认证平台列表请参考 http://e-docs.bea.com/wls/ce ...
- QList和QVector使用
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QList和QVector使用 本文地址:http://techieliang.com ...
- week1读构建之法-读书笔记
最开始听见杨老师说邹欣老师这个名字总觉得很熟悉,后来看见博客上老师的头像恍然大悟,原来机缘巧合已经在微博上关注邹老师许久,一直觉得邹老师是个很有意思的人,兴趣一定十分广泛,看了老师的书确实能感觉到邹老 ...
- 【.Net】在WinForm中选择本地文件
相信很多朋友在日常的编程中总会遇到各钟各样的问题,关于在WinForm中选择本地文件就是很多朋友们都认为很难的一个学习.net的难点, 在WebForm中提供了FileUpload控件来供我们选择本地 ...
- 小程序 setData() 方法
setData() 参数格式 字段 类型 必填 描述 最低版本 data Object 是 这次要改变的数据 callback Function 否 回调函数 1.5.0 callback 是一个 ...
- SPOJ PGCD
今天做的一个很有成就感的题目,虽然经过我一个上午的痛苦挣扎,但是我觉得这个时间还是花的挺有意义的. 题目的意思是给你a和b两个数(范围是10^7),从1-a选一个数x,从1-b中间选择一个数,问你能选 ...
- 洛谷 P1495 曹冲养猪
这是一道标准的孙子定理的题,题意浅显,思路明确 然后我就交了整整16遍啊,欺负人啊,题解暴力就能过,我就TLE ..悲惨的提交记录 下面是题面 题目描述 自从曹冲搞定了大象以后,曹操就开始捉摸让儿子干 ...
- C++解析(11):对象的构造
0.目录 1.对象的初始化 2.构造函数 3.无参构造函数与拷贝构造函数 4.小结 1.对象的初始化 对象中成员变量的初始值是多少? 下面的类定义中成员变量i和j的初始值是什么? 从程序设计的角度,对 ...
- 【题解】APIO2014回文串
哇哦~想不到我有生之年竟然能够做出字符串的题目ヾ(✿゚▽゚)ノ虽然这题比较裸但依然灰常开心! 首先有一个棒棒的性质:本质不同的回文串最多有 O(n) 个.首先 manacher 把它们都找出来,然后问 ...