題解 Luogu Osu!三題 期望

2022-05-12 07:23:02 字數 2855 閱讀 1798

開啟某谷,搜尋osu

luogu p1654

luogu cf235b 

luogu p1365

先%本機房的真·osu!神仙 sto superminivan orz 

三道題都差不多,就當三倍經驗了

大力推式子

設$f[i]$表示以$i$結尾的期望得分,$len$為期望連續的$o$的個數

分類討論:

①當前字母為$o$時,$f[i]=f[i-1]+((len+1)^2-len^2)$ 此時$len+1$

化簡 $=>$ $f[i]=f[i-1]+2*len+1$

②當前字母為$x$時,$f[i]=f[i-1]$ 此時$len=0$ 

③當前字母為?時,為$(①+②)/2$

也就是 $f[i]=f[i-1]+len+0.5$

整理變成$f[i]=f[i-1]+(2*len+1)*p[i]$

其中$p[i]$就是i位置出現o的期望

$o$  $p[i]=1$

$x$  $p[i]=0$

$?$  $p[i]=0.5$

再看$len$怎麼維護,設$x[i]$表示$i$結尾的最後一段連續$o$的個數

同樣可以轉化為$x[i]=(x[i-1]+1)*p[i]$

綜上,轉移方程為

$$f[i]=f[i-1]+(2*x[i]+1)*p[i]$$

code

1 #include2

using

namespace

std;

3#define ll long long

4const

int mod=1e4;

5const

int maxn=1e6+10;6

namespace

gengyf

10while(s>='

0'&&s<='9')

11return f*x;12}

13double

f[maxn],p[maxn],x[maxn];

14string s;int

n;15

intmain()

22for(int i=1;i<=n;i++)

26 printf("

%.4lf

",f[n]);

27return0;

28}29/*

30aggressive 有進取心的

31alert 機敏的

32alliance 聯盟

33alter 修改

34*/35}

36signed main()

view code

沒有$?$且給出出現不同字元的概率,方程同上

code 

1 #include2

using

namespace

std;

3#define ll long long

4const

int mod=1e4;

5const

int maxn=1e6+10;6

namespace

gengyf

10while(s>='

0'&&s<='9')

11return f*x;12}

13double

f[maxn],p[maxn],x[maxn];

14string s;int

n;15

intmain()

22 printf("

%.15lf

",f[n]);

23return0;

24}25/*

26aggressive 有進取心的

27alert 機敏的

28alliance 聯盟

29alter 修改

30*/31}

32signed main()

view code

沒有$?$,平方變成三次方

我:這還不簡單,把$(len+1)^2-len^2$改成$(len+1)^3-len^3$不就行了

???怎麼連樣例都沒過

蒟蒻眉頭一皺發現事情並不簡單

重新推一下式子:

$f[i]=f[i-1]+((len+1)^3-len^3)$  $=>$  $f[i]=f[i-1]+3*(len^2+len)+1$

發現化簡後的式子裡既有二次項也有一次項

需要分別維護

$x[i]$表示一次項的期望,$y[i]$表示二次項的期望

code

1 #include2

using

namespace

std;

3#define ll long long

4const

int mod=1e4;

5const

int maxn=1e6+10;6

namespace

gengyf

10while(s>='

0'&&s<='9')

11return f*x;12}

13double

f[maxn],p[maxn],x[maxn],y[maxn];

14string s;int

n;15

intmain()

23 printf("

%.1lf

",f[n]);

24return0;

25}26/*

27aggressive 有進取心的

28alert 機敏的

29alliance 聯盟

30alter 修改

31*/32}

33signed main()

view code

J Sushi 題解(期望dp

給你n個盤子,每個盤子可能有1,2,3個披薩 你選到每個盤子的概率是一樣的。你如果選到空的盤子什麼都不做 如果你選到有披薩的盤子則吃掉乙個披薩 求吃完所有披薩的期望 設現在還有u個1個盤子的披薩,v個2.z個3.則顯然吃掉下乙個披薩的概率為 u v w n則期望為n u v w 那麼顯然公式就是下面...

考試前三題題解

考自閉了,第四題陣列開小了。答案肯定不是一位數就是兩位數,先掃瞄看是否有相同的數,沒有就排序取最小的。include.h using namespace std const int m 15 int a m b m n,m bool vis m vis m int main for int i 1 ...

學習筆記 期望DP題單 概率,期望DP

目錄貳 典例營 做過很多期望的題了,但是一直沒有系統地學習過期望,這幾天終於有時間攻堅這個重要但是對我而言難得一匹的問題了.實際上我 dp 也菜得一匹。傳送門 to oi wiki 一般我們使用 p x 表示 x 發生的概率,e x 表示 x 發生的期望。我們有兩者的關係 e x sum p x i...