场外模拟 省选联考 2020 游记

狂风中的少年 提交于 2020-08-09 11:26:54

CSDN同步

注:本人模拟省选 \(A\) 卷。

前记

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

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

组合数问题

先开 \(T2\) 的主要原因:觉得自己数论强。没了。

\[\sum_{k=0}^n f_i \times x^k \times C_n^k \]

其中 \(f = \sum_{i=0}^m a_i \cdot k^i\)

算法一

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

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

实际得分:\(15pts\).

\(\texttt{Link}\) 代码

算法二

注意到,\(m=0\) 有部分分。

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

显然,原式就变成了

\[\sum_{k=0}^n a_0 \times x_k \times C_n^k \]

\[= a_0\times \sum_{i=0}^n x^i \cdot C_n^i \]

你懵了,一看,唉?

\(n \leq 10^5\)\(p\) 还是质数?

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

\(n \leq 10^9\) 呢?你再看看这个式子 \(\cdots\)

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

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

\[(x+1)^n = \sum_{i=0}^n x_i \cdot C_n^i \]

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

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

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

实际得分:\(40pts\).

\(\texttt{Link}\) 代码

算法三

实际上,本人想不出,\(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}\) 进队吧?),但是暴力分拿满了,没什么遗憾的了。

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!