• [补档]两个奇怪的大水题


    导引

    这是两道由OSU(貌似是一个我没有听说过的游戏)引申出的大水题(淼到不行啊喂),壹佰万行代码哦。

    T1 OSU!

    题目

    osu 是一款群众喜闻乐见的休闲软件。
    我们可以把osu的规则简化与改编成以下的样子:
    一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串。在这个串中连续的 X个1可以贡献X^3 的分数,这x个1不能被其他连续的1所包含(也就是极长的一串1,具体见样例解释)
    现在给出n,以及每个操作的成功率,请你输出期望分数,输出四舍五入后保留1位小数。

    INPUT

    第一行有一个正整数n,表示操作个数。接下去n行每行有一个[0,1]之间的实数,表示每个操作的成功率。

    OUTPUT

    只有一个实数,表示答案。答案四舍五入后保留1位小数。

    SAMPLE

    INPUT

    3
    0.5
    0.5
    0.5

    OUTPUT

    6.0
    n<=100000

    样例说明(其实并不存在,只是我瞎说的而已= =)

    {0,0,0} 0
    {0,0,1} 1
    {0,1,0} 1
    {0,1,1} 2^3=8
    {1,0,0} 1
    {1,0,1} 1+1=2
    {1,1,0} 2^3=8
    {1,1,1} 3^3=27
    总期望=(0+1+1+8+1+2+8+27)/8=6

    解题报告

    好水啊= =
    其实就是个递推,我们要求3次方,为了方便,我们可以先推出1次方和2次方,再去推3次方,我们要用到几个及其高(jian)深(dan)的高(xiao)等(xue)数(shu)学(xue)定(gong)理(shi):

      (x+y)^2=x^2+2xy+y^2

      (x+y)^3=x^3+3(x^2)y+3x(y^2)+y^3

    然后就可以推了
     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 using namespace std;
     5 double f[100001],s[100001],t[100001];
     6 int n;
     7 double x[100001];
     8 int main(){
     9     scanf("%d",&n);
    10     for(int i=1;i<=n;i++)
    11         scanf("%lf",&x[i]);
    12     for(int i=1;i<=n;i++){
    13         f[i]=(f[i-1]+1)*x[i];
    14         s[i]=(s[i-1]+f[i-1]*2+1)*x[i];
    15         t[i]=t[i-1]+(s[i-1]*3+f[i-1]*3+1)*x[i];
    16 //      cout<<i<<' '<<f[i]<<' '<<s[i]<<' '<<t[i]<<endl;
    17     }
    18     printf("%.1lf",/*f[n]+s[n]+*/t[n]);
    19 }
    View Code

    T2 Tyvj1952 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了

    INPUT

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

    OUTPUT

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

    SAMPLE

    INPUT

    4
    ????

    OUTPUT

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

    解题报告

    话说最后那句话真是interesting呢= =
    其实跟上面那道题一样,只是把概率给出的方式变得委(zhi)婉(zhang)了
    显然,o的概率为1,x的概率为0,?的概率为0.5
    然后?
    然后就变成了上面那道题的二次方版,但要注意递推的时候的某些细节
     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 using namespace std;
     5 double f[300001],s[300001];
     6 int n;
     7 char op[300005];
     8 double x;
     9 int main(){
    10     scanf("%d%s",&n,op+1);
    11     for(int i=1;i<=n;i++){
    12         if(op[i]=='o')
    13             x=1.0;
    14         if(op[i]=='?')
    15             x=0.5;
    16         if(op[i]=='x')
    17             x=0.0;
    18         f[i]=(f[i-1]+1)*x;
    19         s[i]=s[i-1]+(f[i-1]*2+1)*x;//cout<<i<<' '<<f[i]<<' '<<s[i]<<endl;
    20     }
    21     printf("%.4f",s[n]);
    22 }
    View Code
    话说OSU到底是什么啊= =
    还有,我最近好像一直在做水题啊,这样下去不就只能在欢声笑语中打出GG了么= =(水题骑脸怎么输)
  • 相关阅读:
    angularJS 作用域
    html5的一些表单属性。
    UIScrollView 原理详解
    远程实时调试手机上的Web页面
    Web移动应用调试工具——Weinre
    WebView注入Java对象注意事项
    Android中Webview使用自定义的javascript进行回调
    [Android] Web Console: Uncaught TypeError: Object [object Object] has no method 'xxx'
    android 中 webview 怎么用 localStorage?
    iPhone 6 屏幕揭秘
  • 原文地址:https://www.cnblogs.com/hzoi-mafia/p/7276798.html
Copyright © 2020-2023  润新知