zoukankan      html  css  js  c++  java
  • 牛客练习赛39 C 流星雨 (概率dp)

    题意:

    现在一共有n天,第i天如果有流星雨的话,会有wi颗流星雨。
    第1天有流星雨的概率是p1
    如果第i1 (i2)天有流星雨,第i天有流星雨的可能性是pi+P,否则是pi。
    求n天后,流星雨颗数的期望。
    分数以逆元形式输出
     
    思路:
    直接在逆元情况下做
    第i天有流星雨的概率为t[i]=t[i-1]*(p[i-1]+P)+(1-t[i-1])*p[i]
    注意减法的时候要加mod
    代码:
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<string>
    #include<stack>
    #include<queue>
    #include<deque>
    #include<set>
    #include<vector>
    #include<map>
    #include<functional>
        
    #define fst first
    #define sc second
    #define pb push_back
    #define mem(a,b) memset(a,b,sizeof(a))
    #define lson l,mid,root<<1
    #define rson mid+1,r,root<<1|1
    #define lc root<<1
    #define rc root<<1|1
    #define lowbit(x) ((x)&(-x)) 
    
    using namespace std;
    
    typedef double db;
    typedef long double ldb;
    typedef long long ll;
    typedef unsigned long long ull;
    typedef pair<int,int> PI;
    typedef pair<ll,ll> PLL;
    
    const db eps = 1e-6;
    const int mod = 1e9+7;
    const int maxn = 2e6+100;
    const int maxm = 2e6+100;
    const int inf = 0x3f3f3f3f;
    const db pi = acos(-1.0);
    ll fp(ll a,ll n){
        ll ans = 1;
        while(n){
            if(n&1)ans*=a;
            n>>=1;
            a*=a;
            a%=mod;
            ans%=mod;
        }
        return ans;
    }
    ll f[maxn],t[maxn],w[maxn];
    ll p;
    int main() {
        ll n, a, b;
        scanf("%lld %lld %lld", &n, &a, &b);
        p = a*fp(b,mod-2)%mod;
        for(int i = 1; i <=n; i++){
            scanf("%lld", &w[i]);
        }
        for(int i = 1; i <= n; i++){
            scanf("%lld %lld", &a, &b);
            f[i] = a*fp(b,mod-2)%mod;
        }
        ll tmp = 1;
        ll ans = f[1]*w[1]%mod;
        t[1]=f[1];
        for(int i = 2; i <= n; i++){
            t[i] += t[i-1]*(f[i]+p)%mod+(1-t[i-1]+mod)*f[i]%mod;
            t[i]%=mod;
            ans+=t[i]*w[i]%mod;
            ans%=mod;
        }
        printf("%lld",ans);
        return 0;
    }
  • 相关阅读:
    JS中的call_user_func封装
    js中insertAdjacentHTML的玩法
    小tip: DOM appendHTML实现及insertAdjacentHTML
    js获取和设置属性的方法
    安装Yeoman,遇到的问题
    HTML中Select的使用详解
    jQuery Ajax异步处理Json数据详解
    chrome浏览器Uncaught TypeError: object is not a function问题解决
    SpringBoot Web实现文件上传下载功能实例解析
    SpringMVC Web实现文件上传下载功能实例解析
  • 原文地址:https://www.cnblogs.com/wrjlinkkkkkk/p/10357980.html
Copyright © 2011-2022 走看看