duel 记录

duel 记录

省流,juju 太菜了,总共 win 了 2 把。

数据实时更新。

1. ?

?
hzr 胜 juju。

是一个低分题,皇子很快秒了,我根本没读懂题意。

2. Jzzhu and Squares

*2900
juju 胜 hzr。

这个题我和皇子都做了非常久。

题意是求格点正方形完整包含的格子个数,注意到格点正方形可以是由“三垂直”结构构成的斜的正方形。

我们考虑一个横平竖直的 n×n 的正方形的贡献 f(n)
f(n)=n2+i=1n1(n2i)2+4g(i,ni)

g(i,j) 是两条直角边为 i,j 的等腰三角形内的完整格点数。运用皮克定理可以得到 g 的式子。

完整的式子推导比较繁琐,最终的式子仅需要知道 id×φ(i),可以写狄利克雷卷积也可以线性筛。

时间复杂度 O(nlnn)O(n)

AC 代码

3. Karen and Cards

*2800
hzr 胜 juju。

自己编的做法很多细节,而如果基于值域 5×105 的话可以使用线段树做法将细节减少非常多。
说说我自己的做法。

考虑按 a,b,c 分别降序排序之后,一个三元组 (x,y,z) 显然会输给三个维度的三个前缀。
而有贡献的三元组等价于对应的三个前缀没有重复元素。

我们考虑枚举 a 维的前缀 i,此时 b 维和 c 维分别有一个红线不能越过。而 b,c 在此时一定是一个单调不降和单调不升的双指针结构的贡献。
我们可以提前预处理出 b 往后扫,c 往前扫的贡献,a 维的限制很好处理,我们截取一段 b 的区间即可,可以用二分实现。

时间复杂度 O(nlogn)

AC 代码

4. Yet Another LCP Problem

*2600
zph 胜 juju。

写了一个 O(nlog2n) 的 SAM 上树剖做法,调试太慢了败给了 zph/ll。
做法是经典的 [LNOI] LCA。

AC 代码

5. Even Harder

*2700
hzr 胜 juju。

啊啊啊,DP 题被皇子薄纱。这个题思路来得很快但是写起来被莫名其妙的细节卡了好久。

一个朴素的 DP 可以考虑 f(i,j) 表示处理完 [i,n],从 i 出发到 n 只有一条路径,这条路径上的后面一个点是 j,最少赋 0 次数。转移考虑枚举下一个路径上的位置即可,容易 O(n3)

优化可以试图将状态里的 j 这一维去除,考虑如果我们能直接不转移到能一步到达 j 的位置就好了。
我们可以将元素按 i+ai 降序排序 DP,f(i,j) 表示处理到排名为 i 的元素,那一条唯一能到 n 的路径的最后一个点是 j 时的最少赋 0 次数。

如果我们需要将此时的节点加入路径,我们将第一维跳到 i+ai<j 的第一个位置,越过所有不合法的位置,将区间里需要赋 0 的元素统计进代价。

时间复杂度 O(n2)

AC 代码

6. Appropriate Team

*2700
xzy 胜 juju。

这题做了好一会儿不会,xzy 都过了,终于去想对不同质因子分开考虑,很快会做了。

我们对于质因子 p 考虑题目给定限制:
v,min(vp(v),vp(ai))=vp(X),max(vp(v),vp(aj))=vp(Y)

条件不满足当且仅当 vp(ai)vp(X)vp(aj)vp(Y)vp(X)vp(Y)

我们把 YX 的质因子拿出来,只有这些质因子满足 vp(X)vp(Y),由于 ω(1018)=15,我们对这些质因子做 FWT 是很轻松的。

时间复杂度 O(V1/4+2ω(V)ω(V))

AC 代码

7. Minimum Difference

*3100
juju 胜 hzr。

时限 5s,数据范围全是 1e5,试试带修莫队。

考虑莫队时维护出每个数的 occ 和 occ 为 i 的数的个数。
我们所求即为在后者数组上,最小的一个区间使得区间和不少于 k
而有值的位置不超过 n 个,我们可以维护有值的位置拿下来双指针。

我实现的做法是 O(n2w++mn)
带修莫队的块长乱设的,感觉 5s 随便过。

AC 代码

8. Number of Components

*2800
zyf 胜 juju。

为啥题面是 cimax(1000,2×106/n/m) 啊/fn/fn。

首先一个一眼的做法是线段树分治,O(qlogqlog(nm)),空间 O(qlogq),感觉过不去。

我们考虑利用好题目里的特殊性质 cici+1
观察到直接做并查集难以维护的原因是会有分裂操作。
我们可以倒过来做将分裂转化成合并操作,具体的可以维护 <c 的并查集,到 p 的修改时将 p 的点全部删掉,这个部分的贡献正着扫的时候求得。

时间复杂度 O(qlog(nm)+Cnm)

AC 代码

9. Armor and Weapons

*2800
和 zyf 平局

不会做,很神秘,感觉也不是很难。

不妨设 nm
一个简单的观察是答案不超过是 logn+mn,构造是斐波那契到 n 满了之后一直往第二维堆就行了。

我们可以暴力的 DP ft,i 表示第 t 次操作第一维是 i 时第二维的最大值,复杂度 O(ans×n)=O(nlogn+m)

AC 代码

10. Cow Tennis Tournament

*2800
hzr 胜 juju

小输 6min,中途去上大号亏麻了,蹲下没一会儿想到了比较关键的地方就会做了。

首先 s 没啥用,排序之后当成每次反转一个区间的边就行了,题目要求我们计数三元环。

在思考直接做无果之后考虑正难则反,反方向考虑不是三元环怎么数。
我们数左中右三种入度/出度为 2 的点就行了,具体的考虑得到 i 号点左边连向它的点数和右边连向它的点数,容易计算出答案。

想计算一个点一遍有多少点连向它可以扫描线线段树维护 01 值,只需要支持区间异或和区间 01 个数。

时间复杂度 O(nlogn)

AC 代码

11. Duff is Mad

*3000
hzr 胜 juju

怎么 DS 也输???

一开始考虑了直接 ACAM 上树剖啥的 polylog,但发现有 trie 树上链查,不太可做。转而思考根号。

考虑对串长根号分治:

  • 对于 k 为小串的询问可以丢一起处理,将查询差分变成前缀查询,扫描线,支持子树加,单点查(暴力查询 trie 数上链和)。
  • 对于 k 为大串的询问每个 k 单独做一次扫描线,需要支持单点加,子树查。

只需要实现一个 O(S) 单点修改,O(1) 区间查询的分块即可平衡复杂度。

时间复杂度 O(nn)n,S 同阶就不区分了。

AC 代码

posted @   juju527  阅读(229)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示