三年级小学生日记范文

也可以叫做补题日记(二)。

这个时候有人就要问了,“主播主播,你的《补题日记》《补题周记》《杂题不讲》《一些问题》《随便什么标题。》难道不更了吗?”

对此,我的回答是:

(当然,我現在只是在打比方)
正如沉睡的大腦從随機事件的記憶中拼接出虚幻之叙事一般
清醒的心智也必须從互連網的虚構查層中编織出愛
没有關於愛的表情包。
愛麗絲從夢中醒来只有爱是永無止鏡的。
事实:愛永無止息地預演著自身之消亡
亦施行著自身之解体。
(当然,我现在只是在打比方)
愛掏空了康復的所有可能性,一張通往健康終点的单程票。
爱的唯一熱情在於吞噬一切再次墜入爱河的可能性。
「愛-恢復」循環,亞里士多德的自我滋養:
対災異之奢欲,於其飄忽的党展中处如可見。驱力:对残酷的渴慕,
這豢養了每一種可憎的自我貶損、窘迫和愚蠢。
赢得了理所応當的軽蔑,每一個姿態就成了徹底燃滅的折损
沉溺在這種折磨中,唯有下跪、慟哭
泣血、哀求,「請饒恕我……」
哭声,呼喊声,纷扰的人影。
但愛是永無止境的,我愛你。

A - JamBrains(已过)

\(f(x,y)\) 表示从 \((x,y)\) 开始按下 \(u\) 次上键再按下 \(r\) 次右键后能到达的位置。容易发现若 \((x_a,y_a)\leq (x_b,y_b)\),则 \(f(x_a,y_a)\leq f(x_b,y_b)\)。此处二元组的偏序关系就是一个普通的定义。

根据这个可以得到一个推论,若 \(f(x,y)\geq (x,y)\),则 \(f(f(x,y))\geq f(x,y)\geq (x,y)\),也就是说 \(f^k(x,y)\geq (x,y)\)。即,若 \((x,y)\) 不在第一行且 \(f(x,y)\geq (x,y)\),那么 \((x,y)\) 永远不可能到达第一行。

还有一个推论是合法的位置是一段前缀,这是显然的。就是把这些位置铺平后的一段前缀。

根据如上推论,可以得到一个重要性质:一行的位置要么同时合法,要么同时不合法

怎么证明?图灵证明症。

11;;1;1;1;1;;1;1;1;11;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;11;1;1;1;1;;111;1;1;1;1;1;1;11;1;1;1;11;1;;1;11;1;1;1;1;1;1;1;1;1;1;11;1;1;;1;1;1;1;1;1;1;1;1;1;11;1;1;1;1;;1;1;1;1;1;1;;1;1;11;11;;1;1;1;1;1;1;1;1;;;1;1;1;1;1;1;;

其实这是摩斯电码。

考虑归纳,最开始前 \(u+1\) 行一定都是合法的。假设现在算到了第 \(i\) 行,前 \(i-1\) 均合法。现在,第 \(i\)\(1\sim x\) 这些位置合法,\(x+1\sim s_i\) 这些位置不合法。那么,\(f(i,x+1) \geq (i,x+1)\) 必定满足。容易发现,\(f(i,x) \geq f(i,x+1)-1\),即 \(f(i,x)\) 的最小值就是 \((i,x)\)。那么 \((i,x)\) 也是不合法的,与原假设矛盾。所以第 \(i\) 行必定全部同时合法或者全部同时不合法。然后归纳就对了,很显然。

现在,只需要找到第一个满足该行第一个位置不合法的行就行了。也就是说,找到第一个满足 \(f(x,1)\geq (x,1)\) 的行就行了。但是实际上,也存在这样一种情况:\((x,y)\) 不合法,但是 \(f(x,y)<(x,y)\)。不过这种情况并不会影响我们计算答案,具体留给读者思考。于是,直接找到第一个满足 \(r\geq \sum\limits_{j=i-u}^{i-1} s_j\) 的位置 \(i\)(还要满足 \(i\geq u+2\)),然后就做完了。带修是容易的。时间复杂度 \(O(2^{\log n}\log n)\)

G - Sorting Problem Again(已过)

找到第一段有序的前缀和有序的后缀,中间的东西肯定需要排序(除非原序列已经有序)。

但是有可能不止中间的东西需要排序。如果中间的最小值小于这段有序的前缀中的某个值,那么排序的区间还需要再扩大。发现因为这时这个前缀已经有序了,所以想找到该扩大到哪,只需要在原序列上二分就行了。画一下图就能理解。时间复杂度 \(O(n\log n)\)

