浴火时的赛季末

挣扎消失了。

20240625

T1 我是最大智障。我想了一些什么 DDP,但是答案是 \(\sum_{u}2-siz_{u}\bmod 2\),其中 \(siz_{u}\) 表示在 \(u\) 子树内有多少个叶子。链异或,极为简单。

T2 我是最大勾矢。我一直在想怎么去描述后面所有数的优与不优,但是我忘了贪心就是一位一位的。。。非常搞笑。建出 01-Trie。

因为要选完,所以遇到 \(1\) 子树的个数小于 \(k-1\) 的时候,我们一定选完所有 \(1\) 子树的数,在 Trie 上统计数和极为容易。然后递归 \(0\) 子树。

如果遇到 \(1\) 子树的个数大于等于 \(k-1\) 的时候,为了选最多的 \(1\),我们一定选 \(k-1\)\(1\),所以 \(0\) 子树的数在最终答案中一定会被与在一起。所以我们求出与的结果,然后把数记下来参与后面的位的比较,因为后面的 \(0,1\) 比较已经跟该位没有关系了。递归 \(1\) 子树。

具体地,每次把需要记下的数或上当前位插入到 Trie,因为这样等同于我们把前几位的贡献已经算完,所以在后面几位中,与后的值和正准备遍历的子树是等价的。这一步非常妙,因为它正好也能表示接下来的与运算。

最多 \(O(\log V)\) 层,故最多有 \(O(\log V)\) 个数。所以复杂度为 \(O(n\log V+q\log^2 V)\)

唯一的问题就是删除怎么求子树 \(\text{and}\)。我开始想的是按位统计,空间双 log,但是一个简单的思路是合并两个子树,每次删除完就向上取 \(\text{and}\) 更新,单 log,但是有个细节就是,好像最后的数要修改成 \(2^{30}-1\)

20240629

/shui

T1 分治 + (max,+) 卷积决单优化即可。

T2 DP 套 DP/fn,注意到我们只需要关注层级值,然后如果两相等层级值点对路径之间没有小于该层级值的点,那就非法。树上 DP,状压子树能走到路径的前缀最小值集合。合并时如果两集合存在交那就挂了。\(O(3^n)\) 枚举子集合并即可。

T3 shabi 容斥。好像开头是什么二项式反演,然后之后钦定一个选不交边顺序(因为我们发现选的时候有多少条当时的情况下两端点度数均为 \(0\) 的边,就有多少个连通块),最后发现拓扑序是一棵树,然后有一个随机排列在树上的结论:

随机排列满⾜树形拓扑序的概率是⼦树⼤小的倒数乘积。

然后推一下式子就 OK 了。

20240703

lxl。

T1 区间子区间问题,扫描线,线段树维护 \([1,i]\) 的 LCA 编号和,然后发现线段树上的元素的深度有单调性,线段树上二分就能找到新加入元素之后的覆盖区间,使用区间覆盖,区间查询历史版本和的线段树即可。然后场上我认为推不出来标记,最后还是矩阵辅助推标记转移。只需要维护矩阵中值可能变的位置即可。

T2 线段树分治,\(1,2\) 操作都比较好分治,\(3\) 操作不知道是怎么分治的。然后考虑询问如何处理。考虑维护一个关于 \(u\) 的多项式(最多 \(4\) 项),然后对于 \(+x\) 这个东西维护 \(a_{j}+ku+p\) 的卷积(\(p\in[0,u)\))。维护每个 \(p\),最后带入 \(x\) 就能维护了。

总时间复杂度为 \(O(n\log n(\log n+uv^2))\)

T3 shabi DP(场上所有人都以为是 DS...)考虑一种类似于 floyd 的转移方式,但是我们需要最短的合法括号序列,所以我们设 \(f_{i,j}\) 为从 \(i\)\(j\) 的最短合法括号序列长度,设 \(g_{i,j}\) 为从 \(i\)\(j\),多一个左括号的最短括号序列长度。每次提最小的来转移就行了。时间复杂度 \(O(n^3\log n)\)

20240707

离谱 lxl,但是 lxl 要走了/ll

T1 神秘,H_W_Y 的做法好像就是把我两个在考场上胡的假做法拼了起来。离谱的是,我甚至根本没有想到 \(a^x=2^{x\times \log_2(a)}\),然后你会发现只需要把这个东西一直做,然后直到指数 \(\in[1,2)\),然后直接排序(先幂次次数,再最后指数的近似),最后近似相等的就看谁先出 \(3\)。有点离谱这个做法。

