码迷,mamicode.com
首页 > 其他好文 > 详细

2019 Multi-University Training Contest 7 Kejin Player Final Exam

时间:2019-08-12 23:48:05      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:owb   i+1   情况   define   for   sync   时间   lse   假设   

Kejin Player 期望DP 

题意:

初始等级为1,每一级有四个参数 r , s , x , a 。 

每一级有一个概率p=r/s花费a的代价升级到下一级,失败可能会倒退到x级

 

设从 l 到 r 的期望为 g(l, r), 这种期望满足减法 g(l, r) = g(1, r) − g(1, l).

因为升级只能一级一 级升, 所以要从 1 升级到 r, 必然要经过 l.

求一个前缀和

sum[i+1]=sum[i]+ai * si / ri + (sum[i]-sum[x])*(si-ri)/ri;

ai * si / ri + (sum[i]-sum[x])*(si-ri)/ri  这个类似于二项分布

一个是升到下一级的花费,一个是失败后回到 i 这一级的花费

技术图片
 1 #include <set>
 2 #include <map>
 3 #include <stack>
 4 #include <queue>
 5 #include <cmath>
 6 #include <cstdio>
 7 #include <string>
 8 #include <vector>
 9 #include <time.h>
10 #include <cstring>
11 #include <iostream>
12 #include <algorithm>
13 #include <unordered_map>
14 
15 
16 #define  pi acos(-1.0)
17 #define  eps 1e-9
18 #define  fi first
19 #define  se second
20 #define  rtl   rt<<1
21 #define  rtr   rt<<1|1
22 #define  bug               printf("******\n")
23 #define  mem(a, b)         memset(a,b,sizeof(a))
24 #define  name2str(x)       #x
25 #define  fuck(x)           cout<<#x" = "<<x<<endl
26 #define  sf(n)             scanf("%d", &n)
27 #define  sff(a, b)         scanf("%d %d", &a, &b)
28 #define  sfff(a, b, c)     scanf("%d %d %d", &a, &b, &c)
29 #define  sffff(a, b, c, d) scanf("%d %d %d %d", &a, &b, &c, &d)
30 #define  pf                printf
31 #define  FIN               freopen("../date.txt","r",stdin)
32 #define  gcd(a, b)         __gcd(a,b)
33 #define  lowbit(x)         x&-x
34 #define  IO                iOS::sync_with_stdio(false)
35 
36 
37 using namespace std;
38 typedef long long LL;
39 typedef unsigned long long ULL;
40 const int maxn = 1e6 + 7;
41 const int maxm = 8e6 + 10;
42 const int INF = 0x3f3f3f3f;
43 const int mod = 1e9 + 7;
44 
45 LL expmod(LL a, LL b) {
46     LL res = 1;
47     while (b) {
48         if (b & 1) res = res * a % mod;
49         a = a * a % mod;
50         b = b >> 1;
51     }
52     return res;
53 }
54 
55 
56 int t, n, q;
57 struct node {
58     LL r, s, x, a;
59 } qu[maxn];
60 LL sum[maxn];
61 
62 int main() {
63     //FIN;
64     sf(t);
65     while (t--) {
66         sff(n, q);
67         for (int i = 1; i <= n; i++) scanf("%lld%lld%lld%lld", &qu[i].r, &qu[i].s, &qu[i].x, &qu[i].a);
68         sum[1] = 0;
69         for (int i = 1; i <= n; i++) {
70             sum[i + 1] = sum[i] + qu[i].s * expmod(qu[i].r, mod - 2) % mod * qu[i].a % mod +
71                          (qu[i].s - qu[i].r + mod) % mod * expmod(qu[i].r, mod - 2) % mod *
72                          (sum[i] - sum[qu[i].x] + mod) % mod;
73            // printf("sum[%d] = %d\n", i + 1, sum[i + 1]);
74             sum[i+1]%=mod;
75         }
76         while (q--) {
77             int L, R;
78             sff(L, R);
79             printf("%lld\n", (sum[R] - sum[L]+mod)%mod);
80         }
81     }
82     return 0;
83 }
View Code

 

Final Exam 思维题

题意:

有n个题目,每个题目的分数总和为m,你不知道哪个题目的分数是多少。

一个题目的分数是X,则你最少需要X+1的时间才能做出这一个问题。

每一题的分数范围都是【0,m】

问你保证回答出k个问题的最小代价是多少。

因为每一题的分数未知,你无法知道前K个问题的最小代价和。

 

考虑极端情况,假设你要问答K个问题,有K-1的都是0分,剩下的问题总分是m分,

如何保证一定可以回答出K个问题呢

那就是对于剩下的n-k+1个问题都复习m/(n-k+1)+1小时,

其实就是你保证你剩下的n-k+1的问题复习m小时以上(这样你这个n-k+1个问题里面你至少可以做出来一个)

这个可以保证这n个问题无论你选哪一个都有K个你做的出。

 

完全不会分析,流下了菜鸡的眼泪。

 

技术图片
 1 #include <bits/stdc++.h>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <queue>
 5 #include <cmath>
 6 #include <algorithm>
 7 #include <set>
 8 #include <iostream>
 9 #include <map>
10 #include <stack>
11 #include <string>
12 #include <time.h>
13 #include <vector>
14 
15 #define  pi acos(-1.0)
16 #define  eps 1e-9
17 #define  fi first
18 #define  se second
19 #define  rtl   rt<<1
20 #define  rtr   rt<<1|1
21 #define  bug         printf("******\n")
22 #define  mem(a, b)    memset(a,b,sizeof(a))
23 #define  name2str(x) #x
24 #define  fuck(x)     cout<<#x" = "<<x<<endl
25 #define  sf(n)       scanf("%d", &n)
26 #define  sff(a, b)    scanf("%d %d", &a, &b)
27 #define  sfff(a, b, c) scanf("%d %d %d", &a, &b, &c)
28 #define  sffff(a, b, c, d) scanf("%d %d %d %d", &a, &b, &c, &d)
29 #define  pf          printf
30 #define  FRE(i, a, b)  for(i = a; i <= b; i++)
31 #define  FREE(i, a, b) for(i = a; i >= b; i--)
32 #define  FRL(i, a, b)  for(i = a; i < b; i++)+
33 #define  FRLL(i, a, b) for(i = a; i > b; i--)
34 #define  FIN               freopen("../date.txt","r",stdin)
35 #define  gcd(a, b)    __gcd(a,b)
36 #define  lowbit(x)   x&-x
37 #define rep(i, a, b) for(int i=a;i<b;++i)
38 #define per(i, a, b) for(int i=a-1;i>=b;--i)
39 
40 using namespace std;
41 typedef long long LL;
42 typedef unsigned long long ULL;
43 const int maxn = 3e3 + 7;
44 const int maxm = 8e6 + 10;
45 const int INF = 0x3f3f3f3f;
46 const int mod = 10007;
47 
48 
49 int t;
50 LL n, m, k;
51 
52 int main() {
53     sf(t);
54     while (t--) {
55         scanf("%lld%lld%lld", &n, &m, &k);
56         printf("%lld\n", m + k + (k - 1) * (m / (n - k + 1)));
57     }
58     return 0;
59 }
View Code

 

2019 Multi-University Training Contest 7 Kejin Player Final Exam

标签:owb   i+1   情况   define   for   sync   时间   lse   假设   

原文地址:https://www.cnblogs.com/qldabiaoge/p/11343283.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!