bzoj千题计划266:bzoj4872: [六省联考2017]分手是祝愿
http://www.lydsy.com/JudgeOnline/problem.php?id=4872
一种最优解是 从大到小灯有亮的就灭掉
最优解是唯一的,且关灯的顺序没有影响
最优解 对每个开关至多操作1次,(连带着的灯的亮灭改变不算)
设最优解 需要操作cnt次,那么就有cnt盏灯是正确的选择
设 f[i] 表示 有i种正确的选择 变为 有i-1种正确的选择 的 期望次数
那么在n盏灯中,有i盏灯操作1次 就可以 减少一次正确选择
有n-i盏灯是错误的选择,选了它还要把它还原,还原它也是一种正确选择,就是f[i+1];一次错误的选择 做了一次 操作 就是1;当然也要变成i-1种正确选择
所以

边界:f[n]=1,随便选择任何一盏灯都是正确选择
#include<cstdio>
#include<vector>
using namespace std; #define N 100001 bool a[N]; vector<int>V[N]; int f[N],inv[N]; const int mod=; int main()
{
int n,k;
scanf("%d%d",&n,&k);
for(int i=;i<=n;++i) scanf("%d",&a[i]);
for(int i=;i<=n;++i)
for(int j=i;j<=n;j+=i)
V[j].push_back(i);
int cnt=,ans=;
for(int i=n;i;--i)
if(a[i])
{
cnt++;
int m=V[i].size();
for(int j=;j<m;++j) a[V[i][j]]^=;
}
if(cnt<=k) ans=cnt;
else
{
inv[]=;
for(int i=;i<n;++i) inv[i]=1LL*(mod-mod/i)*inv[mod%i]%mod;
f[n]=;
for(int i=n-;i;--i) f[i]=(+1LL*(n-i)*(+f[i+])*inv[i])%mod;
for(int i=cnt;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);
}
4872: [Shoi2017]分手是祝愿
Time Limit: 20 Sec Memory Limit: 512 MB
Submit: 466 Solved: 304
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
0 0 1 1
Sample Output
HINT
Source
bzoj千题计划266:bzoj4872: [六省联考2017]分手是祝愿的更多相关文章
- [BZOJ4872][六省联考2017]分手是祝愿(期望DP)
4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 516 Solved: 342[Submit][Statu ...
- [BZOJ4872][六省联考2017]分手是祝愿
BZOJ Luogu sol 首先发现肯定有解,又因为每个位置至多操作一次,所以最优解一定是在\([0,n]\)之间 有一种可以在\(O(\sum_{i=1}^{n}\lfloor\frac{n}{i ...
- BZOJ4872 [六省联考2017]分手是祝愿 【期望dp】
题目 Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态,下标为 从 1 ...
- BZOJ 4872 luogu P3750 [六省联考2017]分手是祝愿
4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description ...
- [bzoj4872] [洛谷P3750] [六省联考2017] 分手是祝愿
Description Zeit und Raum trennen dich und mich. 时空将你我分开. \(B\) 君在玩一个游戏,这个游戏由 \(n\) 个灯和 \(n\) 个开关组成, ...
- [bzoj 4872][六省联考2017]分手是祝愿
传送门 Description N个灯按照1~N标号,按下一个开关i,所有标号是i的约数的开关都改变状态,目标是关掉所有的灯,如果当前最优策略≤k就直接按照最优策略走.否则随机按下一个开关.给出每个灯 ...
- [六省联考2017]分手是祝愿 期望DP
表示每次看见期望的题就很懵逼... 但是这题感觉还是值得一做,有可借鉴之处 要是下面这段文字格式不一样的话(虽然好像的确不一样,我也不知道为什么,是直接从代码里面复制出来的,因为我一般都是习惯在代码里 ...
- P3750 [六省联考2017]分手是祝愿 期望DP
\(\color{#0066ff}{ 题目描述 }\) Zeit und Raum trennen dich und mich. 时空将你我分开. B 君在玩一个游戏,这个游戏由 \(n\) 个灯和 ...
- [六省联考2017]分手是祝愿——期望DP
原题戳这里 首先可以确定的是最优策略一定是从大到小开始,遇到亮的就关掉,因此我们可以\(O(nlogn)\)的预处理出初始局面需要的最小操作次数\(tot\). 然后容(hen)易(nan)发现即使加 ...
随机推荐
- kubernetes(k8s) 的常用命令
1.查询副本[root@master ~]# kubectl get pods2.删除一个副本[root@master ~]# kubectl get pods 3.启动一个容器副本[root@mas ...
- supervisor管理进程 superlance对进程状态报警
supervisor介绍 首先,介绍一下supervisor.Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linu ...
- Appium自动化部署及连接Appium服务
Appium自动化部署: 1)安装appium桌面程序安装:超链接 2)安装客户端 pip install appium-python-client 3)安装服务器 安装 Nodejs 4)连接app ...
- Call actvity after viewpager is finished
private OnPageChangeListener mListener = new OnPageChangeListener() { @Override public void onPageSe ...
- PAT甲题题解-1012. The Best Rank (25)-排序水题
排序,水题因为最后如果一个学生最好的排名有一样的,输出的课程有个优先级A>C>M>E那么按这个优先级顺序进行排序每次排序前先求当前课程的排名然后再与目前最好的排名比较.更新 至于查询 ...
- linux gcc编译多个源文件的方法
http://blog.csdn.net/yinjiabin/article/details/7731817
- Linux内核分析 NO.3
跟踪分析Linux内核的启动过程 于佳心 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002 ...
- 四则运算level2
package j; import java.util.Scanner; public class Main { public static void main(String[] args) { Sc ...
- C++学习记录(留坑)
#include <iostream> #include <ctime> #include <fstream> ///文件打开有o.i权限 #include < ...
- sublime text3 增加emmett插件
本内容基于Windows环境)一.已安装有Sublime Text3 二.安装Package Control 安装这个后,可以在线安装所需的插件 方法1.Ctrl+~打开控制台,在控制台输 ...