传送门

嗯……概率期望这东西太神了……

先考虑一下最佳方案,肯定是从大到小亮的就灭(这个仔细想一想应该就能发现)

那么直接一遍枚举就能$O(nlogn)$把这个东西给搞出来

然后考虑期望dp,设$f[i]$表示从$i$个正确选项中选择一个正确的变为$i-1$个的期望次数

那么$$f[i]=\frac{i}{n}+(1-\frac{i}{n})*(1+f[i+1]+f[i])$$

其中$\frac{i}{n}$表示一次就选了正确的选项,$(1-\frac{i}{n})$表示按错了,那么会增加一个正确选项,然后这个时候要按回去次数是$(1+f[i+1]+f[i])$,然后再加上按错的一次

那么移项可得$$f[i]=1+\frac{(n-i)*(f[i]+1)+1}{n}$$

然后只要从后往前递推就可以了

 //minamoto
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[<<],*p1=buf,*p2=buf;
inline int read(){
#define num ch-'0'
char ch;bool flag=;int res;
while(!isdigit(ch=getc()))
(ch=='-')&&(flag=true);
for(res=num;isdigit(ch=getc());res=res*+num);
(flag)&&(res=-res);
#undef num
return res;
}
const int N=,mod=;
int b[N];vector<int> g[N];
int f[N],inv[N],n,k;
void solve(){
int ans=,tp=;
for(int i=;i<=n;++i)
for(int j=i;j<=n;j+=i)
g[j].push_back(i);
for(int i=n;i;--i)
if(b[i]){
++tp;
for(int j=,s=g[i].size();j<s;++j) b[g[i][j]]^=;
}
if(tp<=k) ans=tp;
else{
f[n]=;
for(int i=n-;i;--i) f[i]=(1ll+1ll*(n-i)*(f[i+]+)*inv[i])%mod;
for(int i=tp;i>k;--i) (ans+=f[i])%=mod;
(ans+=k)%=mod;
}
for(int i=;i<=n;++i) ans=1ll*ans*i%mod;
printf("%d\n",ans);
}
int main(){
// freopen("testdata.in","r",stdin);
n=read(),k=read();
for(int i=;i<=n;++i) b[i]=read();
inv[]=;
for(int i=;i<=n;++i) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
solve();
return ;
}

洛谷P3750 [六省联考2017]分手是祝愿(期望dp)的更多相关文章

  1. 洛谷 P3750 [六省联考2017]分手是祝愿

    传送门 题解 //Achen #include<algorithm> #include<iostream> #include<cstring> #include&l ...

  2. [bzoj4872] [洛谷P3750] [六省联考2017] 分手是祝愿

    Description Zeit und Raum trennen dich und mich. 时空将你我分开. \(B\) 君在玩一个游戏,这个游戏由 \(n\) 个灯和 \(n\) 个开关组成, ...

  3. 洛谷 P3750 - [六省联考2017]分手是祝愿(期望 dp)

    题面传送门 首先我们需注意到这样一个性质:那就是对于任何一种状态,将其变为全 \(0\) 所用的最小步数的方案是唯一的--考虑编号为 \(n\) 的灯,显然如果它原本是暗着的就不用管它了,如果它是亮着 ...

  4. P3750 [六省联考2017]分手是祝愿 期望DP

    \(\color{#0066ff}{ 题目描述 }\) Zeit und Raum trennen dich und mich. 时空将你我分开. B 君在玩一个游戏,这个游戏由 \(n\) 个灯和 ...

  5. [BZOJ4872][六省联考2017]分手是祝愿(期望DP)

    4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 516  Solved: 342[Submit][Statu ...

  6. [六省联考2017]分手是祝愿 期望DP

    表示每次看见期望的题就很懵逼... 但是这题感觉还是值得一做,有可借鉴之处 要是下面这段文字格式不一样的话(虽然好像的确不一样,我也不知道为什么,是直接从代码里面复制出来的,因为我一般都是习惯在代码里 ...

  7. [六省联考2017]分手是祝愿——期望DP

    原题戳这里 首先可以确定的是最优策略一定是从大到小开始,遇到亮的就关掉,因此我们可以\(O(nlogn)\)的预处理出初始局面需要的最小操作次数\(tot\). 然后容(hen)易(nan)发现即使加 ...

  8. BZOJ 4872 luogu P3750 [六省联考2017]分手是祝愿

    4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description ...

  9. luogu P3750 [六省联考2017]分手是祝愿

    luogu loj 可以发现在最优策略中,每种操作最多只会做一次,并且操作的先后顺序并不会影响答案,所以考虑从后往前扫,碰到一个\(1\)就对这个位置\(i\)进行操作,这样的操作一定是最优策略.记最 ...

随机推荐

  1. redis安装包下载

    redis linux版安装包下载地址 http://download.redis.io/releases/

  2. 前端基础之---css

    css  介绍 css 规则有两个主要的部分构成 : 选择器  , 以及一条或多条声明. 现在的互联网前端分为三层 : ● HTML :超文本标签机语言,从语义的角度描述页面结构. ● CSS : 层 ...

  3. jQuery 网页禁止复制

    <script type="text/javascript">    $(document).ready(function(){         $('#文本框id') ...

  4. 【转】ios内联函数 inline

    ios内联函数 inline 缘由 由于在学习使用UIScrollVew开发的过程中,碰到下面这个属性(设置内边距): @property(nonatomic) UIEdgeInsets scroll ...

  5. plsql连接oracle 64位数据库ORA-12514错误

    今天帮小师妹还原数据库,删除表空间的时候把数据库搞坏了,plsql连接时报了 ORA-12514: TNS:listener does not currently know of service re ...

  6. 世界各国Google网址大全

    http://www.oschina.net/question/100896_50293 冰岛 https://www.google.is/ 丹麦 https://www.google.dk/ 挪威  ...

  7. IntelliJ IDEA 中详细图解记录如何连接MySQL数据库

  8. win32com操作word(2):常用用法

    一.对象的位置关系: 1.Range属性位于(部分): Selection__Section__Cell__Paragraph__Table__Bookmark__Comment__Row__List ...

  9. TF-IFD算法及python实现关键字提取

    TF-IDF算法: TF:词频(Term Frequency),即在分词后,某一个词在文档中出现的频率. IDF:逆文档频率(Inverse Document Frequency).在词频的基础上给每 ...

  10. MySql 官方存储引擎

    存储引擎是为不同的表类型处理 SQL 操作的 MySql 组件.InnoDB 是默认的.最通用的存储引擎,也是官方推荐使用的存储引擎,除非一些特定案例.MySql 5.6 中的 CREATE TABL ...