【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\n",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\n",l,r);
74             printf("%I64d\n",(s[r-1]-s[l-1]+MOD)%MOD);
75         }
76     }
77 
78     return 0;
79 }

猜你喜欢

转载自www.cnblogs.com/myx12345/p/11653815.html