• 2020 camp dy-2-A


    题面

    7-1 2A. 托米的字符串

    托米有一个字符串,他经常拿出来玩。这天在英语课上,他学习了元音字母,以及半元音y。“这些字母是非常重要的!”,托米这样想着,“那么我如果随机取一个子串,里面元音占比期望会有多大呢?”

    于是,请你求出对于托米的字符串,随机取一个子串,元音(,)字母占子串长度比的期望是多少。

    输入格式:

    读入一个长度不超过1的只包含小写字母的字符串,即托米的字符串。

    输出格式

    输出所求的期望值,要求相对(绝对)误差不超过1。

    输入样例:

    legilimens
    
     

    输出样例:

    0.446746032

    题解

    #include <cstdio>
    #include <algorithm>
    
    #define RE register
    #define FOR(i,a,b) for(RE int i = a;i <= b;++i)
    #define ROF(i,a,b) for(RE int i = a;i >= b;--i)
    #define sc(n) scanf("%d", &n)
    #define ll long long
    
    using namespace std;
    
    const int maxn = 1e6 + 10;
    
    char s[maxn];
    char p[] = "aeiouy";
    ll sum[maxn], f[maxn];
    int len;
    
    void sumtot()
    {
        int& i = len;
        for (i = 1; s[i]; ++i)
        {
            int flag = 0;
            for (RE int j = 0; p[j]; ++j)
                if (p[j] == s[i])
                {
                    flag = 1;
                    break;
                }
            sum[i] = sum[i - 1] + flag;
        }
        --i;
    }
    
    int main()
    {
        scanf("%s", s + 1);
        sumtot();
        FOR(i, 1, len)
            f[i] = f[i - 1] + sum[len - i + 1] - sum[i - 1];
        long double ans = 0;
        FOR(i, 1, len)ans += (1.0 * f[i] / i);
        ans *= 2;
        ans /= 1ll * len * (len + 1);
        printf("%.10llf", ans);
        return 0;
    }
    

      

     
  • 相关阅读:
    由少林寺比武想到软件行业分工
    微软SQL 报表服务的研究
    图形化窗体表单设计器
    多层数据源处理复杂数据结构
    Universal menu command handle pattern
    使用foreach来读取记录
    C#计算20902个汉字的拼音首字母
    软件的价值
    虚控件在GUI编程中的应用
    深刻的检讨书
  • 原文地址:https://www.cnblogs.com/2aptx4869/p/12196547.html
Copyright © 2020-2023  润新知