T2 考研数学。什么矩阵的合同。过于离谱。

T3 什么巨大分块或者根号分治(对每次询问区间个数),没太听懂。

20240708

勾矢模拟赛,太强悍了,还是先补知识点为强。

T1 巨大神秘题,利用 O4 优化我们可以知道短的那个子序列就是一个前缀加一堆 0,然后应该就可以直接做了。

T2 极端神秘。

大概是维护一个极长子区间,然后区间合并。设 \(dp_{n,m}\) 为区间长 \(n\),还有 \(m\) 条非链边没连的方案数,然后 \(g_{n,m}\) 为区间长为 \(n\),还有 \(m\) 条非链边没连,但是可以从 \(m+1\) 条非链边没连的状态转移过来。\(dp\to g\) 是容易的。

然后我们枚举区间长合并 \(dp_{n,m}\)。注意到合并的时候会多出 \(i(n-i)-1\) 条非链边没连,然后在此基础上我们枚举 \(p+q+i(n-i)-1=m\),然后从 \(g_{i-1,p}g_{n-i,q}\) 转移过来就行了,因为带个标号所以要带一个神秘的重新分配标号的组合数(EGF 好像会用到?那可以放在之后的路上),然后这个是 \(O(n^6)\) 的。

然后这个东西是卷积,直接就结束了。

T3 巨大离谱东西根本看不懂。

20240712

DS round,场上最傻逼。

T1 把二叉搜索树拆成合法中序元素对。然后随便 BIT 统计一下,最后修改的时候套个倍增求出最近的不可行的子树即可。复杂度 2log。

T2 扫 \(j\)(场上一直在扫 \(k\),小丑),然后我们发现对于每个 \(i\) 合法的 \(k\) 是一个区间,具体地,其左端点的限制为左区间的所有东西都必须在右区间出现,其右端点的限制为右端点不能出现左区间没有的东西,我们分别设其为 \(f_i,g_i\)

不难发现 \(f_i\) 是降序的,\(g_{i}\) 也降序的,我们加入一个元素的操作相当于对两个数组全局取 \(\max\),我们每次需要统计 \(\sum_i\max(0,g_i-f_i+1)\)。你会发现上面的所有操作都可以用线段树二分和线段树覆盖做。复杂度单 log。

T3 场上最大小丑。我认为区间 DP 怎么优化都不可能优化至低于 \(O(n^2)\),然后就直接去想贪心了,然而这道题正解是区间 DP 的一些优化。

这个题其实更贴切的表述是合并区间,因为好像我们只需要记录左右端点就不需要讨论拼接顺序。

我们发现有一个简单的 DP,即设 \(f_{l,r}\) 表示区间 \(l,r\) 的答案,而在合并区间的时候,我们实际上可以记录 \([l,r],[l+1,r],[l,r-1],[l+1,r-1]\) 的答案,然后记录左右区间是什么,然后就可以 \(O(n^2)\) 转移。

然而我们发现这样做是不需要讨论区间 DP 的精髓:即区间从哪里拼接,因为 \([l,r]\) 从任意子区间转移过来的答案应该都是一样的。然后就结束了,把这个东西扔上线段树,扫 \(k\),每次把一些数变成 \(0\)\(-1\),每次合并出来的就是答案。

注意到需要判无解,直接暴力判每个 \(0\) 即可。然后你会发现 \(0\) 其实是一个分界点,对于其他所有区间询问一遍然后合并即可。时间复杂度单 log。

20240713

T1 我是最大傻逼。打表找出来的规律和正解大相径庭。

正解是注意到若 \(2|m\),我们可以得到谁先选 \(B\) 谁倒霉,所以我们都是先选完 \(A\),然后全部选完 \(B\)。然后对于 \(2\nmid m\) 的情况枚举第一次选 \(B\) 是什么时候,然后即刻转化为 \(2|m\) 就可以做了。代码懒得写了。

T2 推式子。第一次用生成函数和莫反用对位置了,然后你发现我不会单位根反演。而且我把单位根的很多性质都忘了,FFT 白学了。接下来是推式子的过程,然后代码就是预处理一下,去掉 \(\mu(x)=0\) 的情况,就能做到 \(O(T(2^{12}\times 12+\frac{\sqrt n}{\ln n})+\sqrt n)\),可以通过,作者懒得写了,因为推式子就很累了。

