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)\),使得下式成立:

\[\begin{eqnarray*} a \cdot 10^x + b \cdot 10^y = c \cdot 10^z \end{eqnarray*} \]

其中\(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)\)小的时间的最大值尽量小即可,均摊即可,最大值为:

\[\begin{eqnarray*} \left\lceil \frac{m + 1}{n - (k - 1)} \right\rceil \end{eqnarray*} \]

最终的答案为:

\[\begin{eqnarray*} (m + 1) + (k - 1) \cdot \left\lceil \frac{m + 1}{n - k + 1} \right\rceil \end{eqnarray*} \]

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\)次升级成功的代价。
即:

\[\begin{eqnarray*} f_{i + 1} = f_i + a_i + (t_i - 1)(f_i - f_{x_i} + a_i) \end{eqnarray*} \]

其中\(p_i = \frac{1}{t_i}\),所以\(t_i = \frac{1}{p_i}\),那么有:

\[\begin{eqnarray*} f_{i + 1} = f_i + a_i + (\frac{1}{p_i} - 1)(f_i - f_{x_i} + a_i) \end{eqnarray*} \]

posted @ 2019-08-27 10:01  Dup4  阅读(123)  评论(0编辑  收藏  举报