校内高质量模拟赛选做

「2020-02-14 省选模拟赛」同桌与室友 (mate)

  • 注意到每个人最多连出两条边,因此形成的图要么是环,要么是链。链分两端颜色是否相同讨论即可。

「2020-02-14 省选模拟赛」传送 (teleport)

  • 有显然的差分约束模型。实际上 dp 可以求出每个点的合法区间,最后若区间非空即有解。

  • 注意到每花费 1 的代价即可使答案区间左右各扩大 1,因此花费可简单计算。

「2020-02-14 省选模拟赛」生成树 (tree)

  • 将绿边权值设为 x,蓝边权值设为 y,红边权值设为 1,矩阵树定理之后的形式是关于 x,y 的二元多项式。答案即为系数的二维前缀和,二元插值即可求出。

「2020-02-17 省选模拟赛」序列 (seq)

  • 倒序考虑 q 的组成。最后加入的数对可以通过分奇偶性区间极值得出。这样可以把原区间分为三个子区间,递归下去即可。子区间的数对必须在当前区间的数对之前选择,这样可以得到数对之间的偏序关系,求字典序最小的拓扑序即可。

「2020-02-17 省选模拟赛」进制 (hex)

  • 第一问,注意到十六进制数的长度不超过 15,预处理每种长度的数在序列中占多少长度可以判断位数。之后通过数位之间的整除、取模即可求得。

  • 第二问,求出第一问后相当于小于某个数的所有数做数位统计,数位 dp 即可。

「2020-02-17 省选模拟赛」矩阵 (matrix)

  • fi,j 表示有 ij 列,其中每行都有涂黑的方案数。

  • ans=(ni)fi,m

  • 考虑两种转移:

    1. 新增一列。fi,j+((j2)+j+1)fi,j1

    2. 新增一列,以及若干行。考虑原来某列第一个位置的上一个,和最后位置的下一个位置,和新增的 ik 个位置一共形成 ik+2 个位置。那么相当于在 i+2 个位置中选出 ik+2 个位置填数。 fi,j+(i+2ik+2)fk,j1。转移是卷积的形式,NTT 即可。


「2020-02-18 省选模拟赛」小 D 的奶牛 (cows)

  • 先考虑 2n 做法。记录每个点连出的点集,状压 dp 每个集合是否可行。
  • 折半搜索。前一半需要统计子集中有多少个合法,可以 FWT;在后半搜索的时候直接求出对应的集合最大能是多少。

[「2020-02-21 省选模拟赛」遗迹探索 (strings) ]

一个串把中间的 SAD 计入答案后,只有前后缀两个字符有用,我们完全可以把信息压缩成:前缀 A 的出现次数,前缀 AD 的出现次数,后缀 S 的出现次数,后缀 SA 的出现次数。如果不存在单独的 A,则贡献是好算,注意一些串可能同时存在匹配的前后缀,要去除用的所有串都是同一类的情况。考虑单独的 A,枚举其被用了几个,把一些长度为 1 的前/后缀拼成长度为 2 的前/后缀即可

「2020-02-21 省选模拟赛」基因进化 (reverse)

对于可翻转前缀 [1,i],我们能从其最优答案推出下个可翻转前缀 [1,j] 的最优答案。直接维护这个最优答案,需要支持头插入、尾插入、翻转字符串,使用 hash 二分判断字典序,双端队列维护 hash 值。

「2020-02-21 省选模拟赛」城市破坏 (disconnected)

  • 如何判断删去若干边之后,图能否被分成两个连通块?

  • 每条边随机一个权值,点权为相邻的边的边权的异或和,满足所有点权为 0。若删去的边的边权异或和为 0,则被分成两个连通块;否则不是。

  • 2c 枚举删掉的边集,若异或和为 0 则不连通。

  • 关于边权,dfs 树上,非树边随机,树边构造即可。


「2020-02-25 省选模拟赛」小 B 的班级 (class)

如果人的位置确定,点 u 的父边最多能为 min(sizu,nsizu) 个点对产生贡献,并且显然可以取到上界。那么对所有方案计数只需分别枚举子树内男、女人数即可,直接做是 O(nm2) 的。实际上只需要枚举子树内总人数即可。

