一道很经典的期望(((至少我感觉这个名字会流芳百世)))。这道题我感觉是很神仙的期望 dpdpdp。

首先看如果操作第 iii 个开关时,所有编号为 iii 的约数(((包括 111 和 iii)))的灯的状态都会改变,那么也就是说,每个点按多次,实际上就是 222 种操作,按或者不按,而且每个按键都不可能被其它按键的组合键代替(((感性理解一下,如果可能的话,势必会影响到其它的点)))。所以我们可以先从大到小扫一遍,碰到亮的就点,同时把是它的因数的点状态异或 111,这样找到必须要按的键。实际上相当于除了这些键,按其它的键,就必须要按一个相同的键给按回来。

于是在处理完必须要按的键之后,我们可以进行期望 dpdpdp。设 f[i]f[i]f[i] 表示从 iii 个需要按的键到 i−1i-1i−1 个需要按的键的期望操作次数。那么转移方程为 f[i]=in+n−in×(f[i]+f[i+1]+1)f[i] = \frac{i}{n} + \frac{n-i}{n} \times (f[i] +f[i+1] + 1)f[i]=ni​+nn−i​×(f[i]+f[i+1]+1)考虑这个方程的含义,实际上是有 in\frac{i}{n}ni​ 的概率能按到正确的键位,也就是能到 i−1i-1i−1 个需要按的键这一个状态;有另外 n−in\frac{n-i}{n}nn−i​ 的概率会按到错误的键位,所以在之后的操作中需要把这个按键给按回来,那么就多了一个需要按的键,而且需要按的键变成了 i+1i+1i+1 个,此时需要操作的次数是 f[i+1]+1f[i+1]+1f[i+1]+1,按回来 iii 之后还需要 f[i]f[i]f[i] 次操作次数到 i−1i-1i−1。

然后把上面的式子化简 f[i]=n+(n−i)×f[i+1]if[i] = \frac{n + (n-i) \times f[i+1]}{i}f[i]=in+(n−i)×f[i+1]​求出这个东西之后,我们比较一下必须按的按键的个数(((设为cnt)cnt)cnt)和 kkk,如果 cntcntcnt 比 kkk 小,那么我们就可以像一开始那样从大到小扫,答案就是 cntcntcnt,否则的话,答案为 f[cnt]+f[cnt−1]+f[cnt−2]+⋯+f[k+1]f[cnt]+f[cnt-1]+f[cnt-2]+\dots+f[k+1]f[cnt]+f[cnt−1]+f[cnt−2]+⋯+f[k+1],相当于是从需要按 cntcntcnt 个到需要按 kkk 的期望操作次数,最后加上 kkk,因为剩下只需要 kkk 次操作即可。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
#define re register
#define int long long
#define rep(a,b,c)  for(re int a(b) ; a<=c ; ++a)
#define drep(a,b,c) for(re int a(b) ; a>=c ; --a)
using namespace std;
inline int read(){int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch == '-') f=-1 ; ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48) ; ch=getchar();}return x*f;
}
const int M = 1e5+10;
const int mod = 100003;
int n,k,cnt;
int a[M],f[M];
inline int ksm(int x,int y){int res = 1;while(y){if(y&1) res = res * x % mod;x = x * x % mod;y >>= 1;}return res % mod;
}
signed main(){n = read(),k = read();rep(i,1,n) a[i] = read();drep(i,n,1){if(a[i] == 0) continue;cnt++;for(re int j(1) ; j*j<=i ; ++j){if(i%j == 0){a[j] ^= 1;if(i != j*j) a[i/j] ^= 1;}}}if(cnt <= k){rep(i,1,n) cnt = cnt * i % mod;printf("%lld\n",cnt);}else{f[n+1] = 0;drep(i,n,1){int s1 = ((n-i) * f[i+1] % mod + n) % mod;int s2 = ksm(i,mod-2);f[i] = s1 * s2 % mod;}int ans = 0;rep(i,k+1,cnt) ans = (ans + f[i]) % mod;ans = (ans + k) % mod;rep(i,1,n) ans = ans * i % mod;printf("%lld\n",ans%mod);}return 0;
}

