营业日志重新启动。
12.04 模拟赛
170,rk 9,A 没过,太丢脸了。
D 猜数
考虑朴素的 dp:\(f_{l, r} = \min\{ \max\{f_{l, k - 1}, f_{k + 1, r}\} + k \}\)。
固定 \(l, r\) 从左往右移 \(k\),注意到 \(f_{k+1, r}\) 递减,\(f_{l, k-1}\) 递增,找那个临界点 \(k_0\),则在其左边一定会选择 \(k_0\),在其右边不确定。
题解告诉我们 \(r - k_0\) 是 \(\dfrac{n}{\log n}\) 级别的。
在其右边,式子是 \(f_{k+1, r}+k\)。注意到这与 \(l\) 无关,\(l\) 只会影响 \(k\) 的取值范围,并且这个限制是不升的。因此,对于所有 \(r\) 相等的 \(f\),可以跑一次单调队列一起解决。
真的可以吗?但是状态数会爆。注意到只有 \(r - l \leq \dfrac{n}{\log n}\) 的状态是有用的,因此有用的状态数是 \(\dfrac{n^2}{\log n}\) 个。
空间会爆。注意到 \(r\) 离当前 \(r\) 的距离超过 \(\dfrac{n}{\log n}\) 的状态也是没用的,这样状态数就是 \(\dfrac{n^2}{\log^2 n}\) 了,这就能过了。
细节有点小多,总体还行。
12.05 模拟赛
打一半下去体测,100+0+0+0。
T2 神J上树
考虑单个操作,把 \(u \times dis(u, v)\) 看成在每条边上放一个 \(u\) 的权值,那么每次会走前缀 \(\min\),在上面加入一个点相当于进行 cmin
操作,查询是链查,上吉司机就行了。
好像有更好写的做法,但我没多想。
12.06 ACM
rk15,差一点 rk11,可惜。
B
多项式板子,P4233 套个求逆就行了。
结果 jiangly 的板子 T 了好久,导致我做了 2h 左右,对不起队友 /kt
C
赛时发现排序后每个数的贡献一定,因此一直在想怎么快速排序并更新答案。实际上好套路啊。
在值域上维护 difsum,当合并两值域时,答案是 \(cnt_l \cdot sum_r - cnt_r \cdot sum_l\),因此维护区间内点个数和点权和。
答案的左右端点之一会抵住某个点,因此本质只有 \(2n\) 种。结论是在离散化后的序列上答案单峰,可以二分差值的零点。
为了快速查询离散化序列的第 \(k\) 项,还用在线段树维护当前区间内不同值的个数。
核心代码:
int l = 0, r = s.tot() - 1;
LL res = -1;
while (l <= r) {
int mid = l + r >> 1, x = s.kth(mid), y = s.kth(mid + 1);
LL xv = calc(x, x + d), yv = calc(y, y + d);
if (xv >= yv)
res = std::max(res, xv), r = mid - 1;
else
l = mid + 1;
}
l = 1, r = s.tot();
while (l <= r) {
int mid = l + r >> 1, x = s.kth(mid), y = s.kth(mid - 1);
LL xv = calc(x - d, x), yv = calc(y - d, y);
if (xv >= yv)
res = std::max(res, xv), l = mid + 1;
else
r = mid - 1;
}
G
摘抄 计算小练习。
做一些变换让两条线段在坐标轴上,则需要求 \(\displaystyle \int_0^b \int_0^d \sqrt{x^2+y^2} \text{d}x\text{d}y\)。\(\newcommand\d[1] {\text{d}#1}\)
极坐标代换:
图源:http://staff.ustc.edu.cn/~rui/ppt/math-analysis/chap10_2.html
中间一步拆分:注意到角度旋转时,顶点先抵住右边界、再抵住上边界,因此以对角线为界限拆分为两个三角形。
\(\displaystyle \int r \d{\theta} \d{r}\) 是许多阴影小块的面积,拼起来才是大圆(当然,这里是长方形。)
因为,本质上是分成许多小块,每块内近似取一样的答案。
\(r^2\) 来自于 \(\d{xy} \to r\d{r}\d{\theta}\)。
(这个看来只能慢慢学)
把式子代进去就行了。
D
H
K
如果一个人有多种操作,并且另一个人在他操作后赢了,那么他可以改变操作。
于是 \(n, m > 2\) 时只可能第一个人第一次操作后成功,或平局。
\(n, m = 2\) 时挺平凡。
判初始局面不可通过操作被排序。