Spark _Exam_ 20240718
Spark Exam 20240718
Conclusion
这个,至少思路上是能拿到 310 分的(现行评测数据下,如果数据足够强,思路上应该能够拿到 240 分)
不过确实还是踩了一定的坑,也有一定的好技巧可以记录。
A. 骑马 (horse)
Statement
给定 \(n\) 个初值都为 \(1\) 的变量,有三种操作:第一种有 \(a\) 个,\(X\leftarrow 2X\) ;第二种有 \(b\) 个,\(X\leftarrow X+20\) ;第三种有 \(c\) 个,\(X\leftarrow X+50\) 。现在要依次对这些变量进行操作,求在保证每个变量的值不超过 \(100\) 的情况下最多执行多少个操作。
\(n\le 150,a+b+c\le 300\)
Solution
考虑动态规划,设 \(f_{i,x,y}\) 为当前为第 \(i\) 匹马,\(x\) 个操作一剩余,\(y\) 个操作二剩余时最多执行多少操作。这样操作三剩余可以被计算出来 \(a+b+c-x-y-f_{i,x,y}\) 。考虑这样转移的正确性,对于确定的三元组 \((a,b,c)\) 表示对于某一变量应该执行 \(a\) 个操作一、\(b\) 个操作二、\(c\) 个操作三,那么显然应该先执行操作一,再执行操作二,再执行操作三,因为操作二三的代价都是不变的,然而操作一的代价越早执行就越小。
这样转移的复杂度是 \(\mathcal O(n^3)\) 的,带有 \(48\) 的常数。
B. 可爱的数 (lovely)
Statement
真是tnnd可爱呢
给定一个可重正整数集合 \(S\) ,求一个 \(S\) 的最大可重子集 \(P\) ,使得没有两个 \(P\) 中的数乘起来是完全平方数。
\(1\le n\le 10^5,\forall x\in S,1\le x\le 10^{10}\)
Solution
注意到不会有很多这样拼出来是立方数的对。
等一下!这里有一个证明,证明所有这样的数对如果连边那么是树。虽然和这个题目没什么关系,但是还是可以看看。
原图除了完全立方数的部分其他都没有环,证明:
原图有环,等价于存在 \(a,b,c\) 使得 \(ab,bc,ac\) 都是完全
立方数,那么就得到 \(a^2bc\) 是完全立方数
由于已经知道 \(a,b,c\) 都不是完全立方数
非完全立方数的平方必然不是完全立方数
则 \(a,b,c\) 互异,也知道 \(a^2\) 不是完全立方数
但是又知道 \(bc\) 是完全立方数,一个完全立方数
乘上 \(a^2\) 这样的非完全立方数不可能是完全立方数,矛盾
观察每个数对,他们有什么特征?一定是所有质因子的指数加起来是三的倍数。不妨把所有立方因子都提出来,这样剩下的部分指数就只有 1/2 了,那么就很好处理出和他能够拼出完全立方的另一半吗,这个显然是唯一的。考虑这个时候直接把两边的最大值加入答案即可。
但是这个质因数分解的复杂度是不可以接受的,不过我们之前利用过这样的性质:每个数都至多有 \(1\) 个大于其平方根的质因子。分解到平方根显然是不能接受的,但是分解到三次方根是可以接受的,考虑每个数也至多有 \(2\) 个超过其三次方根的质因子。
那么我们分解到三次方根,剩下两个直接分类讨论即可。
Trick :每个数都至多有 1 个大于其平方根的质因子。每个数也至多有 2 个超过其三次方根的质因子。当考虑与质因子密切相关的问题时,以上两条性质能够提供关键线索。
C. 诗歌
Statement
给定字符集为 \(\Sigma\) 的文本串 \(S\) ,多次询问 \(T\) 在 \(S\) 中的出现次数,强制在线。
其中, \(\sum |T|\le 10^5,|\Sigma|=10^6,|S|\le 10^5,q\le 10^5\)
Solution
字符串匹配的长征!
Algorithm 1
暴力匹配,本算法在线,时间复杂度 \(\mathcal O(q|S||T|)\)
Algorithm 2
哈希匹配,本算法在线,复杂度为 \(\mathcal O(q|S|)\)
Algorithm 3
KMP,本算法在线,复杂度为 \(\mathcal O(q|S|)\)
Algorithm 4
AC 自动机,本算法离线,复杂度为 \(\mathcal O(|\Sigma|\sum|T|)\)
Algorithm 5
考虑将所有短于 \(\max |T|\) 的子串 Hash 之后插入 unordered_map,询问时查询。时间复杂度 \(\mathcal O(n\max |T|)\) 。
注意 unordered_map 常数和空间消耗!
Algorithm 6
SAM 中间套 unordered_map 直接上(不会写qwq),恭喜获得最优解,\(\mathcal O(\sum |T|+|S|)\) ,但是这是严重超纲的。
Algorithm 7
SA 之后直接二分查找
Algorithm 8
注意到总长度有限制,考虑根号分治。对于小于某阈值 \(B\) 的询问,采用 Algorithm 5,否则采用 Algorithm 2/3,考虑均值不等式求阈值。
Algorithm 9
若数据是随机生成的,还可以预处理每个字符的出现位置,然后哈希判断,这能够做到期望线性。
D. 相似 (shingen)
本文来自博客园,作者:haozexu,转载请注明原文链接:https://www.cnblogs.com/haozexu/p/18310426

浙公网安备 33010602011771号