原题戳这里

首先可以确定的是最优策略一定是从大到小开始,遇到亮的就关掉,因此我们可以\(O(nlogn)\)的预处理出初始局面需要的最小操作次数\(tot\)。

然后容(hen)易(nan)发现即使加上了随机,那\(tot\)个也一定要被操作,也就是说操作这\(tot\)个之外的都是没用的。

于是就可以\(dp\)了,设\(f[i]\)表示还剩\(i\)个必须要操作的未操作,转移如下:

\(f[i]=\frac{i}{n}+\frac{n-i}{n}(f[i]+f[i+1]+1)\)

移项得到\(f[i]=\frac{(n-i)f[i+1]+n}{i}\)

边界\(f[n]=1\)

最后如果\(tot\leqslant k\)直接输出\(tot*n!\),否则输出\(k+n!\sum\limits_{i=k+1}^{tot}f[i]\)

#include <bits/stdc++.h>

using namespace std;

#define MAXN 100000
#define MOD 100003 int n, k, tot, ans, a[MAXN + 5], f[MAXN + 5], fac = 1;
vector<int> G[MAXN + 5]; int fpow(int x, int p) {
int ret = 1;
while(p) {
if(p & 1) ret = 1LL * ret * x % MOD;
x = 1LL * x * x % MOD;
p >>= 1;
}
return ret;
} int main() {
scanf("%d%d", &n, &k);
for (int i = 1; i <= n; ++i) {
scanf("%d", &a[i]);
for (int j = i; j <= n; j += i) G[j].push_back(i);
fac = 1LL * fac * i % MOD;
}
for (int i = n; i >= 1; --i) {
if(!a[i]) continue;
tot++;
for (auto j : G[i]) a[j] ^= 1;
}
if (tot <= k) ans = 1LL * tot * fac % MOD;
else {
f[n] = 1, ans = k;
for (int i = n - 1; i >= 1; --i) f[i] = (1LL * (n - i) * f[i + 1] % MOD + n) * fpow(i, MOD-2) % MOD;
for (int i = k + 1; i <= tot; ++i) ans = (ans + f[i]) % MOD;
ans = 1LL * ans * fac % MOD;
}
printf("%d\n", ans);
return 0;
}

[六省联考2017]分手是祝愿——期望DP的更多相关文章

  1. [BZOJ4872][六省联考2017]分手是祝愿(期望DP)

    4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 516  Solved: 342[Submit][Statu ...

  2. [六省联考2017]分手是祝愿 期望DP

    表示每次看见期望的题就很懵逼... 但是这题感觉还是值得一做,有可借鉴之处 要是下面这段文字格式不一样的话(虽然好像的确不一样,我也不知道为什么,是直接从代码里面复制出来的,因为我一般都是习惯在代码里 ...

  3. P3750 [六省联考2017]分手是祝愿 期望DP

    \(\color{#0066ff}{ 题目描述 }\) Zeit und Raum trennen dich und mich. 时空将你我分开. B 君在玩一个游戏,这个游戏由 \(n\) 个灯和 ...

  4. BZOJ 4872 luogu P3750 [六省联考2017]分手是祝愿

    4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description ...

  5. bzoj千题计划266:bzoj4872: [六省联考2017]分手是祝愿

    http://www.lydsy.com/JudgeOnline/problem.php?id=4872 一种最优解是 从大到小灯有亮的就灭掉 最优解是唯一的,且关灯的顺序没有影响 最优解 对每个开关 ...

  6. [BZOJ4872][六省联考2017]分手是祝愿

    BZOJ Luogu sol 首先发现肯定有解,又因为每个位置至多操作一次,所以最优解一定是在\([0,n]\)之间 有一种可以在\(O(\sum_{i=1}^{n}\lfloor\frac{n}{i ...

  7. luoguP3750 [六省联考2017]分手是祝愿 概率期望DP + 贪心

    ...........真的神状态了,没办法去想的状态................... 考试的时候选择$50$分贪心+$15$分状压吧,别的点就放弃算了........ 令$f[i]$表示从最小步 ...

  8. BZOJ4872 [六省联考2017]分手是祝愿 【期望dp】

    题目 Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态,下标为 从 1 ...

  9. 洛谷P3750 [六省联考2017]分手是祝愿(期望dp)

    传送门 嗯……概率期望这东西太神了…… 先考虑一下最佳方案,肯定是从大到小亮的就灭(这个仔细想一想应该就能发现) 那么直接一遍枚举就能$O(nlogn)$把这个东西给搞出来 然后考虑期望dp,设$f[ ...

随机推荐

  1. 使用 pycharm调试docker环境运行的Odoo

    2019日 星期一 安装docker windows系统,参考 docker官方文档 Mac系统,参考 docker官方文档 构建自定义ODOO镜像 标准ODOO镜像可能不包含特别的python模块, ...

  2. 如何下载spring sts

    1.打开https://spring.io/ 2.翻到页面最底部点击tools 3.页面下滑点击Download STS4 Windows 64-bit

  3. Springboot 使用Jwt token失效时接口无响应(乌龙)

    问题背景:新项目使用Springboot框架,鉴权使用了Jwt 处理cors: @Configuration public class WebMvcConfig implements WebMvcCo ...

  4. js 跳转传递汉字参数

    父界面: myChart.on('click', function (params) { var dataIndex = params.dataIndex; if(params.name != &qu ...

  5. 利用css 画各种三角形

      #triangle-up {    width: 0;    height: 0;    border-left: 50px solid transparent;    border-right: ...

  6. rownum伪行号-排行榜-分页

    rownum伪行号-排行榜-分页 1.rownum 是oracle数据库特有的一个特性,它针对每一个查询(包括子查询),都会生成一个rownum用于对该次查询进行编号 2.每个rownum只针对当前s ...

  7. C语言 读取配置文件

    配置文件截图: 读取结果截图: 代码转自:http://www.tuicool.com/articles/Zb2iIn 附代码: // ReadConfig.cpp : 定义控制台应用程序的入口点. ...

  8. Javascript绑定事件的两种方式的区别

    命名函数 <input type="button" onclick="check()" id="btn"/> <scrip ...

  9. JavaScript 标准内置对象

    JavaScript 标准内置对象或称全局的对象(global objects)不要和 全局对象(global object)混淆.这里说的全局的对象是说在全局作用域里的对象,全局作用域包含了全局对象 ...

  10. kali linux 安装 qq (deepin-wine)

    添加deeepin-wine 依赖 /etc/apt/sources.list: # Generated by deepin-installer deb http://mirrors.aliyun.c ...