场外模拟 省选联考 2020 游记
注:本人模拟省选 \(A\) 卷。
前记
一场英语模拟期末直接萎掉之后心境垂垂暮老,然后来模拟省选增强一点信心。实际却不大行
本来立的目标是口头 \(200\) 的,看完题发现 \(150\) 的目标比较合适。
组合数问题
先开 \(T2\) 的主要原因:觉得自己数论强。没了。
其中 \(f = \sum_{i=0}^m a_i \cdot k^i\)
算法一
暴力。\(f_i\) 用 \(\mathcal{O}(m)\) 的时间计算,\(C_n^k\) 用杨辉三角,\(x^k\) 递推。
时间复杂度:\(\mathcal{O}(nm)\).
实际得分:\(15pts\).
算法二
注意到,\(m=0\) 有部分分。
因此考虑,\(m=0\) 时,即多项式降为常数项,如何通过 \(n \leq 10^5 , 10^9\) 的数据?
显然,原式就变成了
你懵了,一看,唉?
\(n \leq 10^5\),\(p\) 还是质数?
那爷直接大力 \(\texttt{Lucas} \space \mathcal{O}(n \log n)\) 过掉呗。
那 \(n \leq 10^9\) 呢?你再看看这个式子 \(\cdots\)
等一下,哎?这怎么那么像什么公式呢?
翻出 二项式定理 的小本本,我们发现:
诚然不会二项式的弱也就算了吧
显然, \(a_0 \times (x+1)^n\) 是个人都会算。
时间复杂度:\(\mathcal{O}(\log n)\).
实际得分:\(40pts\).
算法三
实际上,本人想不出,\(m \leq 5\) 有什么特殊的性质。
听说正解是 第二类斯特林数 可是我模板都不会,告辞~
冰火战士
结果 \(T2 \space 40pts\) 是个好的预兆,\(T1\) 一开发现貌似是个二分。
首先,\(\mathcal{O}(Q \log x) \thickapprox 6.2 \times 10^7\) ,不是个好的复杂度。
其次,这玩意儿有单调性吗?自己想一下,嗯 \(\cdots\) 当它有吧。 你告诉我考场上也这么猜呗
直接告诉我我能 \(\text{A}\),所以直接想正解。
首先我们可以用 \(\texttt{vector<pair>}\) 来维护双方战士。好像 bitset
也行,但毕竟是模拟考啊,自己不熟的还是不要用吧。
然后 \(\texttt{vector}\) 的常数本身就很悬,加上上次机房的一个大佬信誓旦旦地和老师辩论说
vector 插入删除很多个数会直接爆栈,要去找内存
找内存 = ?
不管,考场策略。再说就算 \(\text{T}\) 也不怕,反正不是正式考?
那问题来了,你 \(\log\) 二分挂在哪儿,总不能 \(\mathcal{O}(Q)\) 验证吧?那才 30 分好吧
算了一下,自己 \(\text{T}2\) 调试了 \(1.5h\),那正式考场还有 \(4h\) 肯定,肯定能写到 \(30\).
T3
为了表现本人对此题的足够不重视,连题目名字也一律去掉了。
显然 \(15\) 分手到擒来,因为正式考试会有足够时间调试,我也有这个信心。
\(\text{Day1}\)
以上,\(30+40+15 = 85\) 开幕雷击。
信号传递
毕竟是初一,唉,省选还是弱,弱,弱。
一开题就想到了 \(\mathcal{O}(m \text{!} \cdot n)\) 的算法。一看数据范围,就 \(30\) 分啊?
锤子吧?
好,这个数据很有梯度,是在误导我用 \(\mathcal{O}(2^m \cdot m)\) 的暴力?
首先,这个 \(30\) 的暴力再简单不过了。所有的数据聚焦在 \(20+\) 只说明 \(\mathcal{O}(2^m \cdot m)\) 需要大力卡常,\(m=23\) 的时候达到了将近 \(2 \times 10^8\),有点悬。
说的好像我写出来了似的
分析一下,这可以说明,\(\mathcal{O}(n)\) 的验证不科学。
我们可以把每两个信号站的传递次数记录,然后用 \(\mathcal{O}(m^2)\) 的时间验证,继续暴力。
看似优了,实则 \(\mathcal{O}(m! \cdot m^2)\) 还是过不了。
等一下,这个 \(4 \times 10^8\) 的卡常可以试一试,毕竟 \(\texttt{LUOGU}\) 的评测机不错,可惜没有冥间数据。要是能卡过就是 \(60\) 了。
毫不客气地,\(m=21\) 显然这过不了了,几乎到了 \(10^9\) 级。
\(60\) 滚粗,没了。代码不写了。因为暴力全排的写法太简单,估计 \(1h\) 就能轻松拿到 \(60\).(\(\text{Day1T2}\) 我 \(2h\) 才 \(40\),现在呢?)
等一下,我从梦里醒来了,我才发现自己写的是 \(\mathcal{O}(m! \cdot m^2)\) 而不是 \(\mathcal{O}(2^m \cdot m^2)\).
所以还是 \(30\) 萎掉了啊。
树
一坨异或感觉不妙。上次 \(\text{NOI ONLINE TG 3}\) 的异或我就是找周期瞎写结果 \(70\) 的,反正自己很讨厌异或!
我发现有 \(10\) 的暴力分,\(20\) 的链分,\(20\) 的权值 \(1\) 的分。
暴力分只需要 \(10 \text{min}\) 就可以轻松到手。
权值 \(1\) 和 链 没有找到丝毫线索。
所以就这么点分呗?
链的话,对于 \(u\),我需要计算 \((v_1+1)⊕(v_2+2)⊕ \cdots⊕(v_t+3)\) (\(v\) 为子树集合),那么显然这玩意儿算不了。等一下 \(\cdots \cdots\) 为什么不用 \(\text{Trie}\) 树试着维护呢?我觉得可以试试。
不过这里不大行啊。
权值为 \(1\) 的话,\(\text{Trie}\) 是可以试试的。毕竟,求距离 \(+1\) 的异或值么,异或可以用 \(\text{Trie}\) 维护,没了。
那怎么维护呢?假设对于 \(u\) 建立儿子节点集合(非子树集合) \(v\),考虑从 \(v \rightarrow u\) 怎么搞?诚然,我们需要把当前 \(\text{Trie}\) 的值全体 \(+1\) (可以在词尾标记修改的,但是时间会炸裂),然后再合并。可能是本人比较菜罢
再见,\(10\) 分。
作业题
怀着 \(125\) 分的渣成绩,寄希望于最后一题。
显然就算我 A 掉这道题也进不了队的
感觉暴力分挺多,不慌,爷的目标 \(150\) 估摸着可以试一试的。
首先,\(\mathcal{O}(C_m^{n-1} \log w)\) 稳稳地过掉了 \(10\) 分。
估摸着生成树应该没有那么多吧。不要和 CCF 讲概率了
\(w_i\) 均相同?好性质啊,那 \(\gcd\) 恒为常数 是个好东西!
那么,这题显然弱化为:
求一个无向图所有生成树的边权之和。
就这?不会。
然后发现 \(m \leq n\),然后连通 \(\cdots\) 说明一点:这是棵树(基环树)!
显然对于一棵树,它的生成树个数只有 \(1\) 个,它自己,瞎求就行了。
对于 基环树,显然,生成树个数是环的长度,这是破环为链的一个思想。
我们可以求出环外的 \(\sum\) 和 \(\gcd\),然后稳稳地枚举环。
哈哈!那爷不就 \(30\) 了 激动啥
至少 \(155\) 目标达成了,耶!
显然,\(w_i\) 均为质数是 \(w_i\) 均相同的加强版,所以考虑,如何求出一个图所有生成树的边权之和。
大力枚举大概 \(n \leq 30\) 是过不了的耶!再见。
总结
作为场外初一模拟省选,没有条件用 \(9h\) 的时间模拟考试,只用 \(2h\) 的时间写了 \(\text{Day1 T1,2}\) 并初步看了其它题的思路。
显然这次 \(155\) 离进队还是很远的(\(\frac{1}{2}\) 进队吧?),但是暴力分拿满了,没什么遗憾的了。
今番良晤,豪兴不浅,他日江湖相逢,再当杯酒言欢。咱们就此别过。江湖路远,各位请一路珍重。