luogu

loj

可以发现在最优策略中,每种操作最多只会做一次,并且操作的先后顺序并不会影响答案,所以考虑从后往前扫,碰到一个\(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]分手是祝愿的更多相关文章

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

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

  2. P3750 [六省联考2017]分手是祝愿 期望DP

    \(\color{#0066ff}{ 题目描述 }\) Zeit und Raum trennen dich und mich. 时空将你我分开. B 君在玩一个游戏,这个游戏由 \(n\) 个灯和 ...

  3. 洛谷P3750 [六省联考2017]分手是祝愿(期望dp)

    传送门 嗯……概率期望这东西太神了…… 先考虑一下最佳方案,肯定是从大到小亮的就灭(这个仔细想一想应该就能发现) 那么直接一遍枚举就能$O(nlogn)$把这个东西给搞出来 然后考虑期望dp,设$f[ ...

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

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

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

    Description Zeit und Raum trennen dich und mich. 时空将你我分开. \(B\) 君在玩一个游戏,这个游戏由 \(n\) 个灯和 \(n\) 个开关组成, ...

  6. 洛谷 P3750 - [六省联考2017]分手是祝愿(期望 dp)

    题面传送门 首先我们需注意到这样一个性质:那就是对于任何一种状态,将其变为全 \(0\) 所用的最小步数的方案是唯一的--考虑编号为 \(n\) 的灯,显然如果它原本是暗着的就不用管它了,如果它是亮着 ...

  7. bzoj千题计划266:bzoj4872: [六省联考2017]分手是祝愿

    http://www.lydsy.com/JudgeOnline/problem.php?id=4872 一种最优解是 从大到小灯有亮的就灭掉 最优解是唯一的,且关灯的顺序没有影响 最优解 对每个开关 ...

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

    4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 516  Solved: 342[Submit][Statu ...

  9. [BZOJ4872][六省联考2017]分手是祝愿

    BZOJ Luogu sol 首先发现肯定有解,又因为每个位置至多操作一次,所以最优解一定是在\([0,n]\)之间 有一种可以在\(O(\sum_{i=1}^{n}\lfloor\frac{n}{i ...

随机推荐

  1. 错误Uncaught Error: Bootstrap's JavaScript requires jQuery at bootstrap.min.js:6 错误详解

    引入Bootstrap的顺序进行修改 <% //获取以/开始,不以/结尾的部分 pageContext.setAttribute("APP_PATH", request.ge ...

  2. [译] NAT - 网络地址转换(2016)

    [译] NAT - 网络地址转换(2016) Published at 2019-02-17 | Last Update 译者序 本文翻译自 2016 年的一篇英文博客 NAT - Network A ...

  3. IE浏览器URL中的查询条件中包含中文时报404的解决办法

    情况是比如我输入如下URL到IE浏览器: http://localhost:8090/RPT_TYSH_JL_ZD_DETAIL.html?pageIndex=1&year=2018& ...

  4. react中 如何异步展示后台接口的提示消息

    调用接口后,后台会返回这样的一段信息提示:{"errCode":400002,"errMsg":"字段校验异常","data&qu ...

  5. Nginx使用默认配置启动异常处理

    Ps1:错误问题:nginx: [error] OpenEvent("Global\ngx_reload_5988") failed (2: The system cannot f ...

  6. 《Java语言程序设计》继承与多态

    一.动手实验:继承条件下的构造方法 调用运行 TestInherits.java 示例,观察输出,注意总结父类与子类之间构造方法的调用关系修改Parent构造方法的代码,显式调用GrandParent ...

  7. 【VS开发】VC下加载JPG/GIF/PNG图片的两种方法

    1.用API OleLoadPicture来加载JPG.GIF格式的图片(注:不支持PNG格式,另外GIF只能加载第一帧,且不支持透明) OleLoadPicture 函数实际上创建了一个IPictu ...

  8. Qt5."Clang Code Model"一些设置

    1.有些设置 可能这里在设置了,到别的地方(例如换了一个机子) 又要设置,这样的话 在不熟练的时候 手动敲进去会比较慢,这里 先记录下来 以后要用 直接复制就行了 2.Qt5.9.8 vs2017 : ...

  9. JavaSE基础(九)--Java二进制运算

    Java二进制运算 Java二进制表示法 首先了解下二进制,二进制是相对十进制而言的,当然还有八进制,十六进制等等,我们常用的都是十进制,计算机用的都是二进制,而符号表示常用十六进制. 二进制就是只有 ...

  10. Nginx05---负载均衡 upsteam

    参考   https://www.cnblogs.com/linjiqin/p/5494783.html