日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

2017 [六省联考] T5 分手是祝愿

發(fā)布時(shí)間:2025/5/22 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2017 [六省联考] T5 分手是祝愿 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

4872: [Shoi2017]分手是祝愿

Time Limit:?20 Sec??Memory Limit:?512 MB
Submit:?458??Solved:?299
[Submit][Status][Discuss]

Description

Zeit und Raum trennen dich und mich. 時(shí)空將你我分開(kāi)。B 君在玩一個(gè)游戲,這個(gè)游戲由 n 個(gè)燈和 n 個(gè)開(kāi)關(guān)組成,給定這 n 個(gè)燈的初始狀態(tài),下標(biāo)為 從 1 到 n 的正整數(shù)。每個(gè)燈有兩個(gè)狀態(tài)亮和滅,我們用 1 來(lái)表示這個(gè)燈是亮的,用 0 表示這個(gè)燈是滅的,游戲 的目標(biāo)是使所有燈都滅掉。但是當(dāng)操作第 i 個(gè)開(kāi)關(guān)時(shí),所有編號(hào)為 i 的約數(shù)(包括 1 和 i)的燈的狀態(tài)都會(huì)被 改變,即從亮變成滅,或者是從滅變成亮。B 君發(fā)現(xiàn)這個(gè)游戲很難,于是想到了這樣的一個(gè)策略,每次等概率隨機(jī) 操作一個(gè)開(kāi)關(guān),直到所有燈都滅掉。這個(gè)策略需要的操作次數(shù)很多, B 君想到這樣的一個(gè)優(yōu)化。如果當(dāng)前局面, 可以通過(guò)操作小于等于 k 個(gè)開(kāi)關(guān)使所有燈都滅掉,那么他將不再隨機(jī),直接選擇操作次數(shù)最小的操作方法(這個(gè) 策略顯然小于等于 k 步)操作這些開(kāi)關(guān)。B 君想知道按照這個(gè)策略(也就是先隨機(jī)操作,最后小于等于 k 步,使 用操作次數(shù)最小的操作方法)的操作次數(shù)的期望。這個(gè)期望可能很大,但是 B 君發(fā)現(xiàn)這個(gè)期望乘以 n 的階乘一定 是整數(shù),所以他只需要知道這個(gè)整數(shù)對(duì) 100003 取模之后的結(jié)果。

Input

第一行兩個(gè)整數(shù) n, k。 接下來(lái)一行 n 個(gè)整數(shù),每個(gè)整數(shù)是 0 或者 1,其中第 i 個(gè)整數(shù)表示第 i 個(gè)燈的初始情況。 1 ≤ n ≤ 100000, 0 ≤ k ≤ n;

Output

輸出一行,為操作次數(shù)的期望乘以 n 的階乘對(duì) 100003 取模之后的結(jié)果。

Sample Input

4 0
0 0 1 1

Sample Output

512

HINT

Source

黑吉遼滬冀晉六省聯(lián)考

首先一個(gè)狀態(tài)最少需要多少步是可以 O(N log N)算出來(lái)的,調(diào)和級(jí)數(shù)一下就好了。 而且我們可以發(fā)現(xiàn),對(duì)于每一個(gè)狀態(tài),用最小步數(shù)關(guān)掉所有燈的方案是唯一的,考慮從后向前掃描,是1就動(dòng)否則不動(dòng),總是最優(yōu)的。 然后我們就設(shè) f[i] 為關(guān)掉所有燈的最小步數(shù)為i的期望答案。 顯然 當(dāng)i<=k的時(shí)候,f[i]=i;其他情況,f[i] = (i/n) * f[i-1] + ((n-i)/n) * f[i+1] 。 為什么隨機(jī)的式子是長(zhǎng)那個(gè)樣子的呢? 前面已經(jīng)證明了對(duì)于每一個(gè)狀態(tài),最小步數(shù)關(guān)掉所有燈的方案是唯一的。 而又因?yàn)榘礋舻捻樞虿挥绊懘鸢?#xff0c;所以有(i/n)的幾率最短步數(shù)減少; 但如果沒(méi)有按最短路上的燈,首先最短步數(shù)不會(huì)減少,因?yàn)樽疃搪肺ㄒ?#xff1b; 而且也不會(huì)不變,因?yàn)槿绻€按原來(lái)的套路按燈的話最后不會(huì)都滅; 那么按了不是最短方案的燈,會(huì)讓最短步數(shù)增加多少呢? 只能是1,因?yàn)榭梢栽侔匆徊交厝ァ?/span> 我們可以發(fā)現(xiàn)的是,f[n] = f[n-1] + 1。 通過(guò)這個(gè)向前推,可以推出形如f[i] = f[i-1] + h[i]的式子,并且h[i] = (n / i) (1 + h[i+1] * (n-i) / n) 。 然后就可以直接從前往后遞推了,對(duì)于i<=k,f[i] = i;否則, f[i] = f[i-1] + h[i] 。 然后就可以A了2333 #include<bits/stdc++.h> #define ll long long #define maxn 100005 #define ha 100003 using namespace std; int n,k,T,a[maxn],opt[maxn]; int f[maxn],jc=1,inv[maxn],h[maxn];inline int add(int x,int y){x+=y;return x>=ha?x-ha:x; }inline void init(){inv[1]=1;for(int i=2;i<ha;i++) inv[i]=-inv[ha%i]*(ll)(ha/i)%ha+ha; }int main(){init();scanf("%d%d",&n,&k);for(int i=1;i<=n;i++) scanf("%d",a+i),jc=jc*(ll)i%ha;for(int i=n;i;i--){for(int j=i<<1;j<=n;j+=i) a[i]^=opt[j];if(a[i]) opt[i]=1,T++;}f[0]=0;for(int i=1;i<=k;i++) f[i]=i;h[n]=1;for(int i=n-1;i;i--) h[i]=add(n*(ll)inv[i]%ha,h[i+1]*(ll)(n-i)%ha*(ll)inv[i]%ha);for(int i=k+1;i<=T;i++) f[i]=add(f[i-1],h[i]);printf("%d\n",f[T]*(ll)jc%ha);return 0; }

  

轉(zhuǎn)載于:https://www.cnblogs.com/JYYHH/p/8521162.html

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的2017 [六省联考] T5 分手是祝愿的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。