bzoj 4872: [Shoi2017]分手是祝愿
Description
Input
Output
Sample Input
0 0 1 1
Sample Output
HINT
Source
首先k=n的部分分;
考虑到如果要把第n号灯熄灭,那么一定要关第n号灯,同理我们可以从后往前地选择,然后每次sqrt(n)地修改一下每盏灯的状态;
由于每个开关按了两次等于没有按,所以每个开关最多是会按一次,而且通过从后往前的贪心策略,最优的方案是唯一的,但是无关顺序;
那么我们设f[i]为还需要按i步的期望步数,由于最优的方案是确定的,所以我们需要判断这一次随机的开关是否在既定的i步之中;
如果是既定的i步之中的开关,那么步数-1,如果按的是方案之外的开关,因为我们的最优策略是唯一的,所以我们需要再按一次来撤回这一次失误,所以转移大致是这样:
这个貌似不能直接递推,
我们考虑将f[]数组差分,设g[i]=f[i]-f[i-1];
那么我们得出g数组的递推式:
推到过程就是把f[i]用f的递推式表示,然后在把差值用g[i+1]表示之类的;
那么我们的答案为f[p]*n!,其中p为最小的操作步数;
//MADE BY QT666
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define int long long
using namespace std;
typedef long long ll;
const int N=100050;
const int mod=100003;
int a[N],n,k,p;
ll g[N];
ll qpow(ll x,ll y){
ll ret=1;
while(y){
if(y&1) (ret*=x)%=mod;
(x*=x)%=mod;y>>=1;
}
return ret;
}
main(){
scanf("%lld%lld",&n,&k);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=n;i;i--){
if(a[i]){
p++;
for(int j=1;j<=sqrt(i);j++){
if(i%j==0){
if(j*j==i) a[j]^=1;
else a[j]^=1,a[i/j]^=1;
}
}
}
}
if(p<=k) {
int ans=p;
for(int i=1;i<=n;i++) (ans*=i)%=mod;
cout<<ans<<endl;return 0;
}
g[n+1]=0;
for(int i=n;i;i--) g[i]=(g[i+1]*(n-i)+n)*qpow(i,mod-2)%mod;
int ans=k;
for(int i=k+1;i<=p;i++) ans+=g[i];
for(int i=1;i<=n;i++) (ans*=i)%=mod;
printf("%lld\n",ans);
return 0;
}
bzoj 4872: [Shoi2017]分手是祝愿的更多相关文章
- bzoj 4872: [Shoi2017]分手是祝愿 [期望DP]
4872: [Shoi2017]分手是祝愿 题意:n个灯开关游戏,按i后i的约数都改变状态.随机选择一个灯,如果当前最优策略\(\le k\)直接用最优策略.问期望步数\(\cdot n! \mod ...
- 【BZOJ】4872: [Shoi2017]分手是祝愿 期望DP
[题意]给定n盏灯的01状态,操作第 i 盏灯会将所有编号为 i 的约数的灯取反.每次随机操作一盏灯直至当前状态能够在k步内全灭为止(然后直接灭),求期望步数.n,k<=10^5. [算法]期望 ...
- BZOJ 4827 [Shoi2017]分手是祝愿 ——期望DP
显然,考虑当前状态最少需要几步,直接贪心即可. 显然我们只需要考虑消掉这几个就好了. 然后发现,关系式找出来很简单,是$f(i) f(i+1) f(i-1)$之间的. 但是计算的时候并不好算. 所以把 ...
- BZOJ_4872_[Shoi2017]分手是祝愿_概率与期望
BZOJ_4872_[Shoi2017]分手是祝愿_概率与期望 Description Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这 ...
- 【BZOJ4872】[Shoi2017]分手是祝愿 数学+期望DP
[BZOJ4872][Shoi2017]分手是祝愿 Description Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n ...
- SHOI2017 分手是祝愿
分手是祝愿 有
- Bzoj4872: [Shoi2017]分手是祝愿
题面 Bzoj Sol 首先从大向小,能关就关显然是最优 然后 设\(f[i]\)表示剩下最优要按i个开关的期望步数,倒推过来就是 \[ f[i]=f[i-1]*i*inv[n]+f[i+1]*(n- ...
- BZOJ4872:[SHOI2017]分手是祝愿——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=4872 https://www.luogu.org/problemnew/show/P3750 Zei ...
- 2018.11.01 bzoj4872: [Shoi2017]分手是祝愿(期望dp)
传送门 一道不错的题. 考虑n==kn==kn==k的时候怎么做. 显然应该从nnn到111如果灯是开着的就把它关掉这样是最优的. 不然如果乱关的话会互相影响肯定不如这种优. 于是就可以定义状态f[i ...
随机推荐
- 安卓自定义控件(四)实现自定义Layout
本来我是不准备写这篇文章的,我实在想不出有什么样奇怪的理由,会去继承ViewGroup然后自定义一个布局,大概是我的项目经验还不够吧,想了好久,想到了这样一个需求: 需求 如图:在项目中经常有一个这样 ...
- win7及以上系统打开chm空白或显示"无法打开"的2个解决方案
1:在文件上右键单击属性.选择解锁. 2:确保文件路径中没有特殊字符.比如"#".如果路径中存在特殊字符,chm文件可能找不到路径而无法显示.如 d:\资料\c#\***.chm. ...
- HDU1248--完全背包
寒冰王座 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- ThinkPHP的Rbac权限控制
RBAC(Role-Based Access Controll)基于角色的访问控制 在 ThinkPHP3.2.3 中 RBAC 类位于 /ThinkPHP/Library/Org/Util/Rbac ...
- FastDFS教程IV-文件服务器集群搭建
1.简介 本文主要介绍FastDFS文件服务器的集群搭建,在阅读本文之前,您需具备FastDFS文件服务器单节点安装,扩容,迁移等方面的知识.同时,您还需了解Keepalived,nginx方 ...
- Jsoup(一)Jsoup详解(官方)
一.Jsoup概述 1.1.简介 jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API, 可通过DOM,CSS以及类似于jQu ...
- gulp入门详细教程
简介:gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快的编写代码, ...
- onload和ready的区别
onload和ready的区别 1.执行时间 window.onload必须等到页面内包括图片的所有元素加载完毕后才能执行 $(document).read()是DOM结构绘制完毕后就执行,不必等到加 ...
- Nginx软件部署配置过程
---恢复内容开始--- 注意:博主使用的系统为: [root@web01 ~]# uname -a Linux web01 2.6.32-696.el6.x86_64 #1 SMP Tue Mar ...
- UITableView使用过程中可能遇到的问题
前言:记录一些UITableView使用过程中可能遇到的问题 环境:Xcode9 解决UITableViewStyleGrouped类型的TableView的cell距离顶部有距离的问题: table ...