【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 表示 ...
随机推荐
- PHP中文乱码的常见解决方法总结
PHP中文乱码是PHP开发中的常见问题之一.PHP中文乱码有时发生在网页本身,有些产生在于MySQL交互的过程中,有时与操作系统有关.下面进行一番总结. 一.首先是PHP网页的编码 1. php文件本 ...
- 在项目中增加自定义icon图标
以MUI框架为例,内容来自于MUI官网. mui如何增加自定义icon图标 mui框架遵循极简原则,在icon图标集上也是如此,mui仅集成了原生系统中最常用的图标:其次,mui中的图标并不是图片,而 ...
- Android Shell Cmd
1. view android version: grep ro.build.version.sdk= system/build.prop getprop ro.build.version.relea ...
- jsp版本的环境变量集合
System.out.println("Protocol: " + request.getProtocol());System.out.println("Scheme: ...
- 聚合类新闻client的改进
zaker和鲜果是最早的聚合类新闻产品.前几年发展非常快.迅速占据了市场,但近两年发展变得缓慢.而今日头条自公布以来才两年.用户量就迅速超过了zaker和鲜果.使用起来非常easy,左右滑动 ...
- 设计模式_CallBack
一.基本概念 if you call me, i will call back 什么是回调函数 回调函数(callback Function),顾名思义,用于回调的函数. 回调函数只是一个功能片段, ...
- [个人开发人员赚钱九]做一个日收入10元的APP!
[导语]尽管讲了非常多个人开发人员的文章.但新手开发人员怎样赚自己的第一个10块钱.确是最难的事情.群里有人说都不知道干什么app赚钱.全然没有想法.而且常常问我有什么高速赚钱的方法.我仅仅能遗憾地 ...
- BZOJ 3000(Big Number-Stirling公式求n!近似值)
3000: Big Number Time Limit: 2 Sec Memory Limit: 128 MB Submit: 220 Solved: 62 [Submit][Status] De ...
- jQuery 语法(一)
通过 jQuery,您可以选取(查询,query) HTML 元素,并对它们执行“操作”(actions). jQuery 语法实例 $(this).hide() 演示 jQuery hide() 函 ...
- make——五谷杂粮