Codeforces Round 549 (Div. 1) 题解报告
Codeforces Round 549 (Div. 1) (标题为洛谷上的链接)
A.The Beatles
我们考虑先把坐标全部 \(-1\) 便于计算。此时我们固定某一个端点,枚举下一步所在的点,如果步长为 \(L\) ,那么所走的步数为 \(\frac{n \times k}{\gcd(n\times k,L)}\),直接计算即可。
Code
B.Lynyrd Skynyrd
先把这个循环移位解决,我们直接双倍排列 \(P\) ,即让\(P_{i+n}=P_i\),这样问题转化为是否存在一个子序列是 \(P\) 中长度为 \(n\) 的子区间。
按照子序列自动机的思想,假设当前匹配到 \(a_i\) ,序列 \(a_i\) 对应了排列中的元素\(p_j\) ,其下一个元素为 \(p_{j+1}\),\(p_{j+1}\) 在 \(A\) 中出现的下一个位置为 \(nxt_i\) ,我们匹配的过程一定是 \(i -> nxt_i -> nxt_{nxt_i} -> ...\) 。
所以我们可以利用 \(\text{DFS}\) 在 \(O(n)\) 的时间内求出从 \(i\) 开始匹配,完成匹配的最小位置 \(b_i\) ,利用 \(\text{ST}\) 表求出区间内最小的 \(b_i\) 是否 \(\leq r\) 即可判断。
Code
C.U2
开始看以为是个计算几何,实际上并不是。
观察$ y = x^2 + bx + a $ ,经过移项可得 $ y - x^2 = bx + a$。我们发现对于经过某两个点对 \(\left( x_i, y_i\right)\),\(\left( x_j, y_j\right)\) 的曲线,相当于经过 \(\left( x_i, y_i - x_i ^2\right)\),\(\left( x_j, y_j - x_j ^2\right)\) 的直线。对限制条件做类似的变换,不难发现此时就是求多少个点对间的直线上方没有其他的点。
我们对其求出上凸包,不难发现只有凸包上相邻点之间构成的直线才可以是合法的。
注意:重复的直线只计入一次,凸包上的斜率应当是严格单调。*
Code
D.Foreigner \(\left[ * \right]\)
一直在想充要的判定条件,没有想出来。
我们换一个角度,考虑生成这些数字的过程实际相当于每次取出最小值 \(x\) ,然后将其 \(\times 10\),在加上 \(c\) 作为个位上的数,其中 $c < rnk(x) \mod 11 $。
拼数?我们只需要知道之前的数的 \(rnk(x)\),就可以知道下一个 \(s_{i+1}\) 可不可以拼上去了。
思考 \(rnk \left(x \times 10 + c\right)\),其值等于
$$ 9 + \sum_{i=1}^{rnk(x)-1} i \mod 11 + (c+1) $$
考虑让 \(rnk \left(x \times 10 + c\right)\) 对 \(11\) 取模,原式变为
$$ 10 + c + \frac{\left( rnk(x) \right) \times \left( rnk(x) -1 \right)}{2} \mod 11$$
这样完全可以设出 \(dp[i][j]\) 表示以 \(s_i\) 结尾的,\(rnk = j\),的方案数进行转移。
Code
E.Pink Floyd \(\left[ * \right]\)
大致题意:有一张 \(n\) 个点的完全有向图(竞赛图),现在给定若干条粉色的边(给定了方向),剩余的边均为绿色,你可以最多询问 \(2\times n\) 次 绿色边的方向,每次询问交互器会自适应的给出询问的边的方向,现在你需要在这些询问之内确定一个点 \(u\) ,使得 \(u\) 可以经过相同颜色的边到达任意的点 \(v\)。
对于没有粉色边的情况,我们可以考虑一个集合 \(S\) ,如果选定这些点作为起点,我们可以遍历所有图上的点(即没有被别的点控制的点)。我们每次查询集合中的两个点 \(u\) ,\(v\)。此时一定会有一个点被另一个点控制,我们便删去被控制的那个点。集合的性质仍然没有变,当集合大小为 \(1\) 时答案便为剩余的那个点。
如果有粉色的边,我么考虑改进上述算法,对于粉色边进行缩点,我们发现对于某个入度为 \(0\) 的强联通分量中的任意一个点(只能有一个),他的效果相当于一个没有被控制的点。所以我们也将其拉入集合\(| S |\) 中,当我们删去这个点时,代表这个点 \(u\) 由绿色的边控制,所以 \(u\)通过粉色边控制的点无法被集合中的点控制,类似拓补排序的方法,我们删去点\(u\)时将入度为 \(0\) 的点加入至集合即可保持其性质不变。
每次询问绿色边会从集合中永久删去一个点,此时询问次数 \(\leq n-1\)。
代码实现借鉴了 \(\text{APjfengc}\) 大佬。
Code

浙公网安备 33010602011771号