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