洛谷P3750 分手是祝愿 题解相关推荐

  1. #期望dp#洛谷 3750 分手是祝愿

    题目链接 分析 首先判断必须得按的键的个数,这个倒序枚举亮着的灯,然后设dp[i]dp[i]dp[i]表示有iii个正确选择并选择正确的期望操作次数,那么dp[i]=in+n−in(dp[i]+dp[ ...

  2. 洛谷P1129 [ZJOI2007] 矩阵游戏 题解

    洛谷P1129 [ZJOI2007] 矩阵游戏 题解 题目链接:P1129 [ZJOI2007] 矩阵游戏 题意:给定一张有黑白棋子的正方形棋盘,问存不存在解法使得经过若干次交换行或列的操作后,左上角 ...

  3. 洛谷P3336 [ZJOI2013]话旧 题解

    洛谷P3336 [ZJOI2013]话旧 题解 题目链接:P3336 [ZJOI2013]话旧 题意:小林跟着银河队选手去了一趟宇宙比赛,耳濡目染,变得学术起来.回来后,他发现世界大变样了.比丘兽究级 ...

  4. 洛谷P4683 [IOI2008] Type Printer 题解

    洛谷P4683 [IOI2008] Type Printer 题解 题目链接:P4683 [IOI2008] Type Printer 题意: 你需要利用一台可移动的打印机打印出NNN个单词.这种可移 ...

  5. 洛谷P3647 [APIO2014] 连珠线 题解

    洛谷P3647 [APIO2014] 连珠线 题解 题目链接:P3647 [APIO2014] 连珠线 题意: 在达芬奇时代,有一个流行的儿童游戏称为连珠线.当然,这个游戏是关于珠子和线的.线是红色或 ...

  6. 洛谷P4170 [CQOI2007]涂色 题解

    洛谷P4170 [CQOI2007]涂色 题解 题目链接:P4170 [CQOI2007]涂色 题意: 假设你有一条长度为 555 的木板,初始时没有涂过任何颜色.你希望把它的 555 个单位长度分别 ...

  7. 洛谷P1868 饥饿的奶牛 题解

    洛谷P1868 饥饿的奶牛 题解 题目链接:P1868 饥饿的奶牛 题意: 有一条奶牛冲出了围栏,来到了一处圣地(对于奶牛来说),上面用牛语写着一段文字. 现用汉语翻译为: 有 NNN 个区间,每个区 ...

  8. 洛谷P1462 通往奥格瑞玛的道路 题解

    洛谷P1462 通往奥格瑞玛的道路 题解 题目链接:P1462 通往奥格瑞玛的道路 题意:在艾泽拉斯,有 nnn 个城市.编号为 1,2,3,-,n1,2,3,\ldots,n1,2,3,-,n . ...

  9. 洛谷 P2015 二叉苹果树 题解

    洛谷 P2015 二叉苹果树 题解 洛谷 P2015 题目 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有NNN个结点(叶子点或者树枝分叉点),编号为1-NNN ...

最新文章

  1. Linux如何在系统启动时自动加载模块
  2. spring mvc学习(28):get乱码解决
  3. iis mysql cpu_[译]通过IIS Request Filtering解决SQL Server CPU高的问题
  4. 动态库注入--APC注入
  5. arraylist扩容是创建新数组吗 java_手撕ArrayList底层,透彻分析源码
  6. 2022电大国家开放大学网上形考任务-中华文化概说非免费(非答案)
  7. 计算机boot进入u盘启动,用U盘重装系统怎么把Boot设置为启动项?
  8. 计算机编程英语词汇app,计算机编程英语词汇
  9. 推荐几个下载英文原版电子书的网站-PDF
  10. delphi实现FTP上传与下载
  11. Elasticsearch入门 - 简单上手
  12. bmon 带宽监视器
  13. 浅谈某定设计网站非会员去除水印
  14. 在Ubuntu 14.04上安装了tfp和tftp服务
  15. 刷入twrp_twrp刷入面具进入recovery(twrp)的方式获取root刷入第三方rom获取第三方rom包类原生rom包的网络连接受限问题
  16. http报文头各字段详细含义
  17. 如何看待快码编程这一款中文多平台编程工具
  18. 自下而上语法制导翻译过程
  19. 为什么MIPS和MFLOPS不能代表性能?
  20. STM32 RTC应用 内部唤醒中断 (Internal Wakeup)

热门文章

  1. 如何用 Python 写一个简易的抽奖程序
  2. python encode函数用法_python中encode()函数的用法
  3. python科学计算三剑客_Python数据分析 三剑客篇(一)NumPy
  4. 老鼠被粘鼠板黏住之后在思考一些什么呢?
  5. 英国时装协会将在比斯特购物村开设首家设计师快闪店
  6. 两台PC实现串口通信以及点阵字模读写
  7. if判断语句不要连这些大于等于
  8. AIDL中in,out和inout的区别
  9. 最近公共祖先 牛客网 程序员面试金典 C++ Python
  10. codeforces 660 div2 D