bzoj 4872: [Shoi2017]分手是祝愿 [期望DP]
4872: [Shoi2017]分手是祝愿
题意:n个灯开关游戏,按i后i的约数都改变状态。随机选择一个灯,如果当前最优策略\(\le k\)直接用最优策略。问期望步数\(\cdot n! \mod 1003\)
50% n=k 送分...从大到小选就行了...实际上送了80分...
这个期望DP没想到不应该啊
\(f[i]\)表示还有i步可以结束的期望步数
f[i+1] = ...
\]
但是k=0就gg了
考虑差分f,或者说\(g[i]\)表示i到i-1步的期望步数
\]
答案就是\(g[最优策略步数]\)啰
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N = 1e5+5, P = 100003, mo = P;
inline int read() {
char c=getchar(); int x=0,f=1;
while(c<'0' || c>'9') {if(c=='-')f=-1; c=getchar();}
while(c>='0' && c<='9') {x=x*10+c-'0'; c=getchar();}
return x*f;
}
int n, k, a[N];
int mark[N];
ll inv[N], g[N], fac = 1;
void solve() {
int t = 0;
for(int i=n; i>=1; i--) {
int p = a[i];
for(int j=i+i; j<=n; j+=i) if(mark[j]) p ^= 1;
if(p) mark[i] = 1, t++;
}
if(t <= k) {printf("%lld", t * fac %mo); return;}
inv[1] = 1;
for(int i=2; i<=n; i++) inv[i] = (P - P/i) * inv[P%i] %P;
for(int i=1; i<=k; i++) g[i] = 1;
g[n] = 1;
for(int i=n-1; i>k; i--) g[i] = ((n-i) * g[i+1] %mo + n) * inv[i] %mo;
ll ans = 0;
for(int i=1; i<=t; i++) ans += g[i];
printf("%lld", ans * fac %mo);
}
int main() {
freopen("in", "r", stdin);
n=read(); k=read();
for(int i=1; i<=n; i++) a[i] = read(), fac = fac * i %mo;
solve();
}
bzoj 4872: [Shoi2017]分手是祝愿 [期望DP]的更多相关文章
- 【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]分手是祝愿
Description Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态 ...
- 【bzoj4872】[Shoi2017]分手是祝愿 期望dp
Description Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态 ...
- [BZOJ4872][六省联考2017]分手是祝愿(期望DP)
4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 516 Solved: 342[Submit][Statu ...
- P3750 [六省联考2017]分手是祝愿 期望DP
\(\color{#0066ff}{ 题目描述 }\) Zeit und Raum trennen dich und mich. 时空将你我分开. B 君在玩一个游戏,这个游戏由 \(n\) 个灯和 ...
- 【BZOJ4872】【SHOI2017】分手是祝愿 期望DP
题目大意 有\(n\)盏灯和\(n\)个开关,初始时有的灯是亮的,有的灯是暗的.按下第\(i\)个开关会使第\(j\)盏灯的状态被改变,其中\(j|i\).每次你会随机操作一个开关,直到可以通过不多于 ...
- [六省联考2017]分手是祝愿 期望DP
表示每次看见期望的题就很懵逼... 但是这题感觉还是值得一做,有可借鉴之处 要是下面这段文字格式不一样的话(虽然好像的确不一样,我也不知道为什么,是直接从代码里面复制出来的,因为我一般都是习惯在代码里 ...
- [六省联考2017]分手是祝愿——期望DP
原题戳这里 首先可以确定的是最优策略一定是从大到小开始,遇到亮的就关掉,因此我们可以\(O(nlogn)\)的预处理出初始局面需要的最小操作次数\(tot\). 然后容(hen)易(nan)发现即使加 ...
随机推荐
- Ugly Numbers(STL应用)
题目链接:http://poj.org/problem?id=1338 Ugly Numbers Time Limit: 1000MS Memory Limit: 10000K Total Sub ...
- c# excel 导入 与 导出(可直接用)
c#操作excel方式很多 采用OleDB读取EXCEL文件: 引用的com组件:Microsoft.Office.Interop.Excel.dll 读取EXCEL文件 将EXCEL文件转化成C ...
- 非阻塞式的原子性操作-CAS应用及原理
一:问题抛出 假设在出现高并发的情况下对一个整数变量做依次递增操作,下面这两段代码是否会出现问题? 1. public class IntegerTest { private static Integ ...
- 【深度学习系列】PaddlePaddle可视化之VisualDL
上篇文章我们讲了如何对模型进行可视化,用的keras手动绘图输出CNN训练的中途结果,本篇文章将讲述如何用PaddlePaddle新开源的VisualDL来进行可视化.在讲VisualDL之前,我们先 ...
- 在Intellij idea 2017中运行tomcat 8.5
前提:jdk,tomcat都已安装完,环境变量该配置的都配置了,tomcat localhost:xx 能登上去 首先新建web小项目 new project next 为项目命个名 finis ...
- Java 对二值化图片识别连通域
用Java 对 已经 二值化了的图片 标记连通域 每块的连通域都标记不一样的数字 public static void main(String [] args) throws IOException ...
- python 与rabbitmq
一.rabbitmq简介.安装 简介: MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专 ...
- arcgis地图服务之 identify 服务
arcgis地图服务之 identify 服务 在近期的一次开发过程中,利用IdentityTask工具查询图层的时候,请求的参数中ImageDisplay的参数出现了错误,导致查询直接不能执行,百度 ...
- java面向对象——类
一.类 类(class)是构造对象的模板或蓝图.由类构造(construct)对象的过程称为创建类的实例(instance). 用 java 编写的所有代码都位于某个类的内部.标准的Java 库提供了 ...
- python_变量
python中一切皆对象 什么是变量.变量名? --变量是存放数据的容器,变量名是区分容器的名字 例如 : a = 7,a就是变量的名字,叫a名字指向那个容器存放了数字 7 变量有什么形式? 变量 ...