我有一个神秘的 \(O(n\log^2 n)\) 做法,据 jr 说能过。

H - Farmer John's Favorite Function(已过)

如果 \(n>6\) 的话,那么 \(f(1)\)\(f(n)\) 的影响只会有 \(1\)。意思是,将 \(f(1)\) 赋值成 \(0\) 的话,算出来的 \(f(n)\) 最多只会少 \(1\)。这启示我们每六个连续的数分一块,对于每一块维护 \(x,y\),表示如果 \(f(l-1) < x\),则 \(f(r)=y\),否则 \(f(r)=y+1\)。发现 \(x,y\) 这样的二元组是可以在线段树 pushup 时合并的,所以直接做就可以做到单次修改+询问 \(O(\log n+\log\log V)\) 的时间复杂度。算 \(y\) 是简单的,算 \(x\) 直接倒推就行了。

当然,\(\sqrt n\) 分块的话不用线段树也能做到 \(O(q\sqrt n)\) 之类的时间复杂度吧。

F - Collecting Stamps 4

确定起始位置后,环变成序列。将某个数的第一个出现位置对应成 \(0\),第二个出现位置对应成 \(1\),那么这个序列能带来的不同的 card 就有 \(n^2-s\) 种,其中 \(s\) 是对应出的 \(01\) 串中 10 子序列的数量,证明显然。

每次交换都可以减少一个 10,并且可以证明这是最优的。所以,对于一个询问的 \(K\),答案就应该是 \(\min_{i=1}^n C_i + \max(0,X(K-(n^2-s_i)))\)。这个式子在算出 \(s_i\) 后是很好维护的。考虑当前起点相比上一个起点,增量是多少。这个增量可以树状数组来算,也很简单。所以 \(s\) 序列也可以 \(O(n\log n)\) 计算。于是这道题就做完了,时间复杂度 \(O(n\log n)\)

先写下代码再更新。

A. Anti-Plagiarism

题意:有一棵点数为 \(n\) 的树 \(T_1\),还有一棵点数为 \(m\) 的树 \(T_2\)(保证 \(m\leq n\))。需要回答 \(T_2\) 是否是 \(T_1\) 的一个连通子图(点可以任意标号)。

\(dp_{u,a,b}\) 表示,\(T_2\) 上的以点 \(u\) 为根的子树是否能和 \(T_1\) 上的以点 \(b\) 为根的子树匹配,其中认为 \(a\)\(b\)\(T_1\) 上的父节点,且 \(a,b\) 需要相邻。

大概就是这么个情况,我们需要将 \(u\) 的所有子节点和 \(b\) 的所有子节点匹配。当且仅当 \(u\) 的某个儿子的子树和 \(b\) 的某个儿子的子树能匹配时,这两个子节点才能作为子节点匹配。这里就会用到已转移过的 DP 值。

这显然是个二分图匹配,只用看 \(u\) 的子节点那边有没有满流就行了。可以跑 Dinic。虽然 DP 的状态数显然是 \(O(nm)\) 的,但是这里跑 Dinic 的点数可能非常多(如果 \(T_1\) 是个菊花就爆了)。所以这个朴素做法是过不去的。

不过发现,当 \(u\)\(b\) 固定时,\(a\) 的变化只会在二分图中删一个点再加一个点。那么现在我们就把 \(u\) 所有的子节点放在左边,把 \(b\) 所有的邻居放在右边(包括 \(a\)),然后跑二分图匹配。如果右边满流了,那么显然所有 \(a\) 的 DP 值都应该是 true
不对。嗯嗯??
完了。谔谔。
第三炸弹 · 败者食尘。让我们把时间回退到“所以这个朴素做法是过不去的。”

这个做法实在是太没有前途了!!!设 \(dp_{u,a,b}\) 表示,\(T_1\) 上的以点 \(u\) 为根的子树是否能和 \(T_2\) 上的以点 \(b\) 为根的子树匹配,其中认为 \(a\)\(b\)\(T_2\) 上的父节点,且 \(a,b\) 需要相邻。你肯定能发现这个状态改变了什么。虽然不太直观,但是这样做也是对的。而且更重要的是:我们可以优化了。

