这场打的还算舒服(虽然 DE 好像很久以前做过谔谔),VP 赛时切掉了 A~D,不过 E 依旧没写出来,还是太逊啦!


赛时

A 简单分类讨论,求 \(a\)\(b\) 之间数的乘积,第一眼看成了和,痛失一次罚时。

B 很容易想到的一个结论是,如果一个盒子被混入可能含有红球的盒子内的球时,该盒子就可能会含有红球了。而当该盒子所有的球都被取走时,该盒子之前含有红球的可能就被清零了。

所以我们可以对每一个盒子维护一个标记,当混入有标记盒子内的球时,标记该盒子;当分出球后盒子为空时,将该盒子的标记删除。最后统计有标记盒子的个数即可。

C 开始想的一个结论是,最后肯定会剩下段数为 \(2\) 的绳子,而最短的相邻两段绳子最后切掉显然不优,所以不妨先将最短的相邻两段绳子从中间一分为二,免得最后因为长度太短切不成。

但是这样的贪心方式反例是很好举的,因为对于两个断点,先切和后切对于答案是有影响的,最短的相邻两段绳子最后切显然不优,但是先切也不一定优。正确的贪心也很好想,我们不妨找到最长的相邻两段绳子,先从最左侧向这个断点将中间的断点全部切掉,再从最右侧向这个断点切掉中间断点,最后切这两段绳子之间的断点,这样我们就能保证我们切的所有绳子一定比最长的相邻两段绳子长,而最长的相邻两段绳子一定是切割瓶颈中最大的一个。

于是我们找到长度和最长的相邻两段绳子,如果该长度和 \(l\ge L\),则有解,否则无解。方案按照上述过程构造即可。

D 题一眼 Kruskal 重构树(绝对不是因为我很久以前做过而感到眼熟()。观察数据范围我们肯定是要在 log 相关的时间复杂度内处理单次询问的,所以我们需要预处理。贪心地来讲,设当前已经走过的点集为 \(S\),未走过的点集为 \(T\),则我们显然会找到从 \(S\) 指向 \(T\) 的一条边权最小的边走,并将走到的节点从 \(T\) 挪到 \(S\)——我们好像只会走最小生成树上的边!

换句话说,这就是一道 Kruskal 的板子题。不妨对于原图建立 Kruskal 重构树。对于每次询问,我们可以考虑二分答案 \(mid\),并从 \(x_i\)\(y_i\) 开始向上跳,只要该二次幂父亲的权小于等于 \(mid\) 就跳,最后如果 \(x_i\)\(y_i\) 跳到相同节点,则我们可以走到的节点个数就是该节点子树内叶子结点的个数;否则就是 \(x_i\)\(y_i\) 子树内叶子结点的个数之和。

其中叶子结点的个数和二次幂父亲显然可以通过预处理得到,于是这道题就做完了。

E 题大概想到了将 \(a_i\) 降序排序之后,每次操作就变成了取最下面一行或是取最左边一列,可以转化为一张网格图从左下角向上向右走,但是表没时间打了。


赛后

E 打完表会发现网格图从左下到右上的每一条对角线必胜必败态都是相同的,所以我们可以先找到以起点为左下角的最大正方形的右上角,该格点和起点的必胜必败态一定相同。

走到该格点后一定仍然该先手先走,此时先手有两种选择,向上走或者向右走,此时根据距离的奇偶性简单判断即可。还是很妙的题。

F 刚开始想到从后往前枚举位置放置白球,每放一个白球就可以考虑将一个颜色的球塞在这个白球的后面,开始先不管每个球的具体颜色,最后再算上给球分配具体颜色的方案数。时间复杂度有点高,大概是 \(O(n^2k^2)\),显然过不去。

但事实上我们可以注意到一个性质:

对于最终颜色串的任意前缀,白球的数量一定大于等于其他球的颜色数。

根据这个性质,我们其实就可以从前到后 dp 了。可以设 \(dp_{i,j}\) 表示当前放置了 \(i\) 个白球、\(j\) 种其他颜色的所有球的方案数,其中 \(j\le i\)

考虑如何转移。首先要解决的是去重的问题。所以我们需要规定放白球一定要放在当前的第一个空位上,放其他颜色的球时一定要在第一个空位上放一个球,其他球可以随便放,这样我们的方案就不会重复了。

转移有两种选择:放白球或者放其他颜色的球。对于前者,首先要保证放置白球之前状态合法,其次根据我们去重的原则,只能将白球放在第一个空位,所以直接由 \(dp_{i-1,j}\) 转移过来即可;对于后者,我们首先要知道放置哪个颜色,这显然有 \(n-j+1\) 种可能,除此之外,我们在第一个空位上放置一个球之后,剩下的 \(k-2\) 个球会随意放置,而现在还剩下 \(nk-i-(j-1)(k-1)-1\) 个空位,求个组合数即可。总状态转移方程为:

\[dp_{i,j}=dp_{i-1,j}+dp_{i,j-1}\times (n-j+1)\times C_{nk-i-(j-1)(k-1)-1}^{k-2} \]

初始状态为 \(dp_{0,0}=1\),目标状态为 \(dp_{n,n}\),需要注意转移顺序。

以及 \(k=1\) 时全是白球,需要特殊处理,答案为 \(1\)

如果以上的一切你都可以在赛时想到,你就可以 AK 远古 AGC 了!

简单总结一下 F 吧。把题目模型抽象一下,其实白球就类似于括号序列中的左括号,其他颜色的球就类似于右括号,而我们其实也是在作一个匹配括号的过程。所以不妨用状态将当前左右括号的数量记录下来进行转移。难点在于去重。

原文地址:http://www.cnblogs.com/ydtz/p/16828104.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性