4872 Shoi2017 分手是祝願

2021-07-31 12:36:15 字數 2734 閱讀 1506

4872: [shoi2017]分手是祝願

time limit: 20 sec memory limit: 512 mb

submit: 153 solved: 109

[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

512

hint

source

黑吉遼滬冀晉六省聯考

只考慮最優方案而不考慮隨機選點的

每次找到編號最大的亮著的燈,把它滅掉

顯然這是當前情況的唯一最優解

把每個燈泡寫作變數列出乙個xor方程組

考慮高斯消元的過程,這樣就可以證明解的唯一性

記初始狀況還需要

t 步才能達到中止狀況

如果按到乙個最優解需要按的燈泡,那麼轉移到t−

1步 否則,因為解唯一,到達終止狀況的方案中一定包含按掉這個燈泡的操作 定義f

[i] 為最優方案還剩

i 步時到達終點的期望步數

顯然有f[i

]=in

f[n−

1]+n

−inf

[n+1

]+1特別地,f[

n]=f

[n−1

]+1,

f[k]

=k那麼,每個f[

i]的值都能用a∗

f[n]

+b的值表示出來

倒著推到f[

k]解出f[

n]最後代回去即可

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 1e5 + 10;

typedef

long

long ll;

const ll mo = 100003;

inline

int mul(const ll &x,const ll &y)

inline

int add(const

int &x,const

int &y)

inline

int dec(const

int &x,const

int &y)

struct data

data(int x,int y): x(x),y(y){}

data operator * (const

int &t)

data operator - (const data &b)

}f[maxn];

int n,k,a[maxn],inv[maxn],fac[maxn],g[maxn];

vector

v[maxn];

int ksm(int x,int y)

return ret;

}void pre_work()

inline

int getint()

int main()

int t = mul(dec(k,f[k].y),ksm(f[k].x,mo - 2)),tot = 0;

for (int i = n; i; i--)

int ans = tot <= k ? tot : add(mul(f[tot].x,t),f[tot].y);

for (int i = 1; i <= n; i++) ans = mul(ans,i); cout

<< ans << endl;

return

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.時...

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 表示這個燈是滅的,遊戲 的...