[六省联考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[ ...
随机推荐
- C#基础篇之语言和框架介绍
1.如何描述C#和.NET的关系? .Net的是平台,C#是为了微软公司为了.NET平台开发的面向对象语言. 2.C#能做什么? (1)C#.NET做窗体应用开发,Web开发中可以通过WCF编写Web ...
- 苹果操作系统名称演变史 新名称macOS
历史回顾 发布年代 名称 序号 1994-1999 Classic Mac OS 1-9 2001-2011 Mac OS X 10.0-Lion 2012-2015 OS X Mountain Li ...
- 第六章 Python之迭代器与生成器
迭代器 迭代:迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果是下一次重复的初始值 l=['a','b','c'] count=0 while count < len(l): pri ...
- Springboot统一异常处理(@ControllerAdvice)
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind ...
- POJ 1988 Cube Stacking( 带权并查集 )*
POJ 1988 Cube Stacking( 带权并查集 ) 非常棒的一道题!借鉴"找回失去的"博客 链接:传送门 题意: P次查询,每次查询有两种: M x y 将包含x的集合 ...
- 关于libnmap 的一些应用
随笔描述 nmap 可以进行端口的扫描,在安全或运维中可以说是一款不错的神奇吧,在大部分LINUX 里面都自带了nmap 这款工具,他不仅仅是端口扫描,自身还提供许多插件可以使用. 官方文档 nmap ...
- s5pv210 fimc 之 fimc-dev.c
fimc-dev.c 是Samsung FIMC 设备的V4L2 驱动.上层应用直接操作这个设备,进行capture,图片处理,以及overlay输出 http://blog.csdn.net/cxw ...
- 如何让myeclipse左边选中文件后自动关联右边树
在左侧项目树的右上角下拉菜单里有link with editor 点击即可
- python学习之--安装IDE(eclipse+pydev)
First steps download eclipse url:http://www.eclipse.org/downloads/ select Help -> Install New Sof ...
- Codeforces Round #252 (Div. 2)-C,D
C题就是一个简单的模拟.首先给每一个人两个.然后把剩下的都给一个人就好了. 给的时候蛇形给. #include<stdio.h> #include<string.h> #inc ...