4月

4.2

Minimum Sum of Maximums P

感觉比较牛
通过观察不难发现,在K=0时之间构造递增或者递减是很优的。
而可以感受一下,如果两头有值的话这个仍然是很对的。
而再次观察不难发现,选择的值域要么包含要么不交
哦好像还是要把max(x, y)拆成(x + y + abs(x-y))/2才好做。
这样的话不难发现值只和最大最小值有关。
哦然后这个dp状态也比较牛啊。
就是\(dp_{l,r,S}\)表示 \(l,r\) 内填满了 \(S\) 的最小代价。\(len_S\)表示\(S\)的长度和。
注意到 \(len_S\) 是可能比 \(r-l+1\) 大的,这个时候可以理解为有一些点被钦定放在外面(即被外面的某个区间包含)。
由于最终统计答案的时候 \(len_S = r - l + 1\),因此不存在某个点被虚空包含的可能。

Hills and Pits

感觉比较牛。(你还会说点别的吗?)
显然值之和小于0无解。以下讨论有解情况。
注意到答案的一个上界是 2(n-1),即顺着走再倒着走一遍。
而显然下界是 n - 1,即每条边至少要被走一次。
假设出发点S<=结束点T。大于的情况是类似的。
考察最靠左边只被走一次的边,显然它的一头是开始点。最右边的一头是结束点。
形如 s -> l -> s -> t -> r -> t
那么对于一个从s -> t(不算两头)的合法过程,如果存在前缀和<0的,需要找到它后面第一个>=0的走一个来回。
这样的边会被走三次。
实际上的贡献是>=0的个数 - <0的个数。
扫描线即可。值得注意的是,由于是在T-1处统计的贡献,算最长子串的时候边界是l, r - 1。

Chorus

感觉我比较不牛。
注意到B只可能往后移动。
手模一下发现选的一首歌的A和B排名(在A和B中)都是连续的
假如让排名(l, r)的所有唱一首歌。那么i合法的充要条件是 \(B_l\)\(A_i\) 的后面。
而由于这是个01序列,那么把所有A前面的B的数量的变化加起来就是最终答案。
因此\(w(l, r) = {\textstyle \sum_{i = l}^{r} max(pre_i - l + 1, 0)}\) , \(pre_i\) 表示第i个A前面的B的数量。

我的日常:
while(1) {
做题;
if(不会做&&题解看不懂) break;
}
开摆;

由此可以证明,我是容易破防的波特。

4.4

波特今天又破防了。如果我哪天更的特别少那必然是破防了。
话说都是波特了,为什么还会破防啊。
所以说建议大家开局的时候多点心理素质。像我这种心里素质特别差的就不是很适合搞OI。
哦如果现在心理素质还是很差的话可以去决心商店买。
至于决心商店在哪里……

4.5

就我没放假。算了都搞竞赛了,就这样吧。

XOR Sum of Arrays

太高深。
如果是加法的话,用哈希很好维护。
但是由于是异或,所以不好哈希。煮波太菜了不会nim积。(有可能这个东西就是吧,但是我还是更喜欢叫它神秘哈希)
那就考虑把一个数看成一个01向量。做二进制下的加法。
加完之后会获得一个向量序列,要维护这个序列的哈希。
如果只是简单的全做二进制下加法是很唐的,而且比较好卡。
我们希望每个位置向量给最终哈希向量的贡献矩阵的不一样,这样不容易抵消。
一个比较naive的想法是给每个位置随机一个矩阵。但是这样不好维护。
所以可以像多项式哈希一样,每个位置乘一个随机矩阵的多少次方。

CF2081E Quantifier

