2023.02.22琐记
2023.02.22琐记
我将忠于大爱与真理
而不是道义与科学
每次粘贴失败都出现一个 v
以后每天又多了一件幸福的事
2023.02.22
T1
考察有希望的字符串有什么性质。
首先,显然,\(cnt_{-} > cnt_{+}\)。
-- 变成 + 偏移量为 \(3\)。因此有希望的字符串需满足 \(cnt_{-}-cnt _{+} \equiv 0\pmod{3}\)。
还有就是要有 -- 去变成 +,这个发现是不用考虑的,一定办得到。
现在来看怎么做。
钦定区间右端点 \(r\) 从左往右扫,对每个 \(r\) 需要找到 \(cnt_{-} - cnt_{+} \equiv 0 \pmod{3}\) 的左端点 \(l\) 的数量。
前缀和表示:\(s_{r} - s_{l - 1} \equiv t_r - t_{l - 1} \pmod{3}\)。\(s\) 是 -,\(t\) 是 +。
移项:\(s_{r} - t_{r} \equiv s_{l - 1} - t_{l - 1} \pmod{3}\)。
如果没有大小限制那就很简单,开三个模意义下的计数器就可以了。
问题就在于需要使 \(s_r - s_{l - 1} \ge t_{r} - t_{l - 1}\)。
再来移项:\(s_{r} - t_{r} \ge s_{l - 1} - t_{l - 1}\)。
感觉很可以数据结构维护。对三个余数开树状数组!
好吧这居然才 2100*。。。
T2
从 \(n\) 个数中找两个数使他们的最小公倍数最小。
这题面也太简洁了吧。。。
\(\operatorname{lcm}(n, m) = \frac{nm}{\gcd(n, m)}\) 还是不太好做。
考虑一下随机化可不可做。完全可以出极端数据,貌似不可做。
那就从极端数据开始考虑,假设一开始所有数都是互质的,那选最小的两个数即可。
没什么思路,先跳一下。
对每个数枚举因数,对每个因数当作 \(\gcd\) 开个 pair 存最小的两个数。
嗯,这样感觉很对!
T4
说不定可以 dp。
考虑前 \(i\) 种操作,最大值为 \(j\) ,,,然后不会了
这个问题很奇怪,肯定需要转化成什么。
对于一个点,它对应了若干个能操作到它的区间,不妨对最大值出现的位置分开考虑,只用这些能够覆盖到当前位置的区间做一下背包,那当前位置一定是最大值。枚举位置 \(O(n)\),做背包又是 \(O(n^2)\) 的,貌似很恼火。
考虑如何优化,首先考虑到的是把枚举点变成枚举区间,但可以轻松构造一层套一层操作区间 hack 掉。
等等,像这种包含的情况,只需做极大的那一个区间不就可以了吗?
但是正确的时间复杂度还是不好保证。
突然灵光一闪,把每条线段看作物品,则每个物品从左到右出现的时间是连续的,对每个位置删除或增添物品是 \(O(n)\) 的,且只需判断是否可达,还可用 bitset 优化,总共只有 \(2n\) 个端点,因此修改背包只有 \(2n\) 次,时间复杂度 \(O(\frac{n^2}{w})\)。
捏麻麻滴,不会删除物品。
可能还不能用 bitset 优化,

浙公网安备 33010602011771号