Easy与Osu
Easy
題目描述
某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠運氣:(
我們來簡化一下這個游戲的規則
有n次點擊要做,成功了就是o,失敗了就是x,分數是按comb計算的,連續a個comb就有a*a分,comb就是極大的連續o。
比如ooxxxxooooxxx,分數就是2*2+4*4=4+16=20。
Sevenkplus閑的慌就看他打了一盤,有些地方跟運氣無關要么是o要么是x,有些地方o或者x各有50%的可能性,用?號來表示。
比如oo?xx就是一個可能的輸入。
那么WJMZBMR這場osu的期望得分是多少呢?
比如oo?xx的話,?是o的話就是oooxx => 9,是x的話就是ooxxx => 4
期望自然就是(4+9)/2 =6.5了
輸入
第一行一個整數n,表示點擊的個數
接下來一個字符串,每個字符都是ox?中的一個
輸出
一行一個浮點數表示答案
四舍五入到小數點后4位
如果害怕精度跪建議用long double或者extended
樣例輸入
4 ????樣例輸出
4.1250n<=300000 osu很好玩的哦 WJMZBMR技術還行(霧),x基本上很少呢Osu
題目描述
osu 是一款群眾喜聞樂見的休閑軟件。? 我們可以把osu的規則簡化與改編成以下的樣子:? 一共有n次操作,每次操作只有成功與失敗之分,成功對應1,失敗對應0,n次操作對應為1個長度為n的01串。在這個串中連續的 X個1可以貢獻X^3 的分數,這x個1不能被其他連續的1所包含(也就是極長的一串1,具體見樣例解釋)? 現在給出n,以及每個操作的成功率,請你輸出期望分數,輸出四舍五入后保留1位小數。?輸入
第一行有一個正整數n,表示操作個數。接下去n行每行有一個[0,1]之間的實數,表示每個操作的成功率。?輸出
只有一個實數,表示答案。答案四舍五入后保留1位小數。?樣例輸入
3 0.5 0.5 0.5樣例輸出
6.0【題解】
一個游戲產生的兩道題,只不過一個是二次方一個是三次方,套路非常相近。f[i]表示以i為結尾的極大連續1長度的期望(其實在此處還不用考慮結尾不結尾的事),g[i]表示平方的期望,h[i]表示立方的期望。g[i]本應=(f[i-1]+1)^2=f[i-1]*f[i-1]+2*f[i-1]+1,但是這里平方是在期望意義下的,所以用g[i-1]代替f[i-1]*f[i-1],最后乘上這一位是1的概率,立方同理。計算結果時要考慮下一位的情況了,再乘上(1-p[i+1])。這道題在期望、概率、數字之間的轉化比較靈活,也展現了高次遞推的一些套路。安心地使用double并沒有炸精度。 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int sj=300010; int n; double f[sj],g[sj],jg; char a[sj]; int main() {//freopen("t.txt","r",stdin);scanf("%d%s",&n,a);for(int i=1;i<=n;i++){if(a[i-1]=='o') {f[i]=f[i-1]+1;g[i]=g[i-1]+2*f[i-1]+1;}if(a[i-1]=='x'){ f[i]=0;g[i]=0;}if(a[i-1]=='?'){ f[i]=(f[i-1]+1)/2;g[i]=(g[i-1]+2*f[i-1]+1)/2;}if(a[i]!='?'&&a[i]!='o') jg+=g[i];if(a[i]=='?') jg+=g[i]/2;}printf("%.4lf",jg);//while(1);return 0; } #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int sj=100010; double f[sj],g[sj],h[sj],jg,p[sj]; int n; int main() {//freopen("t.txt","r",stdin);scanf("%d",&n);for(int i=1;i<=n;i++) {scanf("%lf",&p[i]);f[i]=(f[i-1]+1)*p[i];}for(int i=1;i<=n;i++) g[i]=(g[i-1]+2*f[i-1]+1)*p[i];for(int i=1;i<=n;i++){ h[i]=(h[i-1]+3*g[i-1]+3*f[i-1]+1)*p[i];jg+=h[i]*(1-p[i+1]);}printf("%.1lf",jg);//while(1);return 0; }
?
?轉載于:https://www.cnblogs.com/moyiii-/p/7241936.html
總結
- 上一篇: Linux下基本栈溢出攻击【转】
- 下一篇: POJ 1260 Pearls