loj2145 「SHOI2017」分手是祝愿
记 \(f_i\) 是从要做 \(i\) 步好操作变成要做 \(i-1\) 步好操作的期望操作次数。
显然 \(f_i=i/n \times 1 + (1-i/n) \times (1 + f_{i+1}+f_i)\),即 \(f_i=(n+(n-i)f_{i+1})/i\)。\(f_n=1\)。
递推即可。
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
typedef long long ll;
int n, k, a[100005], f[100005], hmn, inv[100005], fac, ans;
const int mod=100003;
vector<int> vec[100005];
int main(){
	cin>>n>>k;
	f[n] = inv[0] = inv[1] = fac = 1;
	for(int i=1; i<=n; i++){
		scanf("%d", &a[i]);
		for(int j=i; j<=n; j+=i)
			vec[j].push_back(i);
		if(i!=1)	inv[i] = (ll)(mod - mod / i) * inv[mod%i] % mod;
		fac = (ll)fac * i % mod;
	}
	for(int i=n; i>=1; i--)
		if(a[i]){
			hmn++;
			for(int j=0; j<vec[i].size(); j++)
				a[vec[i][j]] ^= 1;
		}
	if(hmn<=k)	cout<<(ll)hmn*fac%mod<<endl;
	else{
		for(int i=n-1; i>k; i--)
			f[i] = (ll)((ll)(n-i)*f[i+1]+n) * inv[i] % mod;
		for(int i=hmn; i>k; i--)
			ans = (ans + f[i]) % mod;
		ans = (ans + k) % mod;
		ans = ((ll)ans * fac) % mod;
		cout<<ans<<endl;
	}
	return 0;
}
loj2145 「SHOI2017」分手是祝愿的更多相关文章
- 【LOJ 2145】「SHOI2017」分手是祝愿
		LOJ 2145 100pts 这题...BT啊 首先我们很容易想出\(dp(msk)\)表示现在灯开关的情况是\(msk\),期望通过多少步走到终结态. 很明显\(dp(msk)=\frac{1}{ ... 
- LOJ #2145. 「SHOI2017」分手是祝愿
		题目链接 LOJ #2145 题解 一道画风正常的--期望DP? 首先考虑如何以最小步数熄灭所有灯:贪心地从大到小枚举灯,如果它亮着则修改它.可以求出总的最小步数,设为\(cnt\). 然后开始期望D ... 
- loj #2143. 「SHOI2017」组合数问题
		#2143. 「SHOI2017」组合数问题 题目描述 组合数 Cnm\mathrm{C}_n^mCnm 表示的是从 nnn 个互不相同的物品中选出 mmm 个物品的方案数.举个例子, 从 ... 
- Solution -「六省联考 2017」「洛谷 P3750」分手是祝愿
		\(\mathcal{Description}\) Link. 有 \(n\) 盏编号为 \(1\sim n\),已知初始状态的灯,每次操作选取 \(x\in[1,n]\),使得所有编号为 \ ... 
- 【LOJ 2144】「SHOI2017」摧毁「树状图」
		LOJ 2144 84pts 首先\(op2\)很简单.直接并查集一搞就好了(话说我现在什么东西都要写个并查集有点...) 然后\(op0\)我不会,就直接\(O(n^2)\)枚举一下\(P\)这个人 ... 
- 【BZOJ4872】【SHOI2017】分手是祝愿 期望DP
		题目大意 有\(n\)盏灯和\(n\)个开关,初始时有的灯是亮的,有的灯是暗的.按下第\(i\)个开关会使第\(j\)盏灯的状态被改变,其中\(j|i\).每次你会随机操作一个开关,直到可以通过不多于 ... 
- LOJ #2142. 「SHOI2017」相逢是问候(欧拉函数 + 线段树)
		题意 给出一个长度为 \(n\) 的序列 \(\{a_i\}\) 以及一个数 \(p\) ,现在有 \(m\) 次操作,每次操作将 \([l, r]\) 区间内的 \(a_i\) 变成 \(c^{a_ ... 
- LOJ #2141. 「SHOI2017」期末考试
		题目链接 LOJ #2141 题解 据说这道题可以三分(甚至二分)? 反正我是枚举的 = = 先将t和b数组排序后计算出前缀和, 然后枚举最晚的出成绩时间,每次可以O(1)直接计算调整到该时间所需的代 ... 
- 【BZOJ4872】【Shoi2017】分手是祝愿
		Time Limit: 20 Sec Memory Limit: 512 MB Description  Zeit und Raum trennen dich und mich.  时空将你我分开 ... 
随机推荐
- jQuery val()方法及valHooks源码解读
			val: function( value ) { var hooks, ret, isFunction, elem = this[0]; if ( !arguments.length ) {//无参数 ... 
- Java 多态抽象
- 《高性能MySQL》读书笔记之创建高性能的索引
			索引是存储引擎用于快速找到记录的一种数据结构.索引优化是对查询性能优化的最有效手段.索引能够轻易将查询性能提高几个数量级.创建一个最优的索引经常需要重写查询.5.1 索引基础 在MySQL中,存储引擎 ... 
- body和普通div背景图宽高百分比的区别
			body和普通div背景图的区别 background: url(//m.360buyimg.com/mobilecms/s220x220_jfs/t2746/167/831241799/29915 ... 
- 安装ubuntu虚拟环境
			一. 安装 1. 准备: 1). Oracle VM VirtualBox https://www.virtualbox.org/ 2). Ubuntu 18.04.2 LTS https://ubu ... 
- JavaScript30-7 数组的一些基本方法
			本次来学习数组的一些方法,之前学习的js数组的方法是在第四课里面(没有写到随笔里面) 之前第四课主要讲的是 filter() ,map() 这次课程主要介绍的是 some()`.`every()`.` ... 
- Azure powershell 获取 vmSize 可用列表的命令
			1.使用 Add-AzureAccount -Environment azurechinacloud 登录到订阅 2.选择默认的订阅 Select-AzureSubscription -Subscri ... 
- Jenkins结合ant传递参数
			需求: 使用Jenkins的「参数化构建过程」,由用户手动输入参数.通过ant脚本接收这个参数,并输出(当然,中间也可以进行复杂的处理,这里为了说明问题,仅做简单的输出). 1.基础环境 Jenkin ... 
- 自己开发的在线视频下载工具,基于Java多线程
			比如这个在线视频: 我们可以正常播放,但是找不到下载按钮. 打开Chrome开发者工具,在Network标签页里能看到很多网络传输请求: 随便看一个请求的响应,发现类型为video,大小为500多k. ... 
- bxslider 使用帮助
			“bxSlider”就是一款响应式的幻灯片js插件 bxSlider特性 充分响应各种设备,适应各种屏幕: 支持多种滑动模式,水平.垂直以及淡入淡出效果: 支持图片.视频以及任意html内容: 支持触 ... 
