【bzoj4872】[Shoi2017]分手是祝愿 数论+期望dp
题目描述
输入
输出
样例输入
4 0
0 0 1 1
样例输出
512
题解
数论+期望dp,考场上唯一A了的一道题
首先解决正常游戏的操作次数。
易知每个开关都不能被其它的开关组所替代,且每个开关只会影响它和编号比它小的灯。
于是可以从大到小循环一遍,如果一个灯是亮着的,那么把它关闭,把它约数的状态反转,并把$num$++。
即最终有$num$个正确选择。
然后解决期望次数。
设$b[i]$表示从有$i$个正确选择变为有$i-1$个正确选择的期望操作次数。
那么可以推出$b[i]=\frac in+(1-\frac in)·(1+b[i+1]+b[i])$,即$b[i]=\frac{(n-i)b[i+1]+n}i$。
特殊的,$b[n+1]=0$
然后就可以推出$b$数组,再判断一下$num$与$k$的大小关系并累加一下,最后乘一下$n!$即可。
考场原代码(去掉了文件操作):
#include <cstdio>
#define mod 100003
typedef long long ll;
int v[100010];
ll b[100010];
ll qpow(ll x , ll y)
{
ll ans = 1;
while(y)
{
if(y & 1) ans = ans * x % mod;
x = x * x % mod;
y >>= 1;
}
return ans;
}
int main()
{
int n , k , i , j , num = 0;
ll t = 0;
scanf("%d%d" , &n , &k);
for(i = 1 ; i <= n ; i ++ ) scanf("%d" , &v[i]);
for(i = n ; i >= 1 ; i -- )
{
if(v[i])
{
for(j = 1 ; j * j <= i ; j ++ )
{
if(i % j == 0)
{
v[j] ^= 1;
if(j * j != i) v[i / j] ^= 1;
}
}
num ++ ;
}
}
for(i = n ; i >= 1 ; i -- ) b[i] = (b[i + 1] * (n - i) % mod + n) % mod * qpow(i , mod - 2) % mod;
if(n == k || k > num) t = num;
else
{
for(i = num ; i > k ; i -- ) t = (t + b[i]) % mod;
t = (t + k) % mod;
}
for(i = 1 ; i <= n ; i ++ ) t = t * i % mod;
printf("%lld\n" , t);
return 0;
}
【bzoj4872】[Shoi2017]分手是祝愿 数论+期望dp的更多相关文章
- 2018.11.01 bzoj4872: [Shoi2017]分手是祝愿(期望dp)
传送门 一道不错的题. 考虑n==kn==kn==k的时候怎么做. 显然应该从nnn到111如果灯是开着的就把它关掉这样是最优的. 不然如果乱关的话会互相影响肯定不如这种优. 于是就可以定义状态f[i ...
- 【BZOJ4872】[Shoi2017]分手是祝愿 数学+期望DP
[BZOJ4872][Shoi2017]分手是祝愿 Description Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n ...
- 【BZOJ4872】分手是祝愿(期望DP)
题意: B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态,下标为 从 1 到 n 的正整数.每个灯有两个状态亮和灭,我们用 1 来表示这个灯是亮的,用 0 表示这 ...
- BZOJ4872 [六省联考2017]分手是祝愿 【期望dp】
题目 Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态,下标为 从 1 ...
- 洛谷P3750 [六省联考2017]分手是祝愿(期望dp)
传送门 嗯……概率期望这东西太神了…… 先考虑一下最佳方案,肯定是从大到小亮的就灭(这个仔细想一想应该就能发现) 那么直接一遍枚举就能$O(nlogn)$把这个东西给搞出来 然后考虑期望dp,设$f[ ...
- BZOJ4872: [Shoi2017]分手是祝愿【概率期望DP】【思维好题】
Description Zeit und Raum trennen dich und mich. 时空将你我分开.B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态 ...
- 【Luogu】P3750分手是祝愿(期望DP)
题目链接 这题好喵啊…… 设f[i]是最少用i次才能全关上转移到最少用i-1次才能全关上灯的期望值,那么n个灯里有i个是正确的,剩下的都是不正确的 因此期望是$f[i]=frac{n}{i}+frac ...
- [六省联考2017]分手是祝愿(期望+DP)
题解 很容易想出来最优策略是什么. 就是从n到1看到开着的灯就把它关了 我们预处理出当前状态把灯全部关闭后的最少步数cnt 然后我们的主人公就要瞎按... 设dp[i]代表当前状态最优解为i步时走到d ...
- [六省联考2017]分手是祝愿 题解(期望dp)
题目描述 B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态,下标为从 1 到 n 的正整数. 每个灯有两个状态亮和灭,我们用 1 来表示这个灯是亮的,用 0 表示 ...
随机推荐
- C#线程同步技术(一) lock 语句
开篇语: 上班以后,烦恼少了,至少是没有什么好烦的了,只要负责好自己的工作就可以了,因此也有更多的时间去探索自己喜欢的程序.买回来的书已经看了一半,DEMO也敲了不少,昨晚终于在这里开BLOG,记录一 ...
- homebrew osx下面最优秀的包管理工具
官方网站:https://brew.sh/index_zh-cn 安装 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubuserconten ...
- DataProtectionConfigurationProvider加密web.config文件
web.config 文件中经常会包含一些敏感信息,最常见的就是数据库连接字符串了,为了防止该信息泄漏,最好是将相关内容加密. Aspnet_regiis.exe命令已经提供了加密配置文件的方法,系统 ...
- 优化数据页面(22)——n:n的数据关系
设计要点:优化数据页面.界面设计.美化exce 阿金:那n::n就复杂了,你倒是想留有空间. 可是现实社会有时却不同意. 秀秀:唉.说的也是. 阿金:那怎么表达才合适啊? 秀秀:仅仅实用网格了. 阿金 ...
- uva 11400 - Lighting System Design(动态规划 最长上升子序列问题变型)
本题难处好像是在于 能够把一些灯泡换成电压更高的灯泡以节省电源的钱 .所以也才有了对最优方案的探求 好的处理方法是依照电压从小到大排序.仅仅能让前面的换成后面的.也就满足了把一些灯泡换成电压更高的灯泡 ...
- thread_为什么多线程是个坏主意
转 http://ifeve.com/why-threads-bad/ 在 Unix编程艺术 中,提到了尽量避免多线程编程模型, 认为这样只会增加复杂度, 提倡使用多进程, 这样本质上就可以避免多线程 ...
- javascript构造函数的理解
构造函数是在javascript文档的创建对象当中提到的,主要目的是为了解决代码复用,能够大量产生同类型而多作用的方法 在javascript中给出了几种创建对象的模式: 1.对象字面量 例: var ...
- poj1182食物链--并查集
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种.有人用两种说 ...
- ext,exrReturn新增,修改删除等用
package cn.edu.hbcf.common.vo; /** * Ext Ajax 返回对象 * * @author * @date 2012-02-21 19:30:00 * */ publ ...
- Effective C++:条款39:明智而审慎地使用private继承
(一) (1)private继承意味着"依据某物实现出".仅仅有实现部分被继承.接口部分应略去: (2)它仅仅在软件"实现"层面上有意义,在软件"设计 ...