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

    AK大神又AK了!!! orzorzorz

    题意:

    给出一个字符串由'x'、'o'、'?'

    '?'有一半的几率为'x' 一半几率为'o'

    得分为所有连续的'o'的个数的平方和

    如ooxooo 得分为2*2+3*3=13

    求期望得分

    题解:

    又是一道期望题! orzorz

    AK大神只写了20行的程序 我写了80多行

    这里讲下AK大神的神做法吧 我的‘做法太麻烦了- -

    f[i]表示到i点的期望得分

    T[i]表示是一个'x'到i点的期望长度 这样表示就能无视前面的'?'了!

    相当于i之前有连续T[i]个'o'(虽然是小数但是没事 这就是期望的神奇之处)

    转移:

    if (s[i]=='x') f[i]=f[i-1],T[i]=0;

    if (s[i]=='o') f[i]=f[i-1]+T[i-1]*2+1,T[i]=T[i-1]+1;

    if (s[i]=='?') f[i]=f[i-1]+T[i-1]+0.5,T[i]=(T[i-1]+1)/2;

    代码:(AK大神的)

     1 #include <cstdio>
     2 int n;
     3 long double f[300000 + 9],T[300000 + 9];
     4 int main()
     5 {
     6     #ifndef ONLINE_JUDGE
     7     freopen("easy.in","r",stdin);
     8     freopen("easy.out","w",stdout);
     9     #endif
    10     scanf("%d
    ",&n);
    11     for (int i = 1; i <= n; ++i) {
    12         char c = getchar();
    13         if (c == 'x') {
    14             f[i] = f[i - 1];
    15             T[i] = 0;
    16         }else if (c == 'o') {
    17             f[i] = f[i - 1] + 2*T[i - 1] + 1;
    18             T[i] = T[i - 1] + 1;
    19         }else {
    20             f[i] = f[i - 1] + T[i - 1] + 0.5;
    21             T[i] = (T[i - 1] + 1)/2;
    22         }
    23     }
    24     printf("%.4f
    ",(double)f[n]);
    25 }
    View Code
  • 相关阅读:
    vue学习
    BBS登录注册技术点归纳
    BBS项目模态框的使用
    django后台管理系统
    java 之 jsp简介
    http 之 CORS简介
    web 之 session
    linux 之学习路线
    Ubuntu 之 win10更新ubuntu启动项消失
    Web 之 Cookie
  • 原文地址:https://www.cnblogs.com/g-word/p/3388310.html
Copyright © 2011-2022 走看看