其他分享
首页 > 其他分享> > P1365 WJMZBMR打osu! / Easy 题解(期望dp)

P1365 WJMZBMR打osu! / Easy 题解(期望dp)

作者:互联网

题目链接

题目思路

显然每次转移都需要知道前面连续长度的期望

所以使用两个数组,一个记录答案,一个记录连续长度期望即可

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
#define fi first
#define se second
#define debug printf("aaaaaaaaaaa\n");
const int maxn=3e5+5,inf=0x3f3f3f3f,mod=51123987,mul=233;
const ll INF=0x3f3f3f3f3f3f3f3f;
const double eps=1e-7;
int n;
char s[maxn];
double dp[maxn][2];
int main(){
    scanf("%d %s",&n,s+1);
    for(int i=1;i<=n;i++){
        if(s[i]=='o'){
            dp[i][1]=dp[i-1][1]+2*dp[i-1][0]+1;
            dp[i][0]=dp[i-1][0]+1;
        }else if(s[i]=='x'){
            dp[i][1]=dp[i-1][1];
            dp[i][0]=0;
        }else{
            dp[i][1]=dp[i-1][1]+dp[i-1][0]+0.5;
            dp[i][0]=(dp[i-1][0]+1)/2;
        }
    }
    printf("%.4f\n",dp[n][1]);
    return 0;
}

标签:P1365,const,int,题解,osu,typedef,long,maxn,define
来源: https://www.cnblogs.com/hunxuewangzi/p/15544804.html