zoukankan      html  css  js  c++  java
  • BZOJ 3450: Tyvj1952 Easy

    3450: Tyvj1952 Easy

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 616  Solved: 465
    [Submit][Status][Discuss]

    Description

    某一天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了

    Input


    第一行一个整数n,表示点击的个数
    接下来一个字符串,每个字符都是ox?中的一个

    Output

    一行一个浮点数表示答案
    四舍五入到小数点后4位
    如果害怕精度跪建议用long double或者extended

    Sample Input

    4
    ????

    Sample Output

    4.1250

    n<=300000
    osu很好玩的哦
    WJMZBMR技术还行(雾),x基本上很少呢

    HINT

    Source

    我们都爱GYZ杯

    分析:

    最直接的考虑就是$DP$,但是我们发现状态是$O(N^{2})$的,所以考虑直接计算...

    根据期望的线性性,我们可以分别计算每个字符的期望贡献分值然后求和...

    我们观察可以得到,如果在一个长为$x$的$o$串之后接上一个$o$,那么答案加上了$(x+1)^{2}-x^{2}=2x+1$,也就是说,每个字符的贡献分值和它前面的期望$o$串长度有关系...

    所以每个字符的期望如下:

    $o$:$l[i]=l[i-1]+1$,$ans+=l[i-1]*2+1$

    $?$:$l[i]=frac {l[i-1]+1}{2}$,$ans+=frac {l[i-1]*2+1}{2}$

    然后直接求和...

    代码:

    #include<algorithm>
    #include<iostream>
    #include<cstring>
    #include<cstdio>
    //by NeighThorn
    using namespace std;
    
    const int maxn=300000+5;
    
    int n;
    double ans,l[maxn]; 
    
    char s[maxn]; 
    
    signed main(void){
    	scanf("%d%s",&n,s+1);
    	for(int i=1;i<=n;i++){
    		if(s[i]=='?')
    			l[i]=(l[i-1]+1.0)/2.0,ans+=(l[i-1]*2.0+1.0)/2.0;
    		else if(s[i]=='o')
    			l[i]=l[i-1]+1.0,ans+=l[i-1]*2.0+1.0;
    	}
    	printf("%.4f
    ",ans);
    	return 0;
    }
    

      


    By NeighThorn

  • 相关阅读:
    HDU 5642 King's Order 动态规划
    HDU 5640 King's Cake GCD
    HDU 5641 King's Phone 模拟
    HDU 5299 Circles Game 博弈论 暴力
    HDU 5294 Tricks Device 网络流 最短路
    HDU 5289 Assignment rmq
    HDU 5288 OO’s Sequence 水题
    星际争霸 虚空之遗 人族5BB 操作流程
    Codeforces Beta Round #3 D. Least Cost Bracket Sequence 优先队列
    Codeforces Beta Round #3 C. Tic-tac-toe 模拟题
  • 原文地址:https://www.cnblogs.com/neighthorn/p/6475834.html
Copyright © 2011-2022 走看看