性質:乙個數分解質因數後2的次數=二進位制下末尾連續0的個數。
乘2比較好考慮,比較噁心的是+1。乙個$k*2^0$的數+1後可能會出現很多情況。但是k這個數表示不出來。
但是加的操作最多有200次,也就是說最多影響二進位制下的後8位。根據上述性質,我們把後8為作為狀態,統計概率。
但是只有後8位狀態的的話還是不可做,再加上第9位狀態以及與第九位相同的連續長度來考慮進製。
即f[i][j][s][k]表示i次操作後,後8位為s,第九位為k,有連續j位的概率。
轉移少麻煩但還是比較好想的。本題難度在於狀態定義。
#include#include#include#include#define int ll#define ll long long
using namespace std;
int x,n,p;
double gl1,gl2;
double f[210][255][1<<10][2];
int cnt[1<<10];
signed main()
/* for(int i=0;ifor(int j=1;j<=10;j++)
for(int s=0;s<(1<<8);s++)
cout
for(int j=0;j<=8&&(((1
for(int i=1;i<(1<<8);i++)
for(int j=1;j<=250;j++)
ans+=(f[n][j][i][0]+f[n][j][i][1])*cnt[i];
for(int j=1;j<=250;j++)ans+=f[n][j][0][0]*(j+8)+f[n][j][0][1]*8;
printf("%0.10lf\n",ans);
}
HZOJ 老司機的狂歡
比較神仙的一道題。第一問還比較簡單一點 t是否可行是單調的,考慮二分。考慮對於兩個人i,j合法的條件,設x i 那麼把x離散作為陣列下標,t時間後的位置作為值,合法的最多人數為最長上公升子串行。將t時間後的位置再次離散,樹狀陣列維護即可。注意此序列的下標為離散後的x,並不是輸入的 老司機 的id,在...
簡單概率與期望
zyf大佬課件的傳送門 p a 表示a事件發生的概率,則p a b 表示的是a或b發生的概率,p ab 表示的是a和b都發生的概率。概率分為 古典概型 和 幾何概型 其中古典概型是指樣本空間有限,而幾何概型是指樣本空間無限,如乙個人隨機在1點到2點上學。實際上我感覺幾何概型和連續性概率沒多大區別,可...
簡單的期望 狀壓dp
dp定義真的神,直接的想法是 f x maxn 為第 x 個操作,狀態 maxn maxn 1 200,好像沒有暴力分高 實際上我們可以這樣定義 f x maxn len 0 1 表示後八位 maxn 第九位0 1,第九位之後連續長度為 j 概率 為什麼這樣定義 實際上質因數分解後2的次數就是後面0...