Codechef July Challenge 2020

PTMSSNG

先当于求 x 里出现奇数次的,y 里出现奇数次的,异或和一下就好了

CHFNSWPS

把 A 和 B 共有的删掉,那么只要把剩下的最小的一半和最大的一半 swap 即可,注意代价还要对序列里的最小值的两倍取 min,因为可以通过最小值实现两倍代价交换两个数

DRCHEF

感觉做法写烦了,暴力的模拟这个过程:每次查找有没有数字在 [(x+1)/2,x] 的,如果有,干最小的满足条件的,否则干最大的一个数

DRGNDEN

用线段树正着,反着维护区间从左端点开始到右端点及其右边终止的权值和,update 的时候稍微操作一下,是个经典的套路

LCMCONST

这题拿了一血,好开心啊。

考虑把质数分开来考虑,对于每一个质数,发现只有次数相同的连通块是不确定的,对于次数相同的连通块,折半搜索,fwt 算贡献

WEIRDMUL

发现这个 W 的计算和哈希很像,先用哈希的方法搞出后缀和,把 W(i,j) 转化为 sum[i]-sum[j+1]*pw[j-i+1],然后再稍加处理,把 W(i,j) 乘上 pw[i],这个乘的次数是可以算的,到最后除掉即可,于是 W(i,j) 变成了 sum[i]*pw[i]-sum[j+1]*pw[j+1],然后令 a[i]=sum[i]*pw[i],我们要求的

i<j(a[i]a[j])

由于原来求的式子里有个平方,所以可以变成更友好的形式

ij(a[i]a[j])

我们令

Fj(x)=ij(xa[i])

我们要求的是所有的 i 的 Fi(a[i]),然后乘积一下

发现这个过程和多项式多点求值十分相似,魔改一下板子就行了,我写的常数有点大,要卡卡

EXPREP

在末尾加上一个特殊字符,观察一下发现,要求的其实是 1<=i<=n,i<=j<=n+1(sum[j1]sum[i1])(lcp(i,j)+1)

然后因为后缀自动机上的 lca 就是两个串的 lcs,所以在倒串上搞搞,具体的,其实是求每个状态的 endpos 集合两两 sum 的差,SAM 上线段树合并一下

EXPTREES

是个有趣的题目,我们首先可以求出 fi 表示有 i 条初始边的生成树的个数,然后由于初始边数相同,期望也是一样的,可以算一下贡献

对于求 f 的过程,是个矩阵树定理,不过稍稍修改,变成多项式的运算,但是这样复杂度略大,考虑带入插值进去,然后高消求解系数

对于算有 i 条边的期望的过程,考虑其指数型生成函数,是

(ex+ex2)i(exex2)n1ien(n1)/2n+1

然后把这个东西的 e^i 的系数预处理出来,这样每次询问的复杂度就是 O(n) 了

posted @   xay5421  阅读(226)  评论(1编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示