zoukankan      html  css  js  c++  java
  • Codeforces 623D [Amazing概率题]

    很有趣的一道题吖!

    做法:贪心+迭代

    • Sigma(i*(pr[i]-pr[i-1])))=n-sigma(pr[i]), 所以我们贪心地是pr[i]尽可能大。
    • 也就是让pr[i]/pr[i-1]尽可能大。

    这种类型的贪心,和17EC-Final的那个最小化方差的题挺相似的。

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <vector>
    #include <cmath>
    #include <cstring>
    #include <map>
    #include <set>
    using namespace std;
    typedef long long LL;
    
    #define rd(x) scanf("%d",&x)
    #define prt(x) printf("%d
    ", x);
    #define prtvec(v) for(int i=0;i<v.size();i++) printf("%d%c", v[i], i==(v.size()-1)?'
    ':' ');
    #define sz(x) (int)x.size()
    #define pb(x) push_back(x)
    #define rep(i,x,y) for(int i=x;i<=y;i++)
    #define per(i,y,x) for(int i=y;i>=x;i--)
    
    const int N=300000+10;
    const double EPS = 1e-8;
    
    int n;
    double f[N][102],g[N],p[N];
    
    int main(){
        rd(n); rep(i,1,n) scanf("%lf",&p[i]), p[i]/=100.0;
        
        rep(i,1,n) f[n][i] = p[i];
        
        rep(i,n+1,N-1) {
            double mx = 0; int bst = -1;
            rep(j,1,n) {
                double tmp = (1-f[i-1][j])*p[j]/f[i-1][j];
                if (tmp > mx) {
                    mx=tmp, bst = j;
                }
            } 
            rep(j,1,n) f[i][j]=f[i-1][j];
            f[i][bst]=(1-f[i-1][bst])*p[bst] + f[i-1][bst];
        }
    
        double res = 0;
        rep(i,n,N-1) {
            g[i]=1;
            rep(j,1,n) g[i]*=f[i][j]; 
            res=res+i*(g[i]-g[i-1]);
        }
        printf("%.5f
    ", res);
    
    }
    

      

  • 相关阅读:
    xampp 安装后无法启动apache 的解决方法
    前端常用规范
    FontAwesome 奥森图标的学习
    获取iframe 内元素的方法
    CSS中的选择器
    使用JavaScript缓存图片
    控制台console对象常用的一些方法
    清除浮动的方法
    浏览器存储:cookie
    HTML的文档类型:<!DOCTYPE >
  • 原文地址:https://www.cnblogs.com/RUSH-D-CAT/p/8955538.html
Copyright © 2011-2022 走看看