题目链接
做法:
首先预处理出每个数的约数,用 $ vector $ 存,时间是调和级数 $ O(n \log n) $ 。
部分分:当 $ n = k $ 时,每次操作最优,然后从右往左枚举,若果当前为1则用掉一次,暴力修改。得 $ 50 $ 分。
正解: $ f[i] $ 表示对于 $ n $ 盏灯,从需要按 $ i $ 次能全部熄灭到按 $ i - 1 $ 次能全部熄灭的期望。得

f[i] = i * inv[n] + (n - i) * inv[n] * (f[i] + f[i+1] + 1)

移项得

f[i] = (f[i+1] * (n - i) + n) * inv[i];

从 $ n $ 倒推。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=100003;
const int N=100010;
int n,k,tot;
int a[N];
vector <int> d[N];
ll f[N],inv[N],ans=0;void init() {for(int i=1;i<=n;i++) for(int j=i;j<=n;j+=i) d[j].push_back(i);
}
int main() {scanf("%d%d",&n,&k),init();for(int i=1;i<=n;i++) scanf("%d",&a[i]);inv[0]=inv[1]=1;for(int i=2;i<=n;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;for(int i=n;i>=1;i--)if(a[i]) {++tot; for(int j=0;j<d[i].size();j++) a[d[i][j]]^=1;}f[n]=1;for(int i=n-1;i>k;i--) f[i]=(n%mod+(n-i)%mod*f[i+1]%mod)%mod*inv[i]%mod;for(int i=k;i;i--) f[i]=1;for(int i=1;i<=tot;i++) ans=(ans+f[i])%mod;for(int i=2;i<=n;i++) ans=ans*i%mod;printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/daniel14311531/p/10264112.html

[六省联考2017]分手是祝愿 - 题解相关推荐

  1. [六省联考2017]分手是祝愿 题解

    题目传送门 题目大意: 给出一排灯泡的状态,每次修改一个灯泡时会将它编号的约数的灯泡的状态同时修改,现在随机修改灯泡,当按照最优策略还有 kkk 次操作就能全灭时就按最优策略,问期望操作次数. 题解 ...

  2. BZOJ 4872 luogu P3750 [六省联考2017]分手是祝愿

    4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec  Memory Limit: 512 MB [Submit][Status][Discuss] Description ...

  3. [六省联考2017]分手是祝愿(期望+DP)

    题解 很容易想出来最优策略是什么. 就是从n到1看到开着的灯就把它关了 我们预处理出当前状态把灯全部关闭后的最少步数cnt 然后我们的主人公就要瞎按... 设dp[i]代表当前状态最优解为i步时走到d ...

  4. 洛谷 P3750 [六省联考2017]分手是祝愿

    传送门 题解 //Achen #include<algorithm> #include<iostream> #include<cstring> #include&l ...

  5. luogu P3750 [六省联考 2017]分手是祝愿

    https://www.luogu.com.cn/problem/P3750 k=nk=nk=n给了808080分可还行 首先考虑k=nk=nk=n,不难想到一个贪心,从大到小枚举每个开关,如果为11 ...

  6. P3750 [六省联考2017]分手是祝愿(期望概率,返祖模型)

    题意:给n个灯,初始化下给出每个灯的状态,给n个开关,操作开关i会使得编号是i的约数的灯的状态翻转一次,现在有一个种算法,如果当前状态下可以操作k次及以下就能使所有灯熄灭,直接操作这个次数,游戏结束, ...

  7. BZOJ 4872 六省联考2017 分手是祝愿

    Problem BZOJ Solution 感觉dp状态的设置好巧妙啊 首先要明确的是怎么计算最小步数.就是直接从n到1扫,如果有亮着的,就按这个开关,模拟一下是O(nlnn)O(nln⁡n)O(n\ ...

  8. 2017 [六省联考] T5 分手是祝愿

    4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 458  Solved: 299 [Submit][Sta ...

  9. P3750-[六省联考2017]分手是祝愿【期望dp】

    正题 题目链接:https://www.luogu.org/problem/P3750 题目大意 nnn盏灯和按钮,每次随机选择一个xxx按下后会让xxx的倍数的灯都取反,然后若最少kkk步就可以将所 ...

最新文章

  1. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率
  2. (0088)iOS开发之单例的写法以及重新认识
  3. WPF oxyPlot 使用总结
  4. 用什么擦地最干净脑筋急转弯_脑筋急转弯:手机的反义词是什么?答案让人笑得肚子疼!...
  5. java uuid 排序_如何在java中将UUID保存为二进制(16)
  6. OSS 上传出现异常
  7. Spring-Logback-动态修改日志级别
  8. 帮助小姐姐破解加密压缩包(一)——暴力破解字典生成
  9. Google去广告——Adblock插件使用
  10. Garbled Circuits介绍 - 56 Yao协议的实现 总结
  11. 光标的认识(知识整理)
  12. 1068 Find More Coins (30分)
  13. 使用 Entrust 扩展包在 Laravel 5 中实现 RBAC 权限管理与安装配置
  14. geartrax2020中文繁体转简体
  15. 计算机进位制转换方法,计算机进位数制及其转换方法和技巧
  16. matlab 隐写分析,RS隐写分析.ppt
  17. 芯片工程师成长之路_一个FPGA工程师的成长之路
  18. PHP画a梦,html打造动漫人物--哆啦A梦
  19. 杜比全景声深受好莱坞青睐
  20. 算法之Sunday算法

热门文章

  1. C++ 类的继承,基类,派生类
  2. index和roundup扩展数据行以完成筛选
  3. 鹅厂也对元宇宙下手了
  4. stem教育发展头脑
  5. 期待腾讯SOSO的崛起
  6. 【文艺复兴之swing】swing怎么做密码框?swing怎么锁定程序 输入密码才能解锁?
  7. 22 泛型 Collection List Set
  8. AcWing 660. 零食
  9. matlab文件转成python文件
  10. Vue-利用template写出最简易版微博评论发布