\(u\)\(b\) 固定时,\(a\) 的变化只会在二分图中删一个点再加一个点。那么现在我们就把 \(u\) 所有的子节点放在左边,把 \(b\) 的所有的邻居放在右边(包括 \(a\)),然后跑二分图匹配。如果右边满流了,那么删去任意一个 \(a\) 肯定还能满流,也就是说所有 \(a\) 的 DP 值都应该是 true。如果右边有至少两个点没匹配到,那么删去任意一个 \(a\) 肯定还是不能满流,也就是说所有 \(a\) 的 DP 值都应该是 false。现在只剩下一种情况了,然后参考一下题解吧,谔谔。

总而言之,如果现在固定了 \(u\),对于所有的 \(b\),总共需要跑的 Dinic 点数是 \(O(md_u+m)\) 的。然后就是,对于所有的 \(u\),需要跑的 Dinic 总点数就是 \(O(nm)\) 的。所以总时间复杂度 \(O(nm\sqrt {nm})\)。不对不对,分析得不好。

\(O(\sum\limits_{u\in T_1}\sum\limits_{v \in T_2} ((d_ud_v)\sqrt{d_u+d_v})\)

我只会分析 \(O(nm\sqrt n)\)。为什么是 \(O(nm\sqrt m)\)???会的人私信我。

QOJ#4489. Multiply 2 Divide 2

考虑一个比较一眼的贪心算法。从左往右扫,每次把当前这个数 \(\times 2\),直到它不小于前面那个数。
显然这个算法是错的。具体地,假设 \(a_i\) 已经大于 \(a_{i-1}\),那么我们可能有如下两种决策:

  • \(a_i\) 变小。这样可能能让后面的数乘的少一些,从而减少操作次数。
  • \(a_i\) 不变。可能比上一种情况更优。

一旦出现这样的情况,贪心算法的正确性就不能保证了。不过这给了我们一些启示:若 \(a_i\) 操作后已经大于 \(m\) 了(\(m\) 为值域上限),那么从 \(i+1\) 开始贪心就是对的。因为不可能出现刚刚那种后大于前的情况。

先不管这个结论。考虑朴素 DP。设 \(f_{i,j,k}\) 表示第 \(i\) 个数被变成 \(\lfloor \frac{a_i}{2^j}\rfloor2^k\)\(a_1\sim a_i\) 递增时所需的最小操作次数。这个状态显然是对的。转移就是找到一对 \((j',k')\),满足 \(\lfloor \frac{a_i}{2^j} \rfloor 2^k \leq \lfloor \frac{a_{i+1}}{2^{j'}} \rfloor 2^{k'}\),然后 \(f_{i+1,j',k'} = \min(f_{i+1,j',k'}+f_{i,j,k}+j'+k')\)

注意到若把所有 \((j,k)\) 二元组按 \(k-j\) 为第一关键字从小到大排序,按 \(j\) 为第二关键字从大到小排序,那么 \(\lfloor \frac{a_i}{2^j} \rfloor 2^k\) 必定不降。

证明(感谢 wxir,wxr_ 等人提供思路):把 \(a_i\) 看作一个二进制数,把除以 \(2^j\) 下取整看作右移 \(j\) 位,把乘以 \(2^k\) 看作左移 \(k\) 位,那么观察最高位的变化就能发现第一关键字的排序方式是对的。第二关键字的排序方式显然也是对的,因为右移越多就相当于舍弃了越多低位的值,即使高位的值一致。然后它就显然是对的了。

所以这个转移可以双指针做到均摊 \(O(1)\)。状态数是 \(O(n \times \log m \times \text{idk})\),其中 \(\text{idk}\) 意为 \(\text{I don't know}\)

不过根据刚才的性质,一旦 \(a_i>m\),我们就可以直接贪心了!也就是说,这里的第三维只有 \(O(\log m)\) 的级别。于是这一部分的复杂度就是 \(O(n\log^2m)\)

预处理贪心的结果也是简单的,设 \(g_{i,j}\) 表示第 \(i\) 个数是 \(\lfloor \frac{a_i}{2^j} \rfloor 2^x\) 时,让后面递增需要的最小操作次数。其中,\(x\) 的值是最小的满足 \(\lfloor \frac{a_i}{2^j} \rfloor 2^y > m\)\(y\) 的值。转移是简单的。

总而言之,反正就能做到总而言之的言而总之的 \(O(n\log^2 m)\) 的总而言之的言而总之的复杂度了,言而总之。

posted @ 2025-10-27 08:39  Just_int_mian  阅读(49)  评论(7)    收藏  举报