首先列出互异的分拆数的生成函数:\(F(x)=\prod_{i=1}^n(1+x^i)\)

然后列出题中需要我们求的和与 \(n\) 互素的方案数式子:

\[\sum_{i}[\gcd(i,n)=1][x^i]F(x) \]

这个东西可以暴力拆莫反:

\[\begin{aligned} &=\sum_{i}(\sum_{d|n,d|i}\mu(d))[x^i]F(x)\\ &=\sum_{d|n}\mu(d)\sum_{d|i}[x^i]F(x) \end{aligned} \]

然后后面那一部分是可以用单位根反演做的。

单位根反演的某种形式:\(\sum_{i=0}^m [d|i][x^i]F(x)=\frac{1}{d}\sum_{i=0}^{d-1}F(\omega_{d}^{i})\),其中 \(F(x)=\sum_{i=0}^mF_xx^i\)

然后就可以变成 \(\sum_{d|n}\frac{\mu(d)}{d}\sum_{i}[d|i][x^i]F(x)=\sum_{d|n}\frac{\mu(d)}{d}\sum_{i=0}^{d-1}F(\omega_{d}^i)\)

拆开 \(F(\omega_{d}^i)\),我们发现我们实际上只需要化简下面的式子:

\[\sum_{i=1}^{d}\prod_{k}(1+\omega_{d}^{ik}) \]

后面那一部分显然是有循环节的,循环节长为 \(\frac{d}{\gcd(i,d)}\)。我们把循环节拉出来看,设 \(p=\gcd(i,d)\)

\[\sum_{i=1}^{d}\left(\prod_{k=1}^{\frac{d}{p}}(1+\omega_{d}^{kp})\right)^{\frac{np}{d}} \]

单位根的上标是 \(kp\) 是因为它本来就能表示整个整除系。

然后我们把 \(p\) 提出来:

\[\begin{aligned} &=\sum_{p|d}\left(\sum_{i=1}^{d}[\gcd(i,d)=p]\right)\left(\prod_{k=1}^{\frac{d}{p}}(1+\omega_{d}^{kp})\right)^{\frac{np}{d}}\\ &=\sum_{p|d}\varphi\left(\frac{d}{p}\right)\left(\prod_{k=1}^{\frac{d}{p}}(1+\omega_{d}^{kp})\right)^{\frac{np}{d}}\\ &=\sum_{p|d}\varphi(p)\left(\prod_{k=1}^{p}(1+\omega_{d}^{\frac{kd}{p}})\right)^\frac{n}{p} \end{aligned} \]

后面就是利用单位根 \(\omega_{d}^{\frac{d}{p}}=\omega_{p}^1\)\(\prod_{i< n}(x-\omega_{n}^i)=x^n-1\) 的性质,把式子化简,然后去除中间的一些过程,得到整个答案的式子:

\[\sum_{d|n}\frac{\mu(d)}{d}\sum_{p|d}\frac{\varphi(p)}{p}2^{\frac{n}{p}} \]

剩下的式子可以参照知乎回答,作者脑子已经很晕了。

T3 牛逼期望题。接下来就是选几道数位 DP 然后就回家睡觉了。

注意到 \(m\leq 5\),不难想到维护每一行的信息。

然后稍微换一下期望的式子就能发现,我们可以通过设立两行的所有元素为元,即设 \(2m\) 个元素为元,然后就能递推出剩下的所有元素(当然是没到终点的前提下)

然后我们维护这个东西,假设 \(0\)\(n-1\) 行为主元,从左向右递推出所有元素的线性表示即可。然后不难发现修改易做,只要我们每个节点表示的是 \(a-1,a\) 行转移到 \(b,b+1\) 行。

然后询问的时候,因为有终点的存在,我们对终点要特殊处理。我们询问 \([0,tx]\) 的所有元素,然后修改 \(tx+1,ty\) 左右的元素,减去从 \(tx,ty\) 转移过来的贡献,然后再把 \(tx+1,ty\) 设成一个主元,因为到头了不能再走。然后就再询问 \([tx+1,n]\) 合并即可。

然后高斯消元一次得到所有主元的值,询问 \(O(1)\) 次得到起点的线性表示,然后就做完了。

因为有点赶,然后想睡觉,所以我本来想找到 \(m=1\) 的原来写一下,但是没找到,遂弃。

posted @ 2024-06-25 15:50  xingyu_xuan  阅读(21)  评论(0编辑  收藏  举报