luogu P3750 [六省联考2017]分手是祝愿
可以发现在最优策略中,每种操作最多只会做一次,并且操作的先后顺序并不会影响答案,所以考虑从后往前扫,碰到一个\(1\)就对这个位置\(i\)进行操作,这样的操作一定是最优策略.记最优策略步数为\(m\),如果\(m\le k\),那么答案就是\(n!*m\) 这里有80'
然后考虑每次操作对其他位置是否操作的影响,打表可以发现在每个位置操作不会影响其他位置上是否操作,大概可以这样想,如果操作的位置\(x\)不是当前位置\(i\)的倍数那根本不可能有影响,如果是当前位置的倍数,那么可以递归考虑其他的是\(i\)倍数\(x\)因数的位置是否改变,发现如果不能再递归了,自己本身状态本来要反转的,因为\(x\)状态反转了,那么就不会改变当前位置状态,回溯的过程中,对于每个位置也只有自己和\(x\)的状态发生要反转,那么也不会影响
所以问题变成有\(a\)个位置要操作,每次等概率改变一个位置是否要操作,如果\(a\le k\)直接操作\(k\)步结束,问期望步数.这等价于每种状态期望出现次数\(+k\),设\(f_i\)为\(i\)个位置要操作的状态期望出现次数,转移大概为\(f_i=[i-1>k]*\frac{n-(i-1)}{n}f_{i-1}+[i+1\le n]*\frac{i+1}{n}f_{i+1}+[i==m]\).然后列出一堆方程后,全部加在一起,消元后可得\(\frac{k+1}{n}f_{k+1}=1\),然后利用刚才的方程推出其他\(f_i\)即可.最终答案为\(n!(k+\sum_{i=k+1}^{n}f_i)\)
//i'm low low
#include<bits/stdc++.h>
#define LL long long
#define uLL unsigned long long
#define db double
using namespace std;
const int N=1e5+10,mod=100003;
LL rd()
{
LL x=0,w=1;char ch=0;
while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
void ad(int &x,int y){x+=y,x-=x>=mod?mod:0;}
int fpow(int a,int b){int an=1;while(b){if(b&1) an=1ll*an*a%mod;a=1ll*a*a%mod,b>>=1;} return an;}
int ginv(int a){return fpow(a,mod-2);}
int n,kk,a[N],b[N],f[N],m;
int main()
{
n=rd(),kk=rd();
for(int i=1;i<=n;++i) a[i]=rd();
for(int i=n;i;--i)
{
for(int j=i+i;j<=n;j+=i) a[i]^=b[j];
if(a[i]) b[i]=1,++m;
}
if(m<=kk)
{
for(int i=1;i<=n;++i) m=1ll*m*i%mod;
printf("%d\n",m);
}
else
{
ad(f[kk+1],1ll*n*ginv(kk+1)%mod);
ad(f[kk+2],1ll*f[kk+1]*n%mod*ginv(kk+2)%mod);
for(int i=kk+3;i<=n;++i)
ad(f[i],1ll*(f[i-1]-1ll*(n-(i-2))*ginv(n)%mod*f[i-2]%mod-(i-1==m)+mod)%mod*n%mod*ginv(i)%mod);
int ans=kk;
for(int i=kk+1;i<=n;++i) ad(ans,f[i]);
for(int i=1;i<=n;++i) ans=1ll*ans*i%mod;
printf("%d\n",ans);
}
return 0;
}
luogu P3750 [六省联考2017]分手是祝愿的更多相关文章
- BZOJ 4872 luogu P3750 [六省联考2017]分手是祝愿
4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description ...
- P3750 [六省联考2017]分手是祝愿 期望DP
\(\color{#0066ff}{ 题目描述 }\) Zeit und Raum trennen dich und mich. 时空将你我分开. B 君在玩一个游戏,这个游戏由 \(n\) 个灯和 ...
- 洛谷P3750 [六省联考2017]分手是祝愿(期望dp)
传送门 嗯……概率期望这东西太神了…… 先考虑一下最佳方案,肯定是从大到小亮的就灭(这个仔细想一想应该就能发现) 那么直接一遍枚举就能$O(nlogn)$把这个东西给搞出来 然后考虑期望dp,设$f[ ...
- 洛谷 P3750 [六省联考2017]分手是祝愿
传送门 题解 //Achen #include<algorithm> #include<iostream> #include<cstring> #include&l ...
- [bzoj4872] [洛谷P3750] [六省联考2017] 分手是祝愿
Description Zeit und Raum trennen dich und mich. 时空将你我分开. \(B\) 君在玩一个游戏,这个游戏由 \(n\) 个灯和 \(n\) 个开关组成, ...
- 洛谷 P3750 - [六省联考2017]分手是祝愿(期望 dp)
题面传送门 首先我们需注意到这样一个性质:那就是对于任何一种状态,将其变为全 \(0\) 所用的最小步数的方案是唯一的--考虑编号为 \(n\) 的灯,显然如果它原本是暗着的就不用管它了,如果它是亮着 ...
- bzoj千题计划266:bzoj4872: [六省联考2017]分手是祝愿
http://www.lydsy.com/JudgeOnline/problem.php?id=4872 一种最优解是 从大到小灯有亮的就灭掉 最优解是唯一的,且关灯的顺序没有影响 最优解 对每个开关 ...
- [BZOJ4872][六省联考2017]分手是祝愿(期望DP)
4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 516 Solved: 342[Submit][Statu ...
- [BZOJ4872][六省联考2017]分手是祝愿
BZOJ Luogu sol 首先发现肯定有解,又因为每个位置至多操作一次,所以最优解一定是在\([0,n]\)之间 有一种可以在\(O(\sum_{i=1}^{n}\lfloor\frac{n}{i ...
随机推荐
- 在windows平台下搭建Django项目虚拟环境
参考文档:https://www.cnblogs.com/lovele-/p/8719126.html https://blog.csdn.net/lwcaiCSDN/article/details ...
- swift 第五课 定义model类 和 导航栏隐藏返回标题
1. 网络请求返回数据时候,把数据转化为model,但是有时候会返回空的字符串,所以加载了个长度的判断: class Model : NSObject{ var details_url:String? ...
- Java 代码快速注释 和 取消注释
注释掉代码: 把要注释的代码选中: 加/* */ 形式的注释 -> Ctrl+Shift+/ 加 //形式的形式的注释 -> ctrl+/ 取消代码注释: 把要取消注释的代码选中: ...
- Jmeter安装及配置(傻瓜模式)
接下来将以傻瓜模式进行安装,跟着流程走,没错的~ 1.首先进入到apache官网https://www.apache.org/dist/jmeter/binaries下载Windows版本JMeter ...
- Unity Shader基础:编译指令
UntiyShader中,编译指令分为两种: 1.顶点片元着色器(Vetex & Fragment Shader)使用的编译指令 2.表面着色器(Surface Shader)使用的编译指令 ...
- 微信demo小游戏:飞机大战从无到有
微信demo游戏飞机大战从无到有 现在创建新项目会默认给飞机大战的demo,这里给大家从基础开始讲解游戏的从无到有是怎么实现的. 具体实现步骤: 创建背景图->背景图运动起来->创建飞机并 ...
- MyBatis接口式编程
MyBatis使用接口连接数据库 之前学习了如何传统的使用MyBatis连接数据库,今天学习如何使用更方便快捷的方式练级数据库.使用接口连接数据库 https://www.cnblogs.com/li ...
- truffle init Error:连接不到github网址
问题描述: 输入truffle init 输出 Error: Error making request to https://raw.githubusercontent.com/truffle-box ...
- 卸载未能成功安装的mysql时的解决方案
在win10系统中,首次未能成功安装mysql,于是试图卸载了mysql相关的应用,结果提示有卸载未完成的应用,无法卸载, 在阅读文档之后发现,可以在任务管理器中的详细信息中找到[dllhost.ex ...
- 【FFMPEG】Windows下使用Visual Studio 2010编译ffmpeg全过程
原文 http://www.cnblogs.com/xylc/p/3683203.html 主题 FFmpegWindowsVisual Studio ffmpeg是一个开源的多媒体库,使用非常广泛 ...