[六省联考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[ ...
随机推荐
- 50个技巧提高你的PHP网站程序执行效率
1.用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP手册中说echo是语言结构,不是真正的函数,故 把函数加上了双引号). 2.如果能将类的方法定义成static,就尽量定义成static ...
- jQuery选择器、事件、节点、动画效果
一.选择器 基本选择器: 标签选择器: $("h1").css() 类选择器: $(".c").css() id选择器: $(&quo ...
- Win10内核驱动强制签名,申请沃通 EV代码签名证书
2016年7月,微软在MSDN宣布从Windows 10的1607版本开始,强制要求所有新的Win10 内核驱动程序,必须获得Windows硬件开发者中心仪表盘门户的数字签名才能在系统中运行.这项政策 ...
- [USACO18JAN] Lifeguards S (线段树:扫描线面积)
扫描线裸题没什么好说的 注意空间不要开小了!!! #include <cstdio> #include <cstring> #include <algorithm> ...
- noip复习之拓扑排序
之前很多很多紫书上的东西我都忘了…… 抄题解的后果…… 做了一下裸题 https://vjudge.net/problem/UVA-10305 拓扑排序还可以来判环 #include<bits/ ...
- eclipse引入svn插件,并将项目同步到svn
1. eclipse中不存在SVN问题的解决 1.1发现Team->Share project 下没有svn. 1.2下载安装svn插件. 选择help->Eclipse Marketpl ...
- 5.3.5 namedtuple() 创建命名字段的元组结构
在命名元组里.给每一个元组的位置加入一个名称,而且能够通过名称来訪问.大大地提高可读性,以便写出清晰代码,提高代码的维护性.事实上它就像C++里的结构体. collections.namedtuple ...
- 玩转oracle学习第六天
1.上节回想 2.PL/SQL的介绍 3.PL/SQL的基础 理解oracle的pl/sql概念 掌握PL/SQL编程技术(包含编写过程,函数,触发器.包... ) PL/SQL是什么? PL/ ...
- Java 实现适配器(Adapter)模式
平时我们会常常碰到这种情况,有了两个现成的类,它们之间没有什么联系.可是我们如今既想用当中一个类的方法.同一时候也想用另外一个类的方法.有一个解决方法是.改动它们各自的接口.可是这是我们最不愿意看到的 ...
- bzoj2756: [SCOI2012]奇怪的游戏(网络流+分情况)
2756: [SCOI2012]奇怪的游戏 题目:传送门 题解: 发现做不出来的大难题一点一个网络流 %大佬 首先黑白染色(原来是套路...)染色之后就可以保证每次操作都一定会使黑白各一个各自的值加1 ...