JZOJ1732 訊息傳播

2021-07-15 00:09:58 字數 1911 閱讀 8733

description

眾所周知,hyf有很多小姊妹。

hyf每天放學之後都要跟(不同的)mm約會。hyf這天約會的時候不巧被jzt撞上了……雖然換乙個新的mm約會這種事情對於hyf來說如同家常便飯,所謂「好事不出門,壞事傳千里」,jzt迅速將這個訊息傳播開來。

每個聽到這個訊息的人首先會震驚一段時間(他怎麼又換mm了- -~!),但是這樣的震驚只會持續2個時刻(因為這對於hyf來說太正常了= =~!)。如果他在第i個時刻聽到這個訊息,就會從第(i+2)個時刻開始傳播這個訊息,每個時刻把這個訊息告訴兩個人,當然他只會告訴不知道這個訊息的人。但是當他連續告訴了10個人之後,他就會口乾舌燥,停止傳播。

jzt在第0時刻撞到hyf(當然jzt也有震驚時間),請問第n時刻共有多少人知道了這個訊息?

input

一行乙個整數n,表示第n時刻。

output

一行乙個整數,表示n分鐘後知道這個訊息的總人數。

sample input

【輸入樣例1】

【輸出樣例1】

【樣例解釋】

時刻0:一開始只有jzt知道

時刻2:jzt開始傳播,時刻2傳播給a和b,時刻3傳播給c和d,時刻4傳播給e和f;

時刻4:a和b在4開始傳播,時刻4傳播給2×2=4個人,傳播給h、i、j、k;

最後知道訊息的共有:jzt,a,b,c,d,e,f,h,i,j,k,共11個人。

【輸入樣例2】

【輸出樣例2】

【輸入樣例3】

【輸出樣例3】

sample output

hint

【資料規模】

20%的資料,n<=20

60%的資料,n<=1000

100%的資料,n<=10000

每個人最多告訴5個人,所以也就是說,每個人能傳播訊息的時間就是5個時刻,加上驚訝的時間,每個人的影響時間就是7個時刻。

再考慮一下每個時刻可以得到訊息的人有多少個,就可以了。

很顯然,這個時刻知道訊息的總人數就是上乙個時刻知道訊息的總人數加上這個時刻獲得訊息的總人數。

這個時刻獲得訊息的人數就等於這個時刻可以傳播訊息的人數×2。

這個可以傳播訊息的人得到訊息的時間一定是≥2的,

而且得到訊息的時間一定是≤7。

這樣,我們就可以找到乙個遞推式。設f

i 表示第i個時刻,知道訊息的總人數。fi

=fi−

1+(f

i−2−

fi−7

)×2

因為最後答案可能很大,所以要用高精度。

但要注意空間,高精度應嘗試壓位。

#include 

#include

#include

#include

#include

#include

#include

#define ll long long

#define mo 10000

using

namespace

std;

typedef

int arr [1000];

arr f[10003],t,tt,ans;

int n;

void add(arr a,arr b)

if(t[m+1]>0)t[0]=m+1;else t[0]=m;

}void dd(arr a,arr b)

}tt[0]=a[0];

while(!tt[tt[0]])tt[0]--;

}int main()

else

}memcpy(ans,f[n],sizeof(ans));

printf("%d",ans[ans[0]]);

for(int i=ans[0]-1;i;i--)

}

透傳訊息和非透傳訊息

目前的訊息推送方式主要有兩種 通知和透傳。什麼是透傳?透傳即是透明傳送,即傳送網路無論傳輸業務如何,只負責將需要傳送的業務傳送到目的節點,同時保證傳輸的質量即可,而不對傳輸的業務進行處理。透傳訊息,就是訊息體格式及內容,對於傳遞的通道來說是不去過問的,通道只負責訊息的傳遞,對訊息不做任何處理,當客戶...

Android fragment之間訊息傳遞

1.在fragment裡定義乙個內部介面,在fragment初始化方法裡,把父activity轉換成這個介面,賦值給成員變數 public class dummyfragment extends listfragment override public void onattach activity ...

unity ugui訊息透傳

公司要做乙個這東西。a是滑動區域,scrollrect元件。b是各種選項。c是拾取到滑鼠 或觸點 的選項。d是拖放區域。大概要求是這樣。因為b的條目很多,放在a裡可以滑動檢視。如果要選擇乙個b,需要長按b,待時間足夠之後生產乙個新的c。拖動到d區域釋放,則給d新增乙個節點。其他區域則取消。如果按住b...