2018 German Collegiate Programming Contest (GCPC 18)

Contest Info


[Practice Link](https://codeforc.es/gym/102021)
Solved A B C D E F G H I J K L M
9/13 - - O O O O - O O - Ø O O
  • O 在比赛中通过
  • Ø 赛后通过
  • ! 尝试了但是失败了
  • - 没有尝试

Solutions


Problem C: Coolest Ski Route

题意:
给出一个\(DAG\),寻找一条最长路,每个点只能经过一次。

思路:
因为是个\(DAG\),直接拓扑序\(DP\)即可。

为什么对每个点为起点跑\(Dijkstra\)是错误的?
\(Dijkstra\)的本质是贪心,它只能用来求边权不为负的最短路,将权值取负去用\(Dijkstra\)跑最短路是错误的。

Problem D: Down the Pyramid

题意:
给出数字金字塔的第二层,问有多少种合法的第一层的数的方案。

思路:
令第二层的数一次为\(b_1, b_2, \cdots, b_n\),第一层的数为\(a_1, a_2, \cdots, a_{n + 1}\)
那么有一下式子:

\[\begin{eqnarray*} a_1 &=& x \\ a_2 &=& b_1 - a_1 \\ a_3 &=& b_2 - a_2 \\ a_4 &=& b_3 - a_3 \end{eqnarray*} \]

因为\(a_i \geq 0\),所以这些条件会将\(x\)限定在一个范围内,这个范围内的数的个数就是方案数。

Problem E: Expired License

题意:
给出两个实数\(a, b\),要求找到两个素数\(p, q\)使得\(\frac{a}{n} = \frac{p}{q}\)
保证给出的实数小数点后最后只有\(5\)位。

思路:
先将\(a, b\)都乘\(10^5\)变成一个整数,然后约分。
约分后判断两个数是不是都是素数,但是要注意如果约分后为\(\frac{1}{1}\),那么答案应该为\(\frac{2}{2}\),因为\(1\)不是素数。

Problem F: Fighting Monsters

题意:
\(n\)个怪兽,每个怪兽有\(m_i\)的攻击力和生命值。
选择两个怪兽,可以钦定一个怪兽先攻击,最后一个怪兽死亡后,另一个怪兽的生命值要为\(1\)

思路:
两个合法的怪兽他们的\(m_i\)是一对相邻的斐波那契数。

Problem H: Hyper Illuminati

题意:
给定一个\(m\),要求找一对\((n, s)\),使得:

\[\begin{eqnarray*} \sum\limits_{i = 1}^s i^{n - 1} = m \end{eqnarray*} \]

\(n \geq 3\)

思路:
因为\(n \geq 3\),所以\(n, s\)的取值范围都很小,直接暴力枚举判断即可。

Problem I: It’s Time for a Montage

题意:
\(n\)个英雄和\(n\)个反派,他们的能力值分别为\(h_i, v_i\)
他们会按照顺序一一对决,对决的结果就是\(h_i, v_i\)比大小,如果某一轮决出了胜负,那么就是某一方赢了。
如果最后\(n\)轮都是平局,那么是英雄那一方胜利。
但是现在英雄可以进行训练,训练\(x\)天后,所有英雄的能力值加\(x\),反派的能力值不变。
问至少需要训练几天,英雄那一方可以胜利。

思路:
\(n, h_i, v_i\)都很小,直接暴力枚举天数,暴力判断即可。

Problem K: Kitchen Cable Chaos

题意:
有两个器械之间的距离为\(g\),现在有\(n\)根线段,他们的长度为\(d_i\)(包含两端\(5cm\)的金属箔),线段与线段之间需要用金属箔接触相连接,一段连接出来的电缆,它的质量为连接处的最短的重叠部分的长度。
电缆最后也要和器械的金属箔相接触,这一段重叠部分也被纳入质量的考量。
问如果选择线段,最后得到的质量最高。

像这张图里面,\(1\)号连接处是完全覆盖的,他们的重叠部分为\(5\)\(2\)号连接处他们是恰好接触的,重叠部分为\(0\),所以这段线缆的质量为\(0\)

思路:
我们令\(\sum d\)表示不包含金属箔的线的总长度。
那么显然接触部分的总长度为\(g - \sum d\)
那么假设选了\(i\)根线,那么一共有\(i +1\)个接触部分,我们要让重叠部分尽量均摊,这样最小值最大。
即重叠部分为\(10 - \frac{g - \sum d}{i + 1}\)
\(f_{i, j}\)表示用了\(i\)个物品,能否拼出\(j\)\(01\)背包即可。

Problem L: Logic Puzzle

题意:
扫雷图复原。

Problem M: Mountaineers

题意:
在一个\(n \cdot m\)的矩形上,每个点有一个权值\(h_i\),每次可以上下左右移动,有\(q\)次询问,每次询问给出起点和终点,询问从起点到终点的路径中经过的点的最大权值的最小值是多少?

思路:
将点按照权值排序,然后建立可持久化并查集,慢慢加入到并查集中。
对于询问,直接二分权值,在对应版本的并查集上查询两点是否连通即可。

posted @ 2019-08-29 19:38  Dup4  阅读(687)  评论(0编辑  收藏  举报