Ucup 题选讲

做题

Posted by WrongAnswer_90's Blog on November 4, 2024

QOJ9540 Double 11

挺魔怔的啊。柯西不等式得,要求的就是把序列分组,使得 $\sum_i \sqrt{sum_icnt^i}$ 最小。

排序(?),wqs 二分(。),决策单调性(。)。我也不知道为什么但是确实是这么做并且一眼看上去也是这么做/kx/kx。

QOJ9522 A Simple String Problem

考虑单串怎么做。一个神秘做法是分治(?),然后要求跨过分治中心。枚举长度之后要求两边的 LCP 拼起来长度大于等于长度。好像也能做(?)。

一个更典的做法是枚举串长之后定长分块(优秀的拆分)。需要求调和级数次数级别的 LCP。

两个序列定长分块还是能做,就是一万种大分讨。

QOJ9456 012 Grid

如果左下,右上都是 $1$,方案数可以用 LGV 引理求出。但是有点毛病。

枚举 $1$ 的一个矩形,然后列列式子发现是一个 FFT 啥的。

QOJ9482 Count Pseudo-Palindromes

做到 $\mathcal O(n\log n)$ 非常简单。什么一个点对会 ban 掉一个矩形然后扫描线啥的,看起来就常数巨大。

有一个很牛的做法:处理序列中第一次出现的数的答案,然后再倒过来做一遍就行了。对 $r$ 扫描线,维护所有合法的 $l$。

首先新加入了一个 $r$,如果 $a_r$ 是第一次出现那没有问题,否则需要删掉 $>lst_{a_r}$ 的所有 $l$。

然后考虑会贡献到哪个数上。考虑 $[1,r]$ 只出现一次的数的位置集合 $S$,则一定是 $S$ 中最大的元素才能统计到贡献,并且贡献就是在最大值和次大值中间的 $l$ 的个数。

简单处理的话就是上个 BIT 维护 $l$,一个栈维护所有能用的 $l$ 来支持 pop,一个 set 来维护集合 $S$,复杂度是 $\mathcal O(n\log n)$。感觉做到 $\mathcal O(n)$ 也是简单的。

QOJ9486 Random Mex

不牛。推推式子发现是斯特林数。

QOJ9490 Sub Brackets

奇偶括号相交且不包含不合法。所以跑一个二分图最大独立集就行了。