海亮寄 7.17
前言
业精于勤荒于嬉,行成于思毁于随
正文(模拟赛)
卦象:平(自从来海亮,每天早上算一卦,不存在一天卦象为大吉)
感受:再这么下去,就要和这个世界说再见了。T1 感觉做过,但想不起来了。分析题意和观测数据范围之后,盲猜贪心,35min 写了一份疑似正解。然后就是熟悉的厕所居住环节,仅仅居住了 15min,可喜可贺!回来开 T2,看到一坨式子就没有推下去的欲望。遂开 T3,经典猜结论猜错,洋洋洒洒辛苦半天,过不了大样例,遗憾退出。T3 闹个乌龙之后心态微崩,连打暴力的心思都没有了。时间剩余 100min+,决定开 T4,想赌一把 T4 会不会和昨天的 T4 一样。结果是个神秘的最优化问题,DP 是肯定的,但数据范围比较不会做,有点像做过的一道黑题蔬菜。正苦思冥想着,消化系统继续发力,又去厕所小憩一会。这一去一回,又是 10min+ 白白浪费掉。遗憾的是,到比赛结束都再无建树,暴力分数也没有写。总会有些人闲的没事非得问个为什么,其实云落不想回答,很累,但为了抵御这群人接下来的聒噪环节,还是解释一下比较好。T2 T3 T4 的部分分数都相当好写,拼一拼甚至能 100pts+。但自从第二次厕所归来后(厕所外特别热,机房内特别冷,外加今天没有拿防晒衣),整个人就掉线了。回忆一下当时的感觉,又冷又困,又饿却又感觉肚子很胀(没错,胃部已经发出了细密绵长的声音,而小腹以下却老是提醒我去厕所居住一会)。寒冷不必多言,空调直吹加没拿防晒服,直接人形冰雕一枚。困是个什么情况无从得知。和第一次模拟赛有点区别,不是那种四肢发软的感觉,而是由内而外的疲惫。明明感觉自己还能在想一会,再敲一会代码。但是敲着敲着,不知不觉地就停下来了,然后进入一个发呆的模式。不知道剩余多少分钟后,意识就开始模糊,最后趴在桌子上就进入了休眠。但并没有睡着,是一种介于清醒和睡眠之间的状态。啥感觉呢?就是还能听见旁边的人在敲键盘,还能听见空调吹动的“呼呼”声,还能听见有些人比赛时各种情绪的宣泄(包括但不限于口吐国粹)。但就是睁不开眼睛,头趴在桌子上就没有起来的能力,不是没有力气,但就是起不来。仿佛,大脑很抗拒完成这个动作。等到状态恢复正常的时候,时间已然只剩了不到 20min。然后又是一顿去厕所、被外界热蒙、被空调冻死三件套。最后,仓皇地交了一下 T1 的代码,宣告模拟赛草草结束
(没有动力补题,精神上好抗拒,躯体上好虚弱)
现在真的要变成条件反射了,早饭时感觉自己状态非常好。一到机房开始打模拟赛,整个人就跟散装的一样
好迷茫,好无助,对自己失了信念,对未来失了憧憬
T1
反悔贪心板子
T2
前置知识:欧拉函数相关性质
由上述结论,再根据算术基本定理,有
回到原题上来,感觉有点难做,所以先做 \(a_i \le 20\) 的部分分。答案的结构比较抽象,考虑 DP
发现质数个数只有 \(8\) 个,想到状压
结合以上分析,再加一点灵感,搞出 DP 状态
记 \(f_{i,S}\) 表示……(文字表述晦涩难懂),以下是云落认为的形式化表述
记 \(T = \{ a_1 ,\ a_2 ,\ \cdots ,\ a_i \}\)
记 \(\text{mul}()\) 是一个由集合到自然数的映射
有 \(\text{mul}(A) = \prod \limits _{c \in A} c\)
根据以上定义,\(f_{i,S}\) 可被表示为:\[f_{i,S} = \sum_{A \subseteq T \ \land \ \text{mul}(A) \text{的质因数集合为} S} \text{mul}(A) \]
(这种东西一出来,满脑壳都是疑问)
经过一顿观测,发现这个玩意对计算答案非常友好。由于我们把质因数集合直接记录下来了,所以在题解开始的时候 \(\frac{p-1}{p}\) 的贡献就可以拿出来算
形式化地,有:
答案计算没问题了,接下来是初始化和转移
初始化比较没脑子,\(f_{0,\varnothing} = 1\),考虑转移
状压 DP 往往需要刷表,所以优先考虑刷表转移
(经过一番激情格斗,得到如下两种转移)
其中 \(T\) 表示 \(a_i\) 的质因子集合
截止到现在,我们已经搞定了 \(a_i \le 20\) 的部分分。接下来 level-up,考虑 \(a_i \le 3000\) 的问题
讲一个绕口令:
对于一个数 \(x\),其 \(\ge \sqrt{x}\) 的质因子个数总是 \(\le 1\) 的
所以,容易想到,对于质因子大小 \(\le \sqrt{V}\) 的质因子,我们用上面的做法(即状压质因子集合),而对于大质因子,我们及时结算贡献
结算贡献有点长脑子,不管它,先搞点 naive 的东西
注意到 \(f_{i,S}\) 中 \(i\) 的枚举是没有顺序的,只要保证插进来一个 \(a_i\) 即可。而在 level-up 之后,大质因子会作为另外的贡献来源去影响 \(f\) 数组。因此,不妨先将 \(a_i\) 不完全质因数分解(只分解出 \(\le \sqrt{V}\) 的质数),然后以剩余的大质因子为关键字对 \(\{ a_n \}\) 排序
经过这么一顿操作,发现大质因子相同的 \(a_i\) 会在序列上呈现若干首尾相接的连续段(这种东西性质都很优的)
回过头再去看计算答案的式子,再结合上述“连续段”的分析,是不是有结算这种感觉了?
大神说:“对于每一个状态 \(S\),我们可以直接把大质数 \(\frac{p-1}{p}\) 的贡献丢给连续段末尾的状态 \(f_{now,S}\) 里”
(大神反手掏出了一个转移式子)
(看到这一坨,人麻了)
大神说:“\(lst\) 表示上一次结算位置的下标”
不过仔细想一轮又感觉很对,因为 \(\frac{p-1}{p}\) 只贡献给当前大质因子所对应的连续段(不理解就回去看 \(ans\) 的计算式子),所以在上一次结算前(形式化地,对于 \([1,lst]\))的部分,它们不应该吃到当前大质因子 \(p\) 的 \(\frac{p-1}{p}\) 贡献。贡献给当前连续段后,再把之前扣除的部分再补回来,就很对了
从另外一个角度来说,\(f\) 数组的定义本质上就是一个前缀和,而 \(\frac{p-1}{p}\) 的贡献是一段区间,所以它应该贡献给整个 \(p\) 对应的连续段,前缀和差分掉即可。只不过由于接下来的转移只会用到 \(f_{now}\),所以只需要在连续段末进行结算
一顿递推完之后,就是计算答案的环节,比较 naive,不多赘述(就赘述一句,不要忘记把小质数的 \(\frac{p-1}{p}\) 的贡献乘进去!)
T3
(std 被 hack 了,出题人抢救了一晚上,疑似抢救成功)
若干矩形的交一定仍然是矩形,在这个交上的所有点满足,覆盖这个点的矩形构成的集合相同
看到集合相同,想到集合哈希
那么每次矩阵异或一轮随机数,差分前缀异或和维护哈希值
容易想到用 BFS 维护哈希值相同的连通块,check 其是否为矩形
还需要判一个 corner case,即符合上述条件(哈希值相等、连通块为矩形)的部分还可以是矩形的补的交
所以最后要判一下该部分是否在矩形范围内
T4
为了方便表述,记 \(A_i = F_i +i ,\ B_i = L_i + i\)
记 \(f_i\) 表示在第 \(i\) 天做菜,转移方程形如:
抛开 \(A_{j+1} \ge B_i\) 的限制不谈,直接就是李超线段树的板子
现在要维护斜率,要求斜率在值域上是有限制的,所以直接考虑线段树套李超树
DS 大法好哇!
小结
难度排序 T1 < T3 < T4 < T2
后记
世界孤立我任它奚落
完结撒花!

浙公网安备 33010602011771号