场外模拟 省选联考 2020 游记

博客园同步

注:本人模拟省选 A A A 卷。

前记

一场英语模拟期末直接萎掉之后心境垂垂暮老,然后来模拟省选增强一点信心。实际却不大行

本来立的目标是口头 200 200 200 的,看完题发现 150 150 150 的目标比较合适。

组合数问题

先开 T 2 T2 T2 的主要原因:觉得自己数论强。没了。

∑ k = 0 n f i × x k × C n k \sum_{k=0}^n f_i \times x^k \times C_n^k k=0nfi×xk×Cnk

其中 f = ∑ i = 0 m a i ⋅ k i f = \sum_{i=0}^m a_i \cdot k^i f=i=0maiki

算法一

暴力。 f i f_i fi O ( m ) \mathcal{O}(m) O(m) 的时间计算, C n k C_n^k Cnk 用杨辉三角, x k x^k xk 递推。

时间复杂度: O ( n m ) \mathcal{O}(nm) O(nm).

实际得分: 15 p t s 15pts 15pts.

Link \texttt{Link} Link 代码

算法二

注意到, m = 0 m=0 m=0 有部分分。

因此考虑, m = 0 m=0 m=0 时,即多项式降为常数项,如何通过 n ≤ 1 0 5 , 1 0 9 n \leq 10^5 , 10^9 n105,109 的数据?

显然,原式就变成了

∑ k = 0 n a 0 × x k × C n k \sum_{k=0}^n a_0 \times x_k \times C_n^k k=0na0×xk×Cnk

= a 0 × ∑ i = 0 n x i ⋅ C n i = a_0\times \sum_{i=0}^n x^i \cdot C_n^i =a0×i=0nxiCni

你懵了,一看,唉?

n ≤ 1 0 5 n \leq 10^5 n105 p p p 还是质数?

那爷直接大力 Lucas   O ( n log ⁡ n ) \texttt{Lucas} \space \mathcal{O}(n \log n) Lucas O(nlogn) 过掉呗。

n ≤ 1 0 9 n \leq 10^9 n109 呢?你再看看这个式子 ⋯ \cdots

等一下,哎?这怎么那么像什么公式呢?

翻出 二项式定理 的小本本,我们发现:

( x + 1 ) n = ∑ i = 0 n x i ⋅ C n i (x+1)^n = \sum_{i=0}^n x_i \cdot C_n^i (x+1)n=i=0nxiCni

诚然不会二项式的弱也就算了吧

显然, a 0 × ( x + 1 ) n a_0 \times (x+1)^n a0×(x+1)n 是个人都会算。

时间复杂度: O ( log ⁡ n ) \mathcal{O}(\log n) O(logn).

实际得分: 40 p t s 40pts 40pts.

Link \texttt{Link} Link 代码

算法三

实际上,本人想不出, m ≤ 5 m \leq 5 m5 有什么特殊的性质。

听说正解是 第二类斯特林数 可是我模板都不会,告辞~

冰火战士

结果 T 2   40 p t s T2 \space 40pts T2 40pts 是个好的预兆, T 1 T1 T1 一开发现貌似是个二分。

首先, O ( Q log ⁡ x ) ≈ 6.2 × 1 0 7 \mathcal{O}(Q \log x) \thickapprox 6.2 \times 10^7 O(Qlogx)6.2×107 ,不是个好的复杂度。

其次,这玩意儿有单调性吗?自己想一下,嗯 ⋯ \cdots 当它有吧。 你告诉我考场上也这么猜呗

直接告诉我我能 A \text{A} A,所以直接想正解。

首先我们可以用 vector<pair> \texttt{vector<pair>} vector<pair> 来维护双方战士。好像 bitset 也行,但毕竟是模拟考啊,自己不熟的还是不要用吧。

然后 vector \texttt{vector} vector 的常数本身就很悬,加上上次机房的一个大佬信誓旦旦地和老师辩论说

vector 插入删除很多个数会直接爆栈,要去找内存  

找内存 = ?

不管,考场策略。再说就算 T \text{T} T 也不怕,反正不是正式考?

那问题来了,你 log ⁡ \log log 二分挂在哪儿,总不能 O ( Q ) \mathcal{O}(Q) O(Q) 验证吧?那才 30 分好吧

算了一下,自己 T 2 \text{T}2 T2 调试了 1.5 h 1.5h 1.5h,那正式考场还有 4 h 4h 4h 肯定,肯定能写到 30 30 30.

T3

为了表现本人对此题的足够不重视,连题目名字也一律去掉了。

显然 15 15 15 分手到擒来,因为正式考试会有足够时间调试,我也有这个信心。

Day1 \text{Day1} Day1

以上, 30 + 40 + 15 = 85 30+40+15 = 85 30+40+15=85 开幕雷击。

信号传递

毕竟是初一,唉,省选还是弱,弱,弱。

一开题就想到了 O ( m ! ⋅ n ) \mathcal{O}(m \text{!} \cdot n) O(m!n) 的算法。一看数据范围,就 30 30 30 分啊?

锤子吧?

好,这个数据很有梯度,是在误导我用 O ( 2 m ⋅ m ) \mathcal{O}(2^m \cdot m) O(2mm) 的暴力?

