注:本人模拟省选 (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) 还是质数?
那爷直接大力 ( exttt{Lucas} space mathcal{O}(n log n)) 过掉呗。
那 (n leq 10^9) 呢?你再看看这个式子 (cdots)
等一下,哎?这怎么那么像什么公式呢?
翻出 二项式定理 的小本本,我们发现:
诚然不会二项式的弱也就算了吧
显然, (a_0 imes (x+1)^n) 是个人都会算。
时间复杂度:(mathcal{O}(log n)).
实际得分:(40pts).
算法三
实际上,本人想不出,(m leq 5) 有什么特殊的性质。
听说正解是 第二类斯特林数 可是我模板都不会,告辞~
冰火战士
结果 (T2 space 40pts) 是个好的预兆,(T1) 一开发现貌似是个二分。
首先,(mathcal{O}(Q log x) hickapprox 6.2 imes 10^7) ,不是个好的复杂度。
其次,这玩意儿有单调性吗?自己想一下,嗯 (cdots) 当它有吧。 你告诉我考场上也这么猜呗
直接告诉我我能 ( ext{A}),所以直接想正解。
首先我们可以用 ( exttt{vector<pair>}) 来维护双方战士。好像 bitset
也行,但毕竟是模拟考啊,自己不熟的还是不要用吧。
然后 ( exttt{vector}) 的常数本身就很悬,加上上次机房的一个大佬信誓旦旦地和老师辩论说
vector 插入删除很多个数会直接爆栈,要去找内存
找内存 = ?
不管,考场策略。再说就算 ( ext{T}) 也不怕,反正不是正式考?
那问题来了,你 (log) 二分挂在哪儿,总不能 (mathcal{O}(Q)) 验证吧?那才 30 分好吧
算了一下,自己 ( ext{T}2) 调试了 (1.5h),那正式考场还有 (4h) 肯定,肯定能写到 (30).
T3
为了表现本人对此题的足够不重视,连题目名字也一律去掉了。
显然 (15) 分手到擒来,因为正式考试会有足够时间调试,我也有这个信心。
( ext{Day1})
以上,(30+40+15 = 85) 开幕雷击。
信号传递
毕竟是初一,唉,省选还是弱,弱,弱。
一开题就想到了 (mathcal{O}(m ext{!} cdot n)) 的算法。一看数据范围,就 (30) 分啊?
锤子吧?
好,这个数据很有梯度,是在误导我用 (mathcal{O}(2^m cdot m)) 的暴力?
首先,这个 (30) 的暴力再简单不过了。所有的数据聚焦在 (20+) 只说明 (mathcal{O}(2^m cdot m)) 需要大力卡常,(m=23) 的时候达到了将近 (2 imes 10^8),有点悬。
说的好像我写出来了似的
分析一下,这可以说明,(mathcal{O}(n)) 的验证不科学。
我们可以把每两个信号站的传递次数记录,然后用 (mathcal{O}(m^2)) 的时间验证,继续暴力。
看似优了,实则 (mathcal{O}(m! cdot m^2)) 还是过不了。
等一下,这个 (4 imes 10^8) 的卡常可以试一试,毕竟 ( exttt{LUOGU}) 的评测机不错,可惜没有冥间数据。要是能卡过就是 (60) 了。
毫不客气地,(m=21) 显然这过不了了,几乎到了 (10^9) 级。
(60) 滚粗,没了。代码不写了。因为暴力全排的写法太简单,估计 (1h) 就能轻松拿到 (60).(( ext{Day1T2}) 我 (2h) 才 (40),现在呢?)
等一下,我从梦里醒来了,我才发现自己写的是 (mathcal{O}(m! cdot m^2)) 而不是 (mathcal{O}(2^m cdot m^2)).
所以还是 (30) 萎掉了啊。
树
一坨异或感觉不妙。上次 ( ext{NOI ONLINE TG 3}) 的异或我就是找周期瞎写结果 (70) 的,反正自己很讨厌异或!
我发现有 (10) 的暴力分,(20) 的链分,(20) 的权值 (1) 的分。
暴力分只需要 (10 ext{min}) 就可以轻松到手。
权值 (1) 和 链 没有找到丝毫线索。
所以就这么点分呗?
链的话,对于 (u),我需要计算 ((v_1+1)⊕(v_2+2)⊕ cdots⊕(v_t+3)) ((v) 为子树集合),那么显然这玩意儿算不了。等一下 (cdots cdots) 为什么不用 ( ext{Trie}) 树试着维护呢?我觉得可以试试。
不过这里不大行啊。
权值为 (1) 的话,( ext{Trie}) 是可以试试的。毕竟,求距离 (+1) 的异或值么,异或可以用 ( ext{Trie}) 维护,没了。
那怎么维护呢?假设对于 (u) 建立儿子节点集合(非子树集合) (v),考虑从 (v
ightarrow u) 怎么搞?诚然,我们需要把当前 ( ext{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) 的时间写了 ( ext{Day1 T1,2}) 并初步看了其它题的思路。
显然这次 (155) 离进队还是很远的((frac{1}{2}) 进队吧?),但是暴力分拿满了,没什么遗憾的了。
今番良晤,豪兴不浅,他日江湖相逢,再当杯酒言欢。咱们就此别过。江湖路远,各位请一路珍重。