惨啊。。感觉延续了 UOJ Easy Round 的传统变成 UOJ Super Hard Round 了?
本来这比赛里的一些题是打算出在 UOJ NOI Round 的,但是当时题目数量也比较紧张,类型也不太和 NOI 类似,感觉强行出出来只会被喷,而且当时时间也在二招边上。。所以鸽着鸽着就鸽没了啊。。
欢迎大家给 UOJ 投题啊,感觉管理员缺乏生产能力是真实痛苦啊。。
这个 T1 本来是看了投给 NOI Round 的几个题都有点难不太签到就想换个签到的,然后就去找网友要了个题,网友和我讲了个听起来很真实的做法,听起来也挺 T1 的就安排了上来。然后实现的时候发现。。是个和暴力拍不上的假做法。。
然后稍微修了一下做法,个人感觉难度没有太大增加结果看起来大家并不这么认为?
还有今天的题目背景都是 ztr 小哥哥写的~ 大家觉得题面怎么样呢,虽然主题似乎已经写过一次了。
绝对不鸽
from bulijiojiodibulido, 标程、题解、数据 by whzzt
算法一
当
期望得分
算法二
考虑这是一个什么样的问题,实际上我们可以当成我们现在有
不妨枚举我们要最大化的是哪一个数,如果是第
显然我们每次增加的
当
算法三
可以发现这样一个事情:序列中超过
因此当输入序列全
而此时我们也无法在每个数都不超过
因此我们只需要检查
算法四
现在我们有了一个初始序列,但我们同样可以意识到,如果序列中不再存在超过
不妨假设
如果我们在
但我们多的这个 block 只会让我们在达到同一长度时多增加
有了
算法五
接下来问题变成了,如何对一个序列,维护每次将较小的数增加上总和不超过
总时间复杂度
没这种事
from djq_cpp, 标程、题解 by djq_cpp,数据 by whzzt
这个题的idea来源是这样的:某个名为 MagicSpark 的初一小朋友问我一道他看错的题,然后我发现可以数数,然后就变成现在这个题了。
接下来我们不妨假设
算法一
暴力整个矩阵。时间复杂度
期望得分 0 分。
算法二
观察发现每个元素只会出现在四个位置上:原位置、沿中间一列对称、沿中间一行对称、沿中心对称。n, m 为奇数时中轴线上的元素单独处理。
直接对满足【每四个对称位置构成的 multiset 都相同的
看起来很不靠谱,但是发现居然过了 subtask 1 和 2。
期望得分 13 分。
算法三
冷静一下,分析存在一种方案从 S 变成 T 的条件。
先假定
既然每个元素只会出现在四个位置上,那就可以把它们单独提取出来,并只考虑与它们有关的行/列 reverse 操作。
注意到每次行/列 reverse 都会使得这四个位置元素逆时针排列构成的置换奇偶性取反。那么,对于固定的 S, T,可以根据每四个对称位置元素置换的奇偶性列出一个有关【每行 reverse 操作奇偶性】和【每列 reverse 操作奇偶性】异或方程组作为存在操作序列的必要条件。(另外,当这四个元素有重复时,不会产生任何约束。)
与此同时,该方程组有解也是充分条件:把对应变量为 1 的行和列 reverse 之后,会发现每四个对称位置都构成一个偶置换。手动构造可以说明:通过行列 reverse 操作,一定可以在不影响其它位置的情况下对某四个对称位置作用任意偶置换。
另外,对称的两行(列)的变量可以合并。由此,每个异或方程只有两个未知数。联想到构建一张二分图。
枚举连边情况再计算答案。时间复杂度
结合算法二,期望得分 23 分。
(上述推导也解释了算法二的正确性。)
算法四
算法三最后一步明显可以不暴力。
长度为 4 的奇偶置换数量是相同的,所以对于每一种连边情况,贡献就是【每条边填上 0 1 的方案数】乘上【异或方程构图与这张图相同且边上全填 0 的方案数】。前者就是
令
结合算法二,期望得分 45 分。
算法五
当
时间复杂度
结合算法二、四,期望得分 65 分。
算法六
把算法四贡献中的
注意到算法四的本质,是对【所有
这其实就是开方。
关于二元多项式开方:
方法一:直接牛顿迭代,像一维一样。需要二元多项式乘法。时间复杂度
方法二:主元
虽然方法一复杂度较小,但其实被方法二吊打(也许真实原因是我常数太大 →_→)。 其实我一开始没有考虑方法二。多谢 _rqy 神仙提(diao)醒(da)(
时间复杂度
在路上了
from peehs_moorhsum, 标程、题解 by peehs_moorhsum,数据、交互库 by whzzt
在路上了。
啊呜..这题其实是..IMO培训题魔改的
我对这题还比较满意。emmm..可能因为我觉得,算法竞赛更应当是思维竞赛,而非码力或知识竞赛?
而这大概算比较纯粹的思维题了?希望这种题在CNOI中能多一点
算法一
询问全图,用各种暴力找最长链
期望得分 0 分
(因为许多点问不了全图,能问到的图
但由于我们造数据时,默认
算法二
想到出题人很菜,你开始冷静分析
假如不考虑
所以你会了一个多项式求最长链的算法!
尽管图有特殊性质,但这看上去很不科学?
所以你大胆猜结论,当
于是你只读入前
期望得分:13分
算法三
由于你是未来的图灵奖得主,你求最长链的水平十分高超
在算法二的基础上,加入一些奥妙重重的最长链算法(比如搜索),可以通过subtask2
期望得分:20分
算法四
考虑
假如你能知道每条边的颜色,你可以用红边构造出一个生成森林,每个联通块是一棵dfs树,且满足
如果有某棵树的深度大于等于
否则将其他所有点按深度分成
则你考虑序列 (
由dfs树的性质,容易发现这是一条长度 >= k 的蓝色路径
可以通过subtask 3
期望得分:15分
算法五
结合算法三、四,可以得到40分
在算法四的基础上,假如有特殊的方法,不需要询问所有边便可构建出类似dfs树的东西,那么可以通过subtask 4
算法六
称
称
定义“交错路径”为一条全蓝的简单路径,满足第一个点和最后一个点都是蓝点,且红蓝点交错 (单个蓝点也算)
交错路径的大小为路径上蓝点数目
我们维护两条交错路径
初始时,各取一个蓝点即可
任何时刻,记
(1)如果
则
如果
否则
考虑
考察他们到
这一部分的询问次数是
(2)如果
我们试图让
利用
取不在
一种暴力的想法是,检验
记
如果有某个蓝点
故不妨
如果这两个点是
如果这两个点是
如果这两个点是
总询问次数是
可以通过subtask 1 至 subtask 5
期望得分:70分
算法七
容易发现,算法六的瓶颈在于扩大u v链时询问过多
我们试图精细一些。
我们默认
先询问
如果均为红色,将
如果均为蓝色,将
这两种情况下,均只询问了两次。
如果一红一蓝,不妨
我们询问
若为红色,将
若为蓝色,将
这两种情况下均询问了三次,但蓝圈上均有一条边不用被验证
故总询问次数不超过