zoukankan      html  css  js  c++  java
  • 【HDOJ6656】Kejin Player(期望DP)

    题意:玩一个共有n级的游戏,i级出发每次可以花a[i]的代价,有p[i]的几率变成i+1级,有1-p[i]的几率变成x[i]级,x[i]<=i

    多次询问,每次询问从l级升到r级的期望总代价

    n,q<=5e5,0<=a[i]<=1e9

    思路:

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 typedef unsigned int uint;
     5 typedef unsigned long long ull;
     6 typedef pair<int,int> PII;
     7 typedef pair<ll,ll> Pll;
     8 typedef vector<int> VI;
     9 typedef vector<PII> VII;
    10 #define N  1100000
    11 #define M  4100000
    12 #define fi first
    13 #define se second
    14 #define MP make_pair
    15 #define pi acos(-1)
    16 #define mem(a,b) memset(a,b,sizeof(a))
    17 #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
    18 #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
    19 #define lowbit(x) x&(-x)
    20 #define Rand (rand()*(1<<16)+rand())
    21 #define id(x) ((x)<=B?(x):m-n/(x)+1)
    22 #define ls p<<1
    23 #define rs p<<1|1
    24 
    25 const ll MOD=1e9+7,inv2=(MOD+1)/2;
    26       double eps=1e-6;
    27       int INF=1e9;
    28 
    29 ll s[N];
    30 
    31 ll read()
    32 {
    33    ll v=0,f=1;
    34    char c=getchar();
    35    while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
    36    while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
    37    return v*f;
    38 }
    39 
    40 ll pw(ll x,ll y)
    41 {
    42     ll t=1;
    43     while(y)
    44     {
    45         if(y&1) t=t*x%MOD;
    46         x=x*x%MOD;
    47         y>>=1;
    48     }
    49     return t;
    50 }
    51 
    52 int main()
    53 {
    54     //freopen("1.in","r",stdin);
    55     int cas;
    56     scanf("%d",&cas);
    57     while(cas--)
    58     {
    59         int n,q;
    60         scanf("%d%d",&n,&q);
    61         rep(i,0,n) s[i]=0;
    62         rep(i,1,n)
    63         {
    64             ll ri=read(),si=read(),xi=read(),ai=read();
    65             ll fi=(si*ai%MOD+(si-ri+MOD)*(s[i-1]-s[xi-1]+MOD)%MOD)%MOD*pw(ri,MOD-2)%MOD;
    66             //printf("i=%d fi=%I64d
    ",i,fi);
    67             s[i]=(s[i-1]+fi)%MOD;
    68         }
    69         rep(i,1,q)
    70         {
    71             int l,r;
    72             scanf("%d%d",&l,&r);
    73             //printf("l=%d r=%d
    ",l,r);
    74             printf("%I64d
    ",(s[r-1]-s[l-1]+MOD)%MOD);
    75         }
    76     }
    77 
    78     return 0;
    79 }
  • 相关阅读:
    python爬虫中遇到的问题以及解决方法
    python爬虫中涉及json数据的处理
    python——selenium库的使用
    python数据可视化(一)——绘制随机漫步图
    Python练习题——用列表的方法输出杨辉三角
    python——使用xlwing库进行Excel操作
    DesignPattern_Java:Factory Method Pattern
    eclipse导出可执行的jar包
    DesignPattern_Java:SingletonPattern
    DesignPattern_Java:设计模式分类和设计原则
  • 原文地址:https://www.cnblogs.com/myx12345/p/11653815.html
Copyright © 2011-2022 走看看