【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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/oxxxo/p/3388194.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值