0
点赞
收藏
分享

微信扫一扫

bzoj 4872 [Shoi2017]分手是祝愿


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

Zeit und Raum trennen dich und mich.

时空将你我分开。B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态,下标为

从 1 到 n 的正整数。每个灯有两个状态亮和灭,我们用 1 来表示这个灯是亮的,用 0 表示这个灯是灭的,游戏

的目标是使所有灯都灭掉。但是当操作第 i 个开关时,所有编号为 i 的约数(包括 1 和 i)的灯的状态都会被

改变,即从亮变成灭,或者是从灭变成亮。B 君发现这个游戏很难,于是想到了这样的一个策略,每次等概率随机

操作一个开关,直到所有灯都灭掉。这个策略需要的操作次数很多, B 君想到这样的一个优化。如果当前局面,

可以通过操作小于等于 k 个开关使所有灯都灭掉,那么他将不再随机,直接选择操作次数最小的操作方法(这个

策略显然小于等于 k 步)操作这些开关。B 君想知道按照这个策略(也就是先随机操作,最后小于等于 k 步,使

用操作次数最小的操作方法)的操作次数的期望。这个期望可能很大,但是 B 君发现这个期望乘以 n 的阶乘一定

是整数,所以他只需要知道这个整数对 100003 取模之后的结果。

Input

第一行两个整数 n, k。

接下来一行 n 个整数,每个整数是 0 或者 1,其中第 i 个整数表示第 i 个灯的初始情况。

1 ≤ n ≤ 100000, 0 ≤ k ≤ n;

Output

输出一行,为操作次数的期望乘以 n 的阶乘对 100003 取模之后的结果。

Sample Input

4 0

0 0 1 1

Sample Output

512

HINT

Source

黑吉辽沪冀晋六省联考

【分析】
首先解决正常游戏的操作次数。

易知每个开关都不能被其它的开关组所替代,且每个开关只会影响它和编号比它小的灯。

于是可以从大到小循环一遍,如果一个灯是亮着的,那么把它关闭,把它约数的状态反转,并把num++。

即最终有num个正确选择。

然后解决期望次数。

设b[i]表示从有i个正确选择变为有i-1个正确选择的期望操作次数。

那么可以推出b[i]=i/n* 1+(1-i/n) * (1+b[i+1]+b[i]),即b[i]=(b[i+1]*(n-i)+n)/i。

特殊的,b[n+1]=0

然后就可以推出b数组,再判断一下num与k的大小关系并累加一下,最后乘一下n!即可。

【代码】

//trennen
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define mod 100003
#define ll long long
#define M(a) memset(a,0,sizeof a)
#define fo(i,j,k) for(i=j;i<=k;i++)
using namespace std;
const int mxn=100005;
int n,k,num;
int v[mxn];
ll dp[mxn],ans;
inline ll ksm(ll x,ll k)
{
if(k==0) return 0;
if(k==1) return x;
ll tmp=ksm(x,k/2);
if(k&1) return tmp*tmp%mod*x%mod;
return tmp*tmp%mod;
}
int main()
{
int i,j;
scanf("%d%d",&n,&k);
fo(i,1,n) scanf("%d",&v[i]);
for(i=n;i;i--) if(v[i])
{
for(j=1;j*j<=i;j++) if(i%j==0)
{
v[j]=!v[j];
if(j*j!=i)
v[i/j]=!v[i/j];
}
num++;
}
for(i=n;i;i--)
dp[i]=(dp[i+1]*(n-i)%mod+n)%mod*ksm(i,mod-2)%mod;
if(k>=num) ans=num;
else
{
for(i=num;i>k;i--) ans=(ans+dp[i])%mod;
ans=(ans+k)%mod;
}
fo(i,1,n) ans=ans*i%mod;
printf("%lld\n",ans);
return 0;
}
/*
4 0
0 0 1 1
*/


举报

相关推荐

0 条评论