duel 记录

duel 记录

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

数据实时更新。

1. ?

?
hzr 胜 juju。

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

2. Jzzhu and Squares

*2900
juju 胜 hzr。

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

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

我们考虑一个横平竖直的 \(n\times n\) 的正方形的贡献 \(f(n)\)
\(f(n)=n^2+\sum_{i=1}^{n-1}(n-2i)^2+4g(i,n-i)\)

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

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

时间复杂度 \(O(n\ln n)\)\(O(n)\)

AC 代码

3. Karen and Cards

*2800
hzr 胜 juju。

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

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

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

时间复杂度 \(O(n\log n)\)

AC 代码

4. Yet Another LCP Problem

*2600
zph 胜 juju。

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

AC 代码

5. Even Harder

*2700
hzr 胜 juju。

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

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

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

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

时间复杂度 \(O(n^2)\)

AC 代码

6. Appropriate Team

*2700
xzy 胜 juju。

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

我们对于质因子 \(p\) 考虑题目给定限制:
\(\exist v,\min(v_p(v),v_p(a_i))=v_p(X),\max(v_p(v),v_p(a_j))=v_p(Y)\)

条件不满足当且仅当 \(v_p(a_i)\neq v_p(X)\and v_p(a_j)\neq v_p(Y)\and v_p(X)\neq v_p(Y)\)

我们把 \(\dfrac Y X\) 的质因子拿出来,只有这些质因子满足 \(v_p(X)\neq v_p(Y)\),由于 \(\omega(10^{18})=15\),我们对这些质因子做 FWT 是很轻松的。

时间复杂度 \(O(V^{1/4}+2^{\omega(V)}\omega(V))\)

AC 代码

7. Minimum Difference

*3100
juju 胜 hzr。

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

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

我实现的做法是 \(O(\dfrac{n^2}{w}+带修莫队+m\sqrt n)\)
带修莫队的块长乱设的,感觉 5s 随便过。

AC 代码

8. Number of Components

*2800
zyf 胜 juju。

为啥题面是 \(c_i\le\max(1000,2\times 10^6/n/m)\) 啊/fn/fn。

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

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

时间复杂度 \(O(q\log (nm)+Cnm)\)

AC 代码

9. Armor and Weapons

*2800
和 zyf 平局

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

不妨设 \(n\le m\)
一个简单的观察是答案不超过是 \(\log n+\dfrac m n\),构造是斐波那契到 \(n\) 满了之后一直往第二维堆就行了。

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

AC 代码

10. Cow Tennis Tournament

*2800
hzr 胜 juju

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

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

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

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

时间复杂度 \(O(n\log n)\)

AC 代码

11. Duff is Mad

*3000
hzr 胜 juju

怎么 DS 也输???

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

考虑对串长根号分治:

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

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

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

AC 代码

posted @ 2023-06-28 20:53  juju527  阅读(182)  评论(0编辑  收藏  举报