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. 时空将你我分开 ...
随机推荐
- android的handle
Handler的定义: 用来接收子线程发送过来的数据,并利用该数据直接更新主线程的UI. 安卓中,一个应用启动时会开启一个主线程(UI线程),他的责任是负责管理界面中的控件.比如当你点击一个Butt ...
- 怎么样去优化我们的SQL语句
1.改写in 在SQL语言中,一个查询块可以作为另一个查询块中谓词的一个操作数.因此,SQL查询可以层层嵌套.例如在一个大型分布式数据库系统中,有订单表Order.订单信息表OrderDetail,如 ...
- ios has denied the launch request.
ios has denied the launch request. You can choose either of the two ways. Solution 1: Open System Pr ...
- hihoCode r#1077 : RMQ问题再临-线段树
思路: 两种实现方法: (1)用链表(2)用数组. #include <bits/stdc++.h> using namespace std; int n, q, L, R, op, P, ...
- 51nod 1283 最小周长
一个矩形的面积为S,已知该矩形的边长都是整数,求所有满足条件的矩形中,周长的最小值.例如:S = 24,那么有{1 24} {2 12} {3 8} {4 6}这4种矩形,其中{4 6}的周长最小,为 ...
- pathForResource获取资源为nil的原因
利用NSbundle获取 资源文件的时候,如果是自己添加的文件,获取的时候纵使返回nil的解决办法.原因是因为该文件没有添加到资源文件中,只要在添加文件的时候选择添加到 Create Folder R ...
- 1991: C语言实验——大小写转换
1991: C语言实验——大小写转换 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 183 Solved: 109[Submit][Status][We ...
- Java中System.setProperty()
Java中System.setProperty()用法 <转抄> // Daysafter :Integer中 getInteger( String s); getInteger( Str ...
- 响应式Web设计- Viewport
什么是Viewport? viewport是用户网页的可视区域, 翻译为中文可以叫做"视区". 设置Viewport 一个常用的针对移动网页优化过的页面的Viewport meta ...
- C++的反射
写得挺不错,支持转帖下 C++语言本身是不支持反射的,但实际应用中总是会有将对象序列化的需求,总不可能C++不支持,我们就不用C++了,既然发明C++的大师们没有考虑这个,那我们只有自己动手了,毛主席 ...