BZOJ4872 Shoi2017 分手是祝願

2022-05-02 15:09:07 字數 2391 閱讀 5428

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 取模之後的結果。

第一行兩個整數 n, k。

接下來一行 n 個整數,每個整數是 0 或者 1,其中第 i 個整數表示第 i 個燈的初始情況。

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

輸出一行,為操作次數的期望乘以 n 的階乘對 100003 取模之後的結果。

4 00 0 1 1

送了80分。後20真神。

我猜這是畢克dalao出的。。

畢克出noi2016一道字串題也送了95的hash分orz

希望這次八省聯考還有畢克dalao出的題。

設\(f_i\)為最優\(i\)步完成轉移到最優\(i - 1\)步完成的期望操作次數。

有兩個結論。

1、最優方案中,不會按乙個點兩次以上

2、最優方案中,按的順序互換仍然正確

直觀感受一下。

轉移時兩種情況。

1、最優\(i\)步的時候,有\(i\)個決策是最優決策,可以轉移到\(i - 1\)步,操作次數為\(1\)

2、有\(n - i\)步不是最優決策,按了之後(操作次數為\(1\)),最優決策變成了\(i + 1\)步,需要轉回\(i\)步(期望\(f[i + 1]\)),然後轉回\(i - 1\)步(期望\(f[i]\))

等概率選取,\(1\)的概率是\(\frac\),\(2\)的概率是\(\frac\)

得到\[f_i = \frac + (1 - \frac) \times (1 + f_ + f_i), i > k

\]\[f_i = 1, i < k

\]必須從大到小遞推,因為.....

我問了一下出題人,為什麼從小到大不對,他說:

. . .

這就是dalao吧

#include #include #include #include #include #include #include inline long long max(long long a, long long b)

inline long long min(long long a, long long b)

inline long long abs(long long x)

inline void swap(long long &x, long long &y)

inline void read(long long &x)

const long long inf = 0x3f3f3f3f;

const long long maxn = 1000000 + 10;

const long long mod = 100003;

long long f[maxn], dp[maxn], num[maxn], n, k, mi, sum;

long long pow(long long a, long long b)

return r;

}long long ni(long long x)

int main()

} if(k >= mi)

for(int i = 1;i <= k;++ i) dp[i] = 1;

dp[n] = 1;

for(int i = n - 1;i > k;-- i)

dp[i] = ((((n - i) * dp[i + 1]) % mod + n) % mod * ni(i)) % mod;

for(int i = mi;i >= 1;-- i) sum += dp[i], sum %= mod;

sum *= f[n];

sum %= mod;

printf("%lld", sum);

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

Bzoj3562 神器化合物 Shoi 2014

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