bzoj 4872 Shoi2017 分手是祝願

2021-07-31 10:33:54 字數 2065 閱讀 1637

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 00 0 1 1

sample output

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

#include

#include

#include

#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)

int main()

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

fo(i,1,n) ans=ans*i

%mod;

printf("%lld\n",ans);

return0;}

/*400

011*/

BZOJ4872 SHOI2017 分手是祝願

題意 b君 在玩乙個 遊戲,這 個遊戲由 n個燈和 n個開關 組成,給 定這n個 燈的初始 狀態,下 標為從1 到n的正 整數。每 個燈有兩 個狀態亮 和滅,我 們用1來 表示這個 燈是亮的 用0表 示這個燈 是滅的,遊戲的目 標是使所 有燈都滅 掉。但是 當操作第 i個開關 時,所有 編號為i 的...

BZOJ4872 Shoi2017 分手是祝願

zeit und raum trennen dich und mich.時空將你我分開。b 君在玩乙個遊戲,這個遊戲由 n 個燈和 n 個開關組成,給定這 n 個燈的初始狀態,下標為 從 1 到 n 的正整數。每個燈有兩個狀態亮和滅,我們用 1 來表示這個燈是亮的,用 0 表示這個燈是滅的,遊戲 的...

Bzoj3562 神器化合物 Shoi 2014

ac通道 分析 若把每乙個原子看作乙個節點,將化學鍵看作一條邊,那麼這個題目要求的 分子的個數 很容易就可以看出是求圖中聯通塊的個數。求聯通塊的個數,可以使用並查集。可如何求出每一步的聯通塊的個數呢?可以知道,當連上一條邊時,若此邊連線的是兩個不同的聯通塊,那麼分子個數就會減一 當刪去一條邊時,若刪...