首先,这个 30 30 30 的暴力再简单不过了。所有的数据聚焦在 20 + 20+ 20+ 只说明 O ( 2 m ⋅ m ) \mathcal{O}(2^m \cdot m) O(2mm) 需要大力卡常, m = 23 m=23 m=23 的时候达到了将近 2 × 1 0 8 2 \times 10^8 2×108,有点悬。

说的好像我写出来了似的

分析一下,这可以说明, O ( n ) \mathcal{O}(n) O(n) 的验证不科学。

我们可以把每两个信号站的传递次数记录,然后用 O ( m 2 ) \mathcal{O}(m^2) O(m2) 的时间验证,继续暴力。

看似优了,实则 O ( m ! ⋅ m 2 ) \mathcal{O}(m! \cdot m^2) O(m!m2) 还是过不了。

等一下,这个 4 × 1 0 8 4 \times 10^8 4×108 的卡常可以试一试,毕竟 LUOGU \texttt{LUOGU} LUOGU 的评测机不错,可惜没有冥间数据。要是能卡过就是 60 60 60 了。

毫不客气地, m = 21 m=21 m=21 显然这过不了了,几乎到了 1 0 9 10^9 109 级。

60 60 60 滚粗,没了。代码不写了。因为暴力全排的写法太简单,估计 1 h 1h 1h 就能轻松拿到 60 60 60.( Day1T2 \text{Day1T2} Day1T2 2 h 2h 2h 40 40 40,现在呢?)

等一下,我从梦里醒来了,我才发现自己写的是 O ( m ! ⋅ m 2 ) \mathcal{O}(m! \cdot m^2) O(m!m2) 而不是 O ( 2 m ⋅ m 2 ) \mathcal{O}(2^m \cdot m^2) O(2mm2).

所以还是 30 30 30 萎掉了啊。

一坨异或感觉不妙。上次 NOI ONLINE TG 3 \text{NOI ONLINE TG 3} NOI ONLINE TG 3 的异或我就是找周期瞎写结果 70 70 70 的,反正自己很讨厌异或!

我发现有 10 10 10 的暴力分, 20 20 20 的链分, 20 20 20 的权值 1 1 1 的分。

暴力分只需要 10 min 10 \text{min} 10min 就可以轻松到手。

权值 1 1 1 和 链 没有找到丝毫线索。

所以就这么点分呗?

链的话,对于 u u u,我需要计算 ( v 1 + 1 ) ⊕ ( v 2 + 2 ) ⊕ ⋯ ⊕ ( v t + 3 ) (v_1+1)⊕(v_2+2)⊕ \cdots⊕(v_t+3) (v1+1)(v2+2)(vt+3) v v v 为子树集合),那么显然这玩意儿算不了。等一下 ⋯ ⋯ \cdots \cdots 为什么不用 Trie \text{Trie} Trie 树试着维护呢?我觉得可以试试。

不过这里不大行啊。

权值为 1 1 1 的话, Trie \text{Trie} Trie 是可以试试的。毕竟,求距离 + 1 +1 +1 的异或值么,异或可以用 Trie \text{Trie} Trie 维护,没了。

那怎么维护呢?假设对于 u u u 建立儿子节点集合(非子树集合) v v v,考虑从 v → u v \rightarrow u vu 怎么搞?诚然,我们需要把当前 Trie \text{Trie} Trie 的值全体 + 1 +1 +1 (可以在词尾标记修改的,但是时间会炸裂),然后再合并。可能是本人比较菜罢

再见, 10 10 10 分。

作业题

怀着 125 125 125 分的渣成绩,寄希望于最后一题。

显然就算我 A 掉这道题也进不了队的

感觉暴力分挺多,不慌,爷的目标 150 150 150 估摸着可以试一试的。

首先, O ( C m n − 1 log ⁡ w ) \mathcal{O}(C_m^{n-1} \log w) O(Cmn1logw) 稳稳地过掉了 10 10 10 分。

估摸着生成树应该没有那么多吧。不要和 CCF 讲概率了

w i w_i wi 均相同?好性质啊,那 gcd ⁡ \gcd gcd 恒为常数 是个好东西!

那么,这题显然弱化为:

求一个无向图所有生成树的边权之和。

就这?不会。

然后发现 m ≤ n m \leq n mn,然后连通 ⋯ \cdots 说明一点:这是棵树(基环树)!

显然对于一棵树,它的生成树个数只有 1 1 1 个,它自己,瞎求就行了。

对于 基环树,显然,生成树个数是环的长度,这是破环为链的一个思想。

我们可以求出环外的 ∑ \sum gcd ⁡ \gcd gcd,然后稳稳地枚举环。

哈哈!那爷不就 30 30 30激动啥

至少 155 155 155 目标达成了,耶!

显然, w i w_i wi 均为质数是 w i w_i wi 均相同的加强版,所以考虑,如何求出一个图所有生成树的边权之和。

大力枚举大概 n ≤ 30 n \leq 30 n30 是过不了的耶!再见。

总结

作为场外初一模拟省选,没有条件用 9 h 9h 9h 的时间模拟考试,只用 2 h 2h 2h 的时间写了 Day1 T1,2 \text{Day1 T1,2} Day1 T1,2 并初步看了其它题的思路。

显然这次 155 155 155 离进队还是很远的( 1 2 \frac{1}{2} 21 进队吧?),但是暴力分拿满了,没什么遗憾的了。

今番良晤,豪兴不浅,他日江湖相逢,再当杯酒言欢。咱们就此别过。江湖路远,各位请一路珍重。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值