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



题解
很容易想出来最优策略是什么。
就是从n到1看到开着的灯就把它关了
我们预处理出当前状态把灯全部关闭后的最少步数cnt
然后我们的主人公就要瞎按。。。
设dp[i]代表当前状态最优解为i步时走到dp[i-1]用过步数的期望。
现在我们考虑如何转移到dp[i]
当我们这一步走到当前最优策略的一步时。
dp[i]=i/n*1
当我们这一步没有走到当前最优策略的一步时。
dp[i]=(n-i)/n*(dp[i+1]+1+dp[i])
所以 dp[i]=i/n+(n-i)/n*(dp[i+1]+1+dp[i])
化简一下 dp[i]=(n+(n-i)*dp[i+1])/i;
这样求出dp后答案就是dp[1]+dp[2]+...+dp[cnt]
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
const long long N=;
const long long mod=;
vector<long long>vec[N];
long long n,k,inv[N],a[N],cnt,dp[N],ans;
long long read(){
long long sum=,f=;
char ch=getchar();
while(ch<''||ch>''){
if(f=='-')f=-;
ch=getchar();
}
while(ch<=''&&ch>=''){
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
int main(){
n=read();k=read();
// scanf("%d%d",&n,&k);
inv[]=;
for(long long i=;i<=n;i++){
inv[i]=-(mod/i)*inv[mod%i];
inv[i]=(inv[i]%mod+mod)%mod;
}
for(long long i=;i<=n;i++)
for(long long j=i;j<=n;j+=i){
vec[j].push_back(i);
}
for(long long i=;i<=n;i++){
// scanf("%d",&a[i]);
a[i]=read();
}
for(long long i=n;i>=;i--){
if(a[i]){
for(long long j=;j<=vec[i].size()-;j++){
a[vec[i][j]]^=;
}
cnt++;
}
}
dp[n]=;
for(long long i=n-;i>k;i--){
dp[i]=(n+(n-i)*dp[i+])%mod*inv[i]%mod;
}
for(long long i=k;i>=;i--)dp[i]=;
for(long long i=;i<=cnt;i++){
ans+=dp[i];
ans%=mod;
}
for(long long i=;i<=n;i++){
ans*=i;
ans%=mod;
}
printf("%lld",ans);
return ;
}
[六省联考2017]分手是祝愿(期望+DP)的更多相关文章
- [BZOJ4872][六省联考2017]分手是祝愿(期望DP)
4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 516 Solved: 342[Submit][Statu ...
- [六省联考2017]分手是祝愿 期望DP
表示每次看见期望的题就很懵逼... 但是这题感觉还是值得一做,有可借鉴之处 要是下面这段文字格式不一样的话(虽然好像的确不一样,我也不知道为什么,是直接从代码里面复制出来的,因为我一般都是习惯在代码里 ...
- P3750 [六省联考2017]分手是祝愿 期望DP
\(\color{#0066ff}{ 题目描述 }\) Zeit und Raum trennen dich und mich. 时空将你我分开. B 君在玩一个游戏,这个游戏由 \(n\) 个灯和 ...
- [六省联考2017]分手是祝愿——期望DP
原题戳这里 首先可以确定的是最优策略一定是从大到小开始,遇到亮的就关掉,因此我们可以\(O(nlogn)\)的预处理出初始局面需要的最小操作次数\(tot\). 然后容(hen)易(nan)发现即使加 ...
- BZOJ 4872 luogu P3750 [六省联考2017]分手是祝愿
4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description ...
- bzoj千题计划266:bzoj4872: [六省联考2017]分手是祝愿
http://www.lydsy.com/JudgeOnline/problem.php?id=4872 一种最优解是 从大到小灯有亮的就灭掉 最优解是唯一的,且关灯的顺序没有影响 最优解 对每个开关 ...
- [BZOJ4872][六省联考2017]分手是祝愿
BZOJ Luogu sol 首先发现肯定有解,又因为每个位置至多操作一次,所以最优解一定是在\([0,n]\)之间 有一种可以在\(O(\sum_{i=1}^{n}\lfloor\frac{n}{i ...
- luoguP3750 [六省联考2017]分手是祝愿 概率期望DP + 贪心
...........真的神状态了,没办法去想的状态................... 考试的时候选择$50$分贪心+$15$分状压吧,别的点就放弃算了........ 令$f[i]$表示从最小步 ...
- BZOJ4872 [六省联考2017]分手是祝愿 【期望dp】
题目 Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态,下标为 从 1 ...
- 洛谷P3750 [六省联考2017]分手是祝愿(期望dp)
传送门 嗯……概率期望这东西太神了…… 先考虑一下最佳方案,肯定是从大到小亮的就灭(这个仔细想一想应该就能发现) 那么直接一遍枚举就能$O(nlogn)$把这个东西给搞出来 然后考虑期望dp,设$f[ ...
随机推荐
- Build rpm example:zram
rpmbuild #ll zram-1.0.0 total 32 -rw-r--r-- 1 root root 948 Aug 21 16:44 Makefile -rw-r--r-- 1 root ...
- SUSE Linux Enterprise 11 SP4系统安装过程 字符界面
首先开启虚拟机之后显示这个界面: (1) 进入之后显示下面界面,点击Installation安装. (2)进入Welcome界面,选择语言,默认Einglish(US)不需要改动:点击I Agree ...
- Windows 10快速在指定目录打开命令行
一.我们在想要到达的目录上按住shift键并点击鼠标右键.看到了吗,这时候在弹出菜单里多了一个选项,就是"在此处打开命令窗口",我们点开看一下. 二.不过有时候我们需要以管理员的权 ...
- 鸟哥的linux私房菜
http://vbird.dic.ksu.edu.tw/linux_basic/linux_basic.php
- 一种神奇的双向循环链表C语言实现
最近在看ucore操作系统的实验指导.里面提要一个双向循环链表的数据结构,挺有意思的. 其实这个数据结构本身并不复杂.在普通链表的基础上加一个前向指针,我们就得到了双向链表,再把头尾节点连起来就是双向 ...
- Javascript的jsonp原理
Javascript的jsonp原理 首先JSON是一种基于文本的数据交换方式,或者叫做数据描述格式 当一个网页在请求JavaScript文件时则不受是否跨域的影响,凡是拥有”src”这个属性的标 ...
- UVALive 3231 Fair Share
Fair Share Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVALive. Origina ...
- (hdu step 7.1.6)最大三角形(凸包的应用——在n个点中找到3个点,它们所形成的三角形面积最大)
题目: 最大三角形 Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- extjs动态导入
Ext.Loader.setConfig({enabled: true}); Ext.Loader.setPath("util", "../wx/jsUtil" ...
- Mosquito的优化——epoll优化(七)
本文由逍遥子撰写,转发请标注原址: http://blog.csdn.net/houjixin/article/details/46413583 或 http://houjixin.blog.163. ...