2019 Multi-University Training Contest 7
Contest Info
[Practice Link](https://cn.vjudge.net/contest/322366#overview)
Solved | A | B | C | D | E | F | G | H | I | J | K |
---|---|---|---|---|---|---|---|---|---|---|---|
4/11 | Ø | - | - | - | - | O | - | - | - | O | O |
- O 在比赛中通过
- Ø 赛后通过
- ! 尝试了但是失败了
- - 没有尝试
Solutions
A - A + B = C
题意:
给出三个大数\(a, b, c\),要求找到一组\((x, y, z)\),使得下式成立:
其中\(0 \leq x, y, z, \leq 10^6\)
思路:
考虑先去掉\(a, b, c\)的后缀所有的\(0\)。
然后考虑\(c\)的最后一位是由谁来提供的,显然只有三种情况:
- \(a + b\)提供的
- \(a\)的后缀提供
- \(b\)的后缀提供
显然第一种情况,直接加一下判断一下即可。
对于第二种和第三种可以归为一类,我们只讨论第二种。
那么就找到\(a\)和\(c\)的最长公共后缀,那么把\(b\)补后缀长度个\(0\),然后把\(a + b\)和\(c\)判一下即可。
然后有一个\(case\),就是如果\(a\)整个串就是\(c\)的后缀,那么有可能\(b\)要多补一些\(0\),即\(c\)是这样的:
a + 0000000000 + b
这样构成的,所以如果\(a\)整个串都是\(c\)的后缀,还要继续往前判断\(c\)的\(0\)的个数,然后\(b\)也要相应的把这些\(0\)补上。
F - Final Exam
题意:
在一场考试中,有\(n\)类问题,总分为\(m\),你需要至少做出\(k\)个问题。
对于一类问题,如果它在试卷中的分数为\(x\)分,那么对于这类问题,你至少需要复习\(x + 1\)分钟才可以做出它
现在询问你至少需要复习多少时间,才能保证不管试卷的分数如何分布,都至少可以做出\(K\)个问题。
思路:
反过来思考,假设我知道你对于每类问题复习了多少分钟,我想让你做不出\(k\)个问题,我应该怎么办?
那么我显然是选择\(n - (k - 1)\)个你复习时间少的那些问题,然后把分数刚好设为你的那一类问题的复习时间即可。
那么如果我能成功,说明你复习时间前\(n - (k - 1)\)小的问题的时间和\(<= m\),那么你要怎么做?
那么你需要让你前\(n - (k - 1)\)小的问题的时间和\(> m\)即可。
那么显然前\(n - (k - 1)\)小的问题的时间和固定为\(m + 1\)是最优的,那么我们考虑后面\(k - 1\)个问题的分数如何设置?
那么显然只要大于等于前\(n - (k - 1)\)小的时间的最大值即可。
那么只要让前\(n - (k - 1)\)小的时间的最大值尽量小即可,均摊即可,最大值为:
最终的答案为:
J - Just Repeat
题意:
有两个人玩游戏,\(A\)有\(n\)张牌,\(B\)有\(m\)张牌,每张牌有颜色,如果某一种颜色的牌被另一个人先出了,那么这个人就再也不能出这种颜色的牌。
他们轮流出牌,直到谁不能出牌谁输。
思路:
每个人都想让自己可出的牌尽量多。
那么它们肯定首先想出大家共有的牌,因为这样就相当于抢占主动权。
那么我们只考虑大家共有的牌:
我们考虑两种颜色的牌,\(A\)分别有\(a_i, a_j\)张,\(B\)分别有\(b_i, b_j\)张,假如\(A\)取了\(a_i\),那么\(A\)与\(B\)的可出牌数差为\(a_i - b_j\),反之则为\(a_j - b_i\)。
所以\(A\)在这一轮如果选择\(a_i\),那么说明\(a_i - b_j > a_j - b_i\),即\(a_i + b_i > b_i + b_j\),那么根据这个排序,贪心轮流取即可。
K - Kejin Player
题意:
一个游戏中,有\(n + 1\)级,现在告诉你从\(i \rightarrow i + 1\),有\(p_i\)的概率升级成功,尝试升级一次需要花费\(a_i\),如果升级失败则会调到\(x_i(x_i \leq i)\)级,问从\(l\)级升到\(r\)级的期望金钱花费。
思路:
设从\(l\)到\(r\)的期望为\(g(l, r)\), 这种期望满足减法\(g(l, r) = g(1, r) - g(1, l)\),那么我们令\(f_i\)表示从\(1\)级升级到\(i\)级的期望,考虑怎么递推?
我们假设从\(i \rightarrow i + 1\)需要升级\(t\)次才能升级成功,那么从\(i \rightarrow i + 1\)的花费即是\(t - 1\)次升级失败的代价和\(t\)次升级成功的代价。
即:
其中\(p_i = \frac{1}{t_i}\),所以\(t_i = \frac{1}{p_i}\),那么有: