2019 Multi-University Training Contest 7 Kejin Player Final Exam

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 }

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 }

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

时间: 2024-10-04 07:35:18

2019 Multi-University Training Contest 7 Kejin Player Final Exam的相关文章

2019 HDOJ Multi-University Training Contest Stage 8(杭电多校)

中规中矩的一场. 题目链接:http://acm.hdu.edu.cn/contests/contest_show.php?cid=855 C: 定义函数f(d,k)为数字d在数字k中出现的次数.给定d和x,找到尽量大的k使得k<=x且f(d,k)==k. 很诡异的一题,最好的做法仍然是打表找规律.题解给了一个很神奇的结论:满足条件的k<1011且k的分布非常稀疏. 1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* defin

2019 HDOJ Multi-University Training Contest Stage 10(杭电多校)

最后一场多校打得一般般. 题目链接:http://acm.hdu.edu.cn/contests/contest_show.php?cid=857 C: E: I: BFS水题. 1 /* Codeforces Contest 2019_mutc_10 2 * Problem I 3 * Au: SJoshua 4 */ 5 #include <queue> 6 #include <cstdio> 7 #include <vector> 8 #include <s

2019 HDOJ Multi-University Training Contest Stage 2(杭电多校)

服务器时不时爆炸,有点难受. 题目链接:http://acm.hdu.edu.cn/userloginex.php?cid=849 A: 神仙题.不可做题. B: dp. C: 推式子题. D: 边分治. E: 可以数学推理的题.但是显然打表更快找出规律.对打出来的结果做两次差分即可. 1 /* basic header */ 2 #include <bits/stdc++.h> 3 /* define */ 4 #define ll long long 5 #define dou doubl

2019 HDOJ Multi-University Training Contest Stage 4(杭电多校)

很抱歉过了这么多天才补这场,最近真的挺忙的…… 出题人是朝鲜的(目测是金策工业?),挺难. 题目链接:http://acm.hdu.edu.cn/contests/contest_show.php?cid=851 A: 签到题. 对于当前的点,若其编号为偶数,则可与1相连使得边权贡献为0.否则从低位向高位找当前点编号的二进制表示的第一个0,使这个0变为1,其他位置变为0并检查新的数字是否小于等于n.若小于等于n则贡献为0,反之贡献为1. 1 /* basic header */ 2 #inclu

2019 Nowcoder Multi-University Training Contest 1 H-XOR

由于每个元素贡献是线性的,那么等价于求每个元素出现在多少个异或和为$0$的子集内.因为是任意元素可以去异或,那么自然想到线性基.先对整个集合A求一遍线性基,设为$R$,假设$R$中元素个数为$r$,那么任取一个不在$R$内的元素,$R$中肯定存在一种取法能和这个元素异或和为$0$.同理,取定一个不在$R$内的元素,再随便取另外任意个不在$R$内的元素,$R$内仍然存在一种取法使得这个异或和为$0$.那么每个不在$R$内的元素包含在$2^{n - r - 1}$个集合内(其他不在$R$内的元素可以

HDU校赛 | 2019 Multi-University Training Contest 3

2019 Multi-University Training Contest 3 http://acm.hdu.edu.cn/contests/contest_show.php?cid=850 1004. Distribution of books 考虑二分答案,设当前二分出来的是\(x\). 设\(f_i\)表示前\(i\)个能分成最多的段数,使得每一段和都\(\leqslant x\). 转移显然,枚举一个\(j\),若\(s_i-s_j\leqslant x\)则转移,\(s_i\)表示前

[最短路,最大流最小割定理] 2019 Multi-University Training Contest 1 Path

题目:http://acm.hdu.edu.cn/showproblem.php?pid=6582 Path Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 3747    Accepted Submission(s): 1075 Problem Description Years later, Jerry fell in love

HDU4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)

Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Description Alice and Bob are playing together. Alice is crazy about art and she has visited many museums around the world. She has

HDU 2018 Multi-University Training Contest 3 Problem A. Ascending Rating 【单调队列优化】

任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6319 Problem A. Ascending Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 5943    Accepted Submission(s): 2004 Problem Description Before