zoukankan      html  css  js  c++  java
  • 【tyvj1952】easy

    AK大神随便打了就出来了。。。。。。。。。。在此给AK大神跪烂了。。。。。。。。。。。。。

    一、Easy

    [描述 Description]

    某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(
    我们来简化一下这个游戏的规则
        有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连续acomb就有a*a分,comb就是极大的连续o
        比如ooxxxxooooxxx,分数就是2*2+4*4=4+16=20Sevenkplus闲的慌就看他打了一盘,有些地方跟运气无关要么是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.1250

    【数据范围】

    Time Limitation时限1s每个测试点
    k表示?号的个数
    100%的数据 : n<=300000
    70%的数据 : k<=20
    40%的数据 : n<=200k<=20

     

     这题我想了好久,最后还是WA了

     

     

     

    想的时候,我有想出来动规方程,但是写着写着好像少了什么,最后就越写越乱,越写越想写出来,最后就写的只剩下一个小时左右。。。这种情况以后要一定避免!

    来讲下我没想出来的关键地方 

    2*(1+2+3+..+x)=x(x+1) 

    所以 x2=2*(1+2+3+..+x-1)+x

    想出来就很好做了

    首先我们来看,这个东西

           'ooo'

    第一步:ans=0*2+1=1

    第二步:ans=1+1+(1+1)=4

    第三步:ans=4+2+(2+1)=9

    答案出来了吧。看这个东西简单吧!

     回归正题         

    x数组表示从某个‘x'开始有连续的几个’o‘

    tot数组表示到某个点的数学期望答案

    动规方程:

       首先我们枚举那坨字符串

            x[i-1]+1 {if s[i]='o'}

    x[i]= 0 {if s[i]='x'}

           (x[i-1]+1) div 2 {if s[i]='?'}  (除以2是因为有两种情况“o'和‘x')

     

             tot[i-1]+x[i-1]+(x[i-1]+1)  {if s[i]='o'}

    tot[i]=tot[i-1] {if s[i]='x'}

             tot[i-1]+(x[i-1]+(x[i-1]+1)) div 2------->>tot[i-1]+x[i-1]+0.5   {if s[i]='?'}  (因为’?‘有两种结果,所以除以2)

    最后完了。。。。。。

    最后附上code

     

     1 var tot:array[0..300000] of extended;
     2     x:array[0..300000] of extended;
     3     n,i:longint;
     4     s:ansistring;
     5 begin
     6   assign(input,'easy.in'); reset(input);
     7   assign(output,'easy.out'); rewrite(output);
     8   readln(n); readln(s);
     9   for i:=1 to n do
    10    begin
    11     tot[i]:=tot[i-1];
    12     if s[i]='o' then
    13      begin
    14       x[i]:=x[i-1]+1;
    15       tot[i]:=tot[i]+x[i-1]*2+1;
    16      end
    17     else if s[i]='x' then x[i]:=0
    18     else
    19      begin
    20       x[i]:=x[i-1]/2+0.5;
    21       tot[i]:=tot[i]+x[i-1]+0.5;
    22      end;
    23    end;
    24   writeln(tot[n]:0:4);
    25   close(input); close(output);
    26 end.
    easy Code

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    DRP-ThreadLocal简单的理解
    Android开源项目SlidingMenu本学习笔记(两)
    [RxJS] Displaying Initial Data with StartWith
    [RxJS] Updating Data with Scan
    [RxJS] Stopping a Stream with TakeUntil
    [RxJS] Reactive Programming
    [RxJS] Reactive Programming
    [RxJS] Reactive Programming
    [RxJS] Starting a Stream with SwitchMap & switchMapTo
    [RxJS] Reactive Programming
  • 原文地址:https://www.cnblogs.com/oxxxo/p/3388194.html
Copyright © 2011-2022 走看看