我也是挺能拖了(
感觉这题是纯靠代码难度评的黑啊(
也可能是我代码能力太差所以写成了依托答辩。
煮波代码能力太差了。所以煮波要死了。/ll
煮波死了。煮波活了。
谢谢煮波。
核心在于:仔细地分析细节。

Cartesian Trees

笛卡尔树的同构……等价于所有区间的最小值位置相同。
注意到将每个点往后第一个比他小的连边,如果连边的形态相同那么笛卡尔树同构。

毒瘤题加强版再加强版

考虑k=1怎么做?直接异或即可。
那如果是k=2呢?搞两个格子,随机选一个异或进去。如果两个格子都不是空的,那么就可以得到答案。正确率1/2
但是这样子做的话正确率是1/k,显然是不能过的。
不能……吗?
找到一个判断某个格子内是否是一个点的方法。
如果同时做很多次的话,考虑到恰好出现一个的格子是不会特别少的。
而如果某个点恰好出现一次……它的贡献是可以被消去的。
所以多做几次正确率是很高的。据说三次就够了,但是我不会证明。而且我的代码太唐了,所以得做4次。
总之能过(

4.6

感觉像我这种不存在阅读能力的选手确实不应该试图挑战看论文。
字刚读进去就从脑袋里跑出去了/dk

4.7

再战lct。我上次怎么连点记录都不留啊。
本质上是实链剖分。用splay维护所有链。然后用虚边连成树形结构。

Torus Loop

感觉很牛啊
具体的,你可以通过给某个在边界上的边赋值,把一整行/列推出来。
而如果某一位是B的话,相当于给了一个限制——这两个的xor等于0/1才能合法。
发现限制形如若干01变量连边,直接搜索即可。

建议我以后还是在使用数组前清空/dk

4.9

我昨天怎么没写总结/jk 鉴定为卡常卡急眼了

4.13

oh no 怎么这么久都没总结/dk 我怎么这么摆烂
浅学了一下全局平衡二叉树,感觉和lct很像啊(
代码懒得写了,希望下次见到它不是在考场上。

4.15

最近写题be like :🤓☝️ => ✍ => 🤔 => 😰 => 🧐 => 🤓☝️ => 🤔 => 😭 => 🤡
解释一下():欸,我有一计!开写!哦完蛋假(看错题)了,怎么办,能修吗?再想想……我会修了!真的会修了吗……?(循环若干次)不会做不会做破防了。

[COCI 2019/2020 #3] Sob

终于一次看对题了(感动)
一开始完全想复杂了啊/dk
从低位往高位考虑,注意到要么是刚好两个集合的01个数相等,那就可以愉快的递归了。
如果不相等的话,注意到0~n-1这边肯定是0多一个,另一个集合是1多一个。
只要让递归后的段仍然连续即可。因此假设另一个集合的第一个1是0。就做完了。
应该是可以O(n log n) 的吧……但是我偷懒写了双log()

下次做期望题还是转成计数做吧😭我可能不是很能理解期望😭。

4.22

E. A Perfect Problem

考虑如何判定。发现将序列排序是很对的(因为子序列的无序性)。
然后只需要考虑每个前缀是否合法。
由此可以注意到,\(a_i\)这个前缀合法的条件之一是 \(a_i\) >= \(i\),并且\(a_i = i\)的时候前缀是全\(i\)串。
而且可以发现\(a_n\)\(n\)或者\(n+1\)。而且整个串满足的限制比前缀是要更严格的。
因此可以枚举最小值来进行dp。
复杂度可能比较大,过不了。注意到 \(i\) 只会在比较大的时候有解,具体的大概是 $ n - O(sqrt(n)) $ 左右。
即可通过。

4.23

agc069_d 的一些补充?
前面的转化可能会以后补。注意到判定一个序列是否可行的过程可以被看成构造一颗树,实时地维护其连通块的状况。
注意到菊花的情况是很优的。而感性理解可以发现,如果提前知道一整个序列,那么是可以在题解的计算过程合法的条件下,构造出解的。
因此只需要记录联通块的个数,而不是树的形态。
我说了个啥阿。

posted @ 2025-04-02 20:49  moonstaring  阅读(49)  评论(2)    收藏  举报