[「2020-02-25 省选模拟赛」小 B 的环 (loop)]

倍长断环成链,如果相邻字符相同则这两个位置不会同时出现,这样就把字符串分割成若干段独立子串。删除长度为 k 的串,等价于保留长度为 nk 的串;存在合法的长度为 k 的串,等价于 i,sisi+k1,显然补集转化,不存在合法的长度为 k 的串,等价于 i,si=si+k1,即存在长度为 lenk+1 的 border。求串的所有 border,kmp 即可。

[「2020-02-25 省选模拟赛」小 B 的农场 (farm) ]

分治,求所有跨过中线的答案。以竖中线为例,枚举上边界,线段树维护每个下边界的答案,则中线两边显然分别考虑,且可选长度自上而下构成一个逐渐“缩紧”的形状,用单调栈维护。注意边界。

注意到答案大等于 2max(W,H)+2,所以只需要横着竖着各分治一次即可。


[「2020-02-28 省选模拟赛」小 B 的棋盘 (chess)]

无穷解当且仅当 kn,比较显然。否则前 k+1 个点与后 k+1 个点至少存在一对匹配点,否则无法增加 k 个点使对称。枚举匹配点对,即可求出对称中心,暴力判断是否存在匹配点即可。可以排序后双指针优化常数。

[「2020-02-28 省选模拟赛」小 B 的夏令营 (camp)]

等价于相邻两行剩余区间有交。暴力 dp,设 fi,l,r 表示考虑前 i 行,第 i 行剩余区间为 [l,r] 的方案数,转移枚举上一行所有有交的区间,再乘上剩下 [l,r] 的概率。需要优化状态。设 gi,j=kjfi,k,j,发现 f 的转移方程可以用 g 表示,然后再求一个前缀和即可得到 g 的转移式,可以前缀和优化。

「2020-02-28 省选模拟赛」小 B 的图 (graph)

把询问离线下来排序。当 x 很充分小时,我们优先选用 k+x 的边;随着 x 增大,我们会选择把一些边替换成 kx 的边。但是两种边使用的集合是不变的——一定是各自子图上最小生成树边。所以先求出 k+x 边的最小生成树,枚举每一条 kx 边,维护路径上边权最大值,可以求出替换时的 x 值。注意到如果两条 kx 边对应路径有交集,那么一定是 k 小的先替换,并且不会再被替换。所以替换后要在最小生成树上删除,边权赋成负无穷。LCT 维护最小生成树即可。


「2020-03-31 省选模拟赛」积性函数求和 (sum)

算法 1

f(pk)=2k+1,Min25 筛板子题。

算法 2

口胡的。

f(n)=d|np|n[(p,d)=1]=t|nμ(t)σ02(nt)

i=1nf(i)=i=1nt|iμ(t)σ02(it)=d=1nμ(d)i=1n/dσ02(i)

如果可以使用杜教筛求出 σ02 的前缀和,那么由于我们只需要其在形如 nx 处的前缀和,一遍杜教筛即可解决问题。感觉很对。

算法 3

搬运官方题解。

f(n)=i=1k(2αi+1)=S{1,2,3,k}2|S|iSαi=d|n2ω(d)=d|np|dμ2(p)

所以

f=μ2II=μ2σ0

带回原式

i=1nf(i)=i=1nμ2(i)j=1n/iσ0(j)

有两个比较经典的结论

i=1nμ2(i)=i=1nμ(i)ni2

i=1nσ0(i)=i=1nni

μ2σ0 的前缀和都可以在不超过 O(n) 的时间复杂度内求出。因此可以预处理前 n 个值,剩下的暴力做,复杂度分析和杜教筛是一样的。

「2020-03-31 省选模拟赛」游戏 (game)

先手必胜:对手存在一张牌,使得其比先手所有牌都小。

后手必胜:对于自己的每一张牌,都有一张先手的牌比它小。

剩下都是平局。

「2020-03-31 省选模拟赛」子串排列 (permutation)

把询问结点定位到后缀树上,建出虚树贪心。维护每个子树的答案,把所有子结点的答案按照字典序排序后加入,最后再加入当前子树根的串。排序直接暴力排(在这里想了挺久),重儿子长度不会计入,复杂度是对的。

posted @   Aphrosia  阅读(108)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示