2023 联考日记

都一年了,怎么一点长进都没有啊。

10.9

NOIP 模拟一。

T3 和 T4 都是 le0n 的题,膜拜。

开题。一道题都不会。数论分块都快忘了。先码一个 nnn\sqrt{n} 的暴力。

然后再想,总得有点规律吧。打了个表,发现序列是形如 1,2,2,3,3,4,4,4,5,5,5,6,6,6,6,1,2,2,3,3,4,4,4,5,5,5,6,6,6,6,\cdots 这样的。那是不是有 6060 了。先写了。

然后就开始罚坐。在后面三个题之间反复横跳。2h 过去了,决定开 T3。

先写了 ai<La_i<L,得分 +10+10

然后想 aimodLa_i\bmod L 相等有什么性质。写了一个神秘 dp,调了一年,过了样例,得分 +15+15

发现 LaiL\mid a_i 可以直接套进来,得分 +10+10

再写一个爆搜,得分 +5+5

然后就不会了。继续罚坐,到结束 0.5h 前写了 T2 的 m=1m=1,得分 +5+5

估分 60+5+40+0=10560+5+40+0=105

实际 40+0+40+0=8040+0+40+0=80

T1 怎么 nnn\sqrt{n} 过不了 10510^5 啊。T2 没测 CE 了。

校内垫底。

T1

打表可以发现一些规律。观察到相同数值都连续排布,把每一种数值看成一块,不难通过累加求出每一块的左右端点 [l,r][l,r],只需要统计每个块内有多少个下标模 mmrr 的数即可。

时间复杂度 O(tn)\mathcal{O}(t\sqrt{n})

答案在 2652^{65} 量级,需要 __int128 才行。

T2

神秘结论题。

先考虑没有高级魔法的情况。把一个增量 (Δx,Δy)(\Delta x,\Delta y) 看成向量,对于所有点 (x0,y0)(x_0,y_0),令 S={(x,y)(x,y)=(x0+Δx,y0+Δy)}S=\{(x,y) \mid (x,y)=(x_0+\Delta x,y_0+\Delta y)\} 为它的基元。如果某个点的基元的所有点都在边界内,则要求这些点的异或和为 00结论不会证。

现在把高级魔法加进来。忽略超出边界的情况,可以通过若干次异或把它们分别变成向量 (2,0),(0,2),(2,1)(2,0),(0,2),(2,1),当成普通魔法处理就行了。

注意如果有 (2,0),(0,2)(2,0),(0,2) 要把 (1,0),(0,1)(1,0),(0,1) 删掉。因为要去掉不共线的向量,

枚举每一种选取魔法的子集即可。时间复杂度 O(nm2k)\mathcal{O}(nm2^k)

T3

考场上好像做出了出题人所有的提示性部分分,但是没拼起来。好像拼起来就是正解了。

考虑 ximodLx_i\bmod L 取到 kk 的方案数。令 bi=aimodLb_i=a_i\bmod L,就是

aiL+[k<bi]\left\lfloor\dfrac{a_i}{L}\right\rfloor+[k<b_i]

对于每一组互不相同的余数排列 (k1,k2,kn)(k_1,k_2,\cdots k_n) 答案为

(aiL+[ki<bi])\prod \left(\left\lfloor\dfrac{a_i}{L}\right\rfloor+[k_i<b_i]\right)

我们把这个东西用乘法分配律展开,钦定 tt 个位置上选择 [ki<bi][k_i<b_i],对这些位置按照 bib_i 排序,从小往大选,每次选择都会让后面的数少一种选择。这些位置上的答案就算出来了。而其他位置就有 ALtntA_{L-t}^{n-t} 种排列方法。

把所有数按照 bib_i 排序。令 f(i,j)f(i,j) 表示考虑前 ii 个数中钦定 jj 个的方案数之和。这里先不考虑其他位置。那么就有

f(i,j)=aiLf(i1,j)+(bi(j1))×f(i1,j1)f(i,j)=\left\lfloor\dfrac{a_i}{L}\right\rfloor f(i-1,j)+(b_i-(j-1))\times f(i-1,j-1)

最后答案就是

t=0nALtnt×f(n,t)\sum_{t=0}^n A_{L-t}^{n-t}\times f(n,t)

时间复杂度 O(n2)\mathcal{O}(n^2)

T4

巨大 dp。先放一放。

10.10

做题单。改题。

做了一车水得不能再水的题。还被 ARC A 卡了 30min。菜死了。

10.11

NOIP 模拟二。

先把所有题看了一遍。T3 暑假见过,是个二维区间 dp。15 min 过掉。

开 T1,想了一个构造方式,无果。已经 10:00 了,写个暴力先扔了。

开 T2,又做了 1h,还是不知道怎么办。

决定开摆。问 yyq 怎么做 T1,结果还把他叉了(

交了一份 T1 的暴力,可是连 T2 暴力都不会写。T4 连暴力分都没给。

还剩 40min,觉得还是应该写写 T2。经过 yyq 的又一番点拨大概会了,结束前 10min 写完了。

估分 20+100+100+0=22020+100+100+0=220

实际 20+90+56+0=16620+90+56+0=166

T2 没加快读 + 使用 map<pair<int, int>, int> 被卡常,T3 记忆化搜索被卡常。

记忆化搜索加点剪枝就过了。什么情况啊。

校内中下。

T1

手玩几组数据会发现同色边的数量相比异色边总是很小的。事实上,同色边最小的方案一定是满足条件的。

如果 uu 存在2\geq 2 个与 uu 同色的相邻节点,我们对 uu 的颜色取反,一定会让同色边数量减少。而合法的染色方案要求不存在这样的 uu,即同色边数量最小。

现在只需要构造一组同色边最小的方案。先钦定所有点为同一种颜色,把所有能够调整的点扔进一个队列里,调整完再考虑其相邻点,如果还能继续调整就扔进队列里。

时间复杂度 O(n+m)\mathcal{O}(n+m)

T2

原题是 P6678。

容易发现每一列的两个元素是绑定的,旋转只可能改变它们的上下关系。

考虑初始时的一列 (a,b)(a,b),如果结束状态时变为了 (b,a)(b,a),只能通过旋转奇数次做到,反之就只能通过旋转偶数次做到。到这里就可以判断无解了。

现在计算最小旋转次数。将结束状态标号为 1n1\sim n,能对应得到初始状态为 nn 的一个排列。我们可以通过交换相邻两项使得其有序。而这就是逆序对数。

时间复杂度 O(nlogn)\mathcal{O}(n\log n)

T3

原题是 CF1198D。

对于一个 H×WH\times W 的矩形,我们一定可以通过枚举一条切割线,将矩形切割成两部分分别处理。

不妨设 WHW\geq H,那么覆盖矩形的代价不超过 WW。如果每一条竖线都会穿过一个 T 组成的连通块,需要的代价至少是 WW,那么就可以选择不切割。

设计 dp 状态 f(a,b,c,d)f(a,b,c,d) 表示覆盖以 (a,b)(a,b) 为左下角 (c,d)(c,d) 为右上角的矩形的最小代价。暴力枚举分界线转移。

时间复杂度 O(n5)\mathcal{O}(n^5)

T4

先可以得到一个 30 分做法。设 f(u,i)f(u,i) 为以 uu 为根的子树中 uu 的连通块大小为 ii 时的答案。枚举 uu 的儿子 vv,对于边 (u,v)(u,v) 选不选分别转移即可。O(n2)\mathcal{O}(n^2)

正解是一个利用斯特林数拆幂的神秘做法。

xk=i=0k(xi)\{ki\}i!x^k=\sum_{i=0}^k \binom{x}{i}{k\brace i} i!

而斯特林数 \{ki\}\displaystyle {k\brace i}k<ik<i 时都为 00,所以上式的枚举上界会被 kk 限制。

考虑一个抽象的 dp 状态。设 f(u,j)f(u,j) 表示以 uu 为根的子树中,所有保留方案下,“不与 uu 连通的连通块大小 kk 次方之积乘上与 uu 连通的点中选出 jj 个的方案数”之和。这样以 uu 为根的实际答案可以写为

Cu=i=0k\{ki\}f(u,i)i!C_u=\sum_{i=0}^k{k\brace i}f(u,i)i!

现在就只需要求 f(u,i)f(u,i) 了,而这个就可以转移了。考虑树上背包,合并 uu 的子树中在 vv 之间子树的答案和 vv 子树答案,为了避免转移顺序的问题,用一个辅助数组 ff'

当钦定不断掉 (u,v)(u,v) 之间的边时,与 uu 连通的部分大小增加到 i+ji+j,这两块分别由 uuvv 贡献,则有

f(u,S)i+j=Sf(u,i)×f(v,j)f'(u,S)\sum_{i+j=S}f(u,i)\times f(v,j)

当钦定 (u,v)(u,v) 断掉时,与 uu 联通的部分大小不变,而每一种之前的方案都要乘上 vv 子树内的答案。从而有

f(u,i)=f(u,i)×Cvf'(u,i)=f(u,i)\times C_v

由于 kk 限制了转移上界,所以这就是一个有限制的树形背包,精细实现可以做到时间复杂度 O(nk)\mathcal{O}(nk)

10.12

做题单。

发现了一道甲虫的加强版。感觉很厉害啊。

10.13

NOIP 模拟三。

开 T1,发现答案由单调性。但是每次除的东西不一样啊,不会维护。写了暴力,先扔了。

开 T2,发现是之前做过的一道题的加强版。先打 5050 分暴力,9:30 的时候扔了。

开 T3,做到 10:00 连 O(p2)\mathcal{O}(p^2) 都不会,写了 O(p3)\mathcal{O}(p^3)

开 T4,想了一会儿猜了一手 rir_i 全相等的结论,但是样例太弱了,也不会写拍子,写掉就扔了。

还有 1.5h,还没拿到什么分。还是太菜了。

罚坐了一会儿,把几份暴力交了。还剩 1h 多的时候,决定冲一下 T1。结束 40min 前想了一个做法,写着写着觉得假了。硬着头皮冲出来了,结果跟大样例差一个数。???

估分 30+50+10+15=10530+50+10+15=105

实际 10+55+10+15=9010+55+10+15=90。T1 暴力 WA 了,T2 多冲过去一个点。

校内垫底。

T1

赛时连暴力分都没拼出来,太傻逼了。

考虑每一个攻击力带来的影响。所有 hih_i 都可以按照 hiAq\left\lceil\dfrac{h_i}{A_q}\right\rceil 的值分成长度为 AqA_q 的段,只需要算每一段内的 aia_i 总和。

维护一个树状数组,将 aia_ihih_i 为下标丢进去,这样就可以快速算整段的和了。对于剩下的散块,我们可以暴力维护。

实现细节上,因为 AiA_i 非严格递增,需要跳过 Ai=Ai1A_i=A_{i-1} 的情况。时间复杂度 O(Vlog2V)\mathcal{O}(V\log^2V)

T2

先考虑只有 0/10/1 的情况。我们把一条要求 (l,r,1)(l,r,1) 看成“区间覆盖为 11”,一条 (l,r,0)(l,r,0) 看成“区间查询是否有 00”。一个区间查询不合法,当且仅当这个区间全都被覆盖上了。

考虑删掉的要求是区间询问。如果不合法的区间询问大于 11 个,那么删掉哪个都没用。如果恰有一个不合法,那么只有删掉这一个是有用的,删其他合法的区间询问都没用。

考虑删掉的要求是区间覆盖。如果删掉 (li,ri,1)(l_i,r_i,1) 有用,必要条件[li,ri][l_i,r_i] 中有恰被覆盖了一次的位置,撤掉这次操作可以让这些位置变成 00

现在假设我们已经处理出了一个区间覆盖中只被覆盖一次的所有位置,我们考虑新加入的这些 00 能否使可能不合法的询问变得合法,发现如果存在一个可能不合法的询问区间没有跨过任何一个 00,那么删除该区间覆盖就是不合法的。

具体判断这件事情,找出 (li,ri,1)(l_i,r_i,1) 中所有只被覆盖了一次位置,这些位置中最左的应该小于等于不合法的询问区间中右端点的最小的右端点,最右的应该大于等于不合法的询问区间中左端点最大的左端点。

时间复杂度 O(nlogxi)\mathcal{O}(n\log x_i)。实现方式很抽象。

T3

转化完是一个神秘数论题,先放一放。

T4

通过一系列分析可以得到结论。如果至少有 44 种选出偶数个轨道使得 rir_i 之和为偶数的方案就可以,否则不行。背包一下就好了。O(ri)\mathcal{O}(\sum r_i)

一些特殊情况,当 nn 为奇数,或半径总和为奇数时不行。

10.14

NOIP 模拟四。

开题就先罚坐。T1 连暴力都写不了,T2 T3 只会低分暴力,T4 题都看不懂。

T1 一开始还读错题了。以为 S2n|S|\leq 2^n,推了推发现不对,定睛一看 S22n|S|\leq 2^{2^n}???woc

先做了会儿 T3,打了 n104n\leq 10^4k=1k=1 的暴力。试图把 k=1k=1 继续扩展,但是失败了。

前半场一直在神游,直到 10:00 才想起来给 T1 打个表看看规律。打了 n4n\leq 4经过 oeis 的点拨找到了规律,O(n)\mathcal{O}(n) 解决。

回去写了 T2 的暴力,就开始罚坐。

估分 100+20+30+0=150100+20+30+0=150

实际 100+20+15+0=135100+20+15+0=135。T3 n104n\leq 10^4 写挂了。不懂。

今天的题过于困难。所以没有补题。

10.15

休息日。打了 2h 羽毛球。

10.16

NOIP 模拟五。

开 T1,一眼二分答案。想到了相邻两个要删应该删更大的。但是不会处理新产生的相邻。想了 2h,心态直接炸了。打了个骗分东西就开摆了。暴力都没写。

T2 好抽象。直接跳了。

看了一眼 T3,特殊性质给了不少分。看了一眼 T4,感觉会做的分太少了。直接扔掉。

剩下 1h 冲 T1。感觉可以用一个双端队列处理,最后在栈顶和栈底来回弹就可以。但是一直在降智,以为很难写,最后 10min 才发现一点也不难。

估分 100+0+30+0=130100+0+30+0=130

实际 75+0+0+0=7575+0+0+0=75。后面骗分没骗到,罢了。

为什么这场考得这么降智啊。好难受啊。

希望正式赛不要出现这种低级错误,把很好写的东西放过去,影响心态甚至弃题弃赛。

T2 是个好题。

T1

考虑二分答案 xx。如果存在相邻的元素之和大于 xx,就要删掉一个,而删掉更大的一个是不劣的。

然而我们要处理新产生的相邻关系。考虑用一个栈,每次将 aia_i 与栈顶比较,将更大的删掉。

还要处理环状的相邻关系,可以把栈换成双端队列,最后在栈顶和栈底反复弹即可。

时间复杂度 O(nlogai)\mathcal{O}(n\log a_i)

T2

神秘 dp。

f(i,j,k)f(i,j,k) 为前 ii 个点形成了 jj 个连通块,且还缺 kk 个儿子的方案数。由于左右儿子有区分,我们要手动钦定儿子是左儿子还是右儿子。

钦定 i+1i+1 没有儿子。

  • i+1i+1 新建一棵树。f(i,j,k)f(i+1,j+1,k)f(i,j,k)\rightarrow f(i+1,j+1,k)
  • i+1i+1 接到之前某个缺儿子的点下面。k×f(i,j,k)f(i+1,j,k1)k\times f(i,j,k)\rightarrow f(i+1,j,k-1)

钦定 i+1i+1 只有一个儿子。我们需要钦定儿子的左右。同时由于要求每个点的儿子中存在一个编号大于它,所以不能将之前的某棵树接在它下面。

  • i+1i+1 新建一棵树。2×f(i,j,k)f(i+1,j+1,k+1)2\times f(i,j,k)\rightarrow f(i+1,j+1,k+1)
  • i+1i+1 接到之前某个缺儿子的点下面。2×k×f(i,j,k)f(i+1,j,k)2\times k\times f(i,j,k)\rightarrow f(i+1,j,k)

钦定 i+1i+1 有两个儿子。

  • i+1i+1 新建一棵树。f(i,j,k)f(i+1,j+1,k+2)f(i,j,k)\rightarrow f(i+1,j+1,k+2)
  • i+1i+1 接到之前某个缺儿子的点下面。k×f(i,j,k)f(i+1,j,k+1)k\times f(i,j,k)\rightarrow f(i+1,j,k+1)
  • 将之前某棵树接到 i+1i+1 下面。需要钦定接在左儿子上还是右儿子上。2×j×f(i,j,k)f(i+1,j,k+1)2\times j\times f(i,j,k)\rightarrow f(i+1,j,k+1)
  • 将之前某棵树接到 i+1i+1 下面,并把 i+1i+1 接到某个缺儿子的点下面。2×k×(j1)×f(i,j,k)f(i+1,j1,k)2\times k\times (j-1)\times f(i,j,k)\rightarrow f(i+1,j-1,k)j1j-1 是因为,已经把 i+1i+1 接到了一个缺儿子的节点下,那么这个节点所在的根就不能接在 i+1i+1 下了。

时间复杂度 O(n3)\mathcal{O}(n^3)

10.17

NOIP 模拟六。

T1 感觉要推式子,先扔了。开 T2,发现 g(x)g(x) 大概就是个 i\sum \lfloor\sqrt{i}\rfloor 状物。顿时感觉是个 ds。

先想了一阵 T2,不是很会快速维护修改。试图推 T1 的式子,推了一车感觉全都无限循环???试图写一个递归函数出来,一直在 RE。一怒之下把代码删了。/fn

这时候觉得自己又要急了。冷静一下,先去写 T2 可做的分。但是写到 11:15 都过不了大样例,仔细一想发现会爆 long long,大数据直接假了。

这下完蛋了。离结束还有 40min,我还一分没拿呢。一上午都在干什么???

无论如何也不能爆零啊。开始疯狂找分。T1 打表瞪规律,但是这也太抽象了。不管了,反正有分就行。

估分 30+0+0+0=3030+0+0+0=30

实际 30+0+0+0=3030+0+0+0=30

为什么联考状态这么差???前几场还能有 100+100+ 的估分,这周连不爆零都保证不了???

希望是在给 CSP 攒人品。

T1

可以发现 f(x,y)=f(kx,ky)f(x,y)=f(kx,ky),所以不妨只考虑 gcd(x,y)=1\gcd(x,y)=1 的情况。

同时发现 x+yx+y 在变化的过程中不变,而 x,yx,y 一奇一偶无论怎么变化都不会相等。所以只考虑 x,yx,y 都为奇数的情况。

不妨设 x>yx>y,则有 f(x,y)=f(2y,xy)+1=f(y,xy2)+1f(x,y)=f(2y,x-y)+1=f\left(y,\dfrac{x-y}{2}\right)+1。这样会让 x+yx+y 不断除以 22。从而只有当 x+y=2kx+y=2^k 时,f(x,y)=kf(x,y)=k,其余情况全都为 00

反过来考虑,对于每一个 kk,能使得 f(ai,aj)=kf(a_i,a_j)=ki,ji,j 只有 O(logn)\mathcal{O}(\log n) 组。我们把所有 f(ai,aj)=kf(a_i,a_j)=k 的点对 (i,j)(i,j) 拿出来,钦定 i<ji<j,看作二维平面上 (i,j)(i,j) 处有一个权值为 kk 的点。这样每次询问就是在查 x[l,r]x\in [l,r]y[l,r]y\in [l,r] 矩形中点权和。二维数点即可。

时间复杂度 O(nlogn)\mathcal{O}(n\log n)

T2

神秘题。

看懂了题面,实际上就是两种操作:区间 +1+1,查询区间一堆根号下取整状物的求和。

会发现其实只有 O(n)\mathcal{O}(\sqrt{n}) 次区间 +1+1 操作会让 ai\lfloor\sqrt{a_i}\rfloor 增加,并且相同的取值必然位于一个连续段内。

我们考虑把这些增量“攒在一起”更新。用线段树维护区间答案,区间加法标记,区间 ai\lfloor\sqrt{a_i}\rfloor 的总和,以及区间内下一次有数到达“下一段”还需要的最小增加次数。如果区间内有数到达下一段的增加次数为 00,就需要重构整棵子树。

根据势能分析,时间复杂度 O(nnlogn)\mathcal{O}(n\sqrt{n}\log n)

T3

反悔贪心。copy 一下机房同学的题解。

要选的肯定是一个前缀中所有的 00 和这之后的所有 11。令 ai=0a_i = 0 的数权值为正,ai=1a_i = 1 的数权值为负,不修改时答案即为 maxisumi+sum1n\max\limits_i {sum_i} + sum1_nsum1nsum1_n 为所有 ai=1a_i = 1 的数的 bib_i 之和,这是比较显然的。

现在考虑翻转操作,结论:当你翻转 kk 次时,相当于你可以多选 k1k-1 个区间,方法类似你可以从右往左,一次翻转到倒数第二个区间的右端点,就能翻出你想要的形式。

模拟费用流分析,转为反悔贪心,策略为:每次选当前序列的最大子段和加入答案,然后把这一段0101 反转,即区间乘 1-1,线段树维护即可。

细节很多就是了。写了好久。

10.18

没有考试。

做了 CSP-S 2019 江西卷。感觉自己没有任何思维,根本想不出来题。

sihan 讲课,听不懂一点。

10.19

NOIP 模拟七。

四个题都是我们学校的?

上来先给 T1 打了个表,感觉很有端倪,但是一眼看不出来比较好描述的规律。

先用了 1h 多把四个题都看了一遍,感觉 T2 好抽象。四个题都有 ϵ\epsilon 的分数可以写。

先没急着打暴力,想了一段时间的 T1,对着表真的看出点东西,感觉是一个类似数位 dp 的卡上界计数。试图写,但是冲不出来,11:00 觉得还是先把暴力打了。

写 T2 的暴力,以为爆搜就行,写着写着突然觉得不对,我好像不会判断是不是最优策略。寄。

最后就开始开摆罚坐。

模拟赛被喷烂了,不写了。直接 skip 这一天 /cy

10.20

CSP 前一天了。

做了 ARC121,开始打板子,把 Tarjan 都写了一遍。然后想起自己还不会 KMP,下午加急学,做了几个板子题。

下午听 x 讲神秘。加训 2h 羽毛球。

晚上打了 crt 和高斯消元。

10.21

CSP-J/S 2023。被创死了,AFO。

10.22 —— 10.29

没有联考。所以没有日记。

10.30

NOIP 模拟八。

先看了一遍题,感觉都很神秘。

开 T1,有 30pts30\text{pts} 的分组背包。想了 0.5h 贪心,总感觉是假的。写了背包就扔了。

开 T2,一开始还读错题了,以为是在前面加字符,后来仔细看了一眼下标才看出来。

写了全为 00 的以及 15pts15\text{pts} 暴力 KMP。估了一下 ki=1k_i=1 的情况,好像暴力 KMP 也能冲过去。过了大样例。

这时还有 2h 多点。开 T3,看了一会儿后想到了一个容斥,但是只会 O(n4)\mathcal{O}(n^4)。摁想了很长时间,到 10:40 的时候还是不会,就扔了。

T4 神秘 ds。写了 20pts20\text{pts} 暴力跑路了。

罚坐到结束。

估分 30+50+0+20=10030+50+0+20=100

实际 30+50+0+20=10030+50+0+20=100

好多人挂了神秘分数。

10.31

学了一些神秘 dp 优化。完全不懂。

11.1

NOIP 模拟九。

开考先神游了一段时间,四个题都看一遍。

开 T1,先写一个双哈希,想了一个 dp,但是不会处理相同颜色叠在一起的情况。感觉假了,1h 的时候扔了。

开 T2,没有什么思路。写了 30pts30\text{pts} 的暴力就跑了。

开 T3,没有什么思路。翻恰好 kk 次好难办啊。完全不懂,暴力都不会打。

开 T4,看了一会儿,有点像前两天做过的题,但是又不太像。

这下这下了。

回去开始拼暴力。写了 T1 的前四个包,发现哈希写得一言难尽,一车弱智错误。

试图写 T4 的暴力。写了 \O(nm\log n) 的极劣解。

最后 5min 乱冲 T3,直接排序后大减小。

估分 45+30+0+16=9145+30+0+16=91

实际 0+20+0+0=200+20+0+0=20。什么比东西。

打开一看,两道题写错文件读写。自动补全的插件帮我写出了 freopen("xxx.out", "r", stdout) 这种智能东西。然而本地注释掉了没细看。

T1

还没补。

T2

线段树分治板子。但是我之前没学过线段树分治,痛失大分。

将颜色放到时间轴上,认为颜色为 cc 的边在时间 [1,c1][1,c-1][c+1,k][c+1,k] 出现。每次就是查图是否连通。线段树分治即可。

时间复杂度 O(nlog2n)\mathcal{O}(n\log^2n)

T3

神秘贪心。

若存在 [ai,bi][a_i,b_i] 与区间 [aj,bj][a_j,b_j] 不交,那么交换 ai,aja_i,a_j 可以带来 2×(min{ai,bi}max{aj,bj})2\times (\min\{a_i,b_i\}-\max\{a_j,b_j\}) 的额外收益。

ci=min{ai,bi}c_i=\min\{a_i,b_i\}di=max{ai,bi}d_i=\max\{a_i,b_i\},将 cic_i 降序排序,did_i 升序排序,从头不断取,大减小即可。

如果这么取不够 kk 次操作,可以直接丢弃后面的操作。因为如果 [ai,bi][a_i,b_i][aj,bj][a_j,b_j] 有交,交换不会使答案变化。后面 kk 次可以交换来交换去。

这么做需要特判 n=2n=2

T4

用区间最大值位置把区间划分,会发现积水量相当于每个位置的前缀最大值减去当前位置高度。后缀同理。

用线段树维护区间最大值,区间最大值位置,区间最大值左侧前缀最大值减去每个位置高度之和,右侧后缀最大值减去每个位置高度之和。

合并两个区间时,大区间的右侧水体积相当于原来左区间的右侧水体积被右区间最大值“挡住”了一下,于是可以在左区间上使用类似楼房重建的做法二分到恰好被右区间挡住的位置,这个位置前采用原来的右侧水体积,这个位置后被右区间最大值覆盖。

时间复杂度 O(nlogn+mlog2n)\mathcal{O}(n\log n+m\log ^2n)

11.2

不知道在干什么。好像摆了一天。

11.3

NOIP 模拟十。

开 T1,这不是 SDOI 的某个题吗?一通乱码,发现过不了第一个小样例。到群里问了问样例对不对,发现做法假了。但是后面几个样例都过了。

仔细想想,感觉在图随机的情况下这么做正确的概率很大啊!自信一手,联考数据很水,直接冲。

开 T2,以为是一个 lxl 题。对着数据范围想了想,感觉能做的分挺多的。先放着。

开 T3,想了一会儿,得到了一个 dp 式子。O(n2)\mathcal{O}(n^2)。这就有 50pts50\text{pts} 了。写了个搜,手捏了几组拍了一下,感觉没什么问题。

看了一眼 T4,感觉很抽象。回去写 T2,拼了 30pts30\text{pts} 的暴力和 20pts20\text{pts} 的特殊性质。写了一段时间。

剩下不到 1h 做 T4。写了 n,m50n,m\leq 50。试图推 m=0m=0 的式子,但是失败了。

最后就开摆。

估分 [20,100]+50+50+10=[130,210][20,100]+50+50+10=[130,210]

实际 100+50+50+0=200100+50+50+0=200。T1 直接冲过去了,T4 好像数组开小了。

联考数据强度诚不欺我。

T1

类似 SDOI 的某道题。但是不完全一样。

仍然建出 ABA\rightarrow BBAB\rightarrow A 的最短路 DAG,就是 CC 走到 DAG 上某个点,走到某个后继,再走到 DD。就是一个拓扑排序做链上前缀 min\min 和后缀 min\min 状物。

时间复杂度 O(mlogm)\mathcal{O}(m\log m)

T2

厉害题。

包含 xx 的最大子段和可以拆成 l<xrl< x\leq r 最大的前缀和 SrS_r 减去最小的前缀和 SlS_l。同时,全局加 xx 相当于给 SiS_i 加上 i×xi\times x

考虑离线,维护出每次询问时全局的增量 kk,只需要查询 maxrx{Sr+kr}minl<x{Sl+kl}\max\limits_{r\geq x}\{S_r+kr\}-\min\limits_{l<x}\{S_l+kl\}

f(i)=Si+kif(i)=S_i+ki,将 k-k 看作斜率,ii 看作 xx 坐标,SiS_i 看作 yy 坐标,这就是一个最大化/最小化截距的问题。将所有点按照 xx 排序后加入,二分凸包切点即可。

11.4——11.12

传送到外地集训了。好像还惹得教练很不高兴 /jk

11.13

回学校联考了。

NOIP 模拟十六。

开 T1,这不是 CF708E 的严格弱化版吗?重新想了想细节,推了推式子,1h 过掉。算了一下空间,感觉不太稳啊,滚了一下数组。

看了一眼 T2,感觉很 2-SAT。花了 1h 左右想了一段时间后两题,感觉能拿的分都不太多。

开 T2,先往 2-SAT 上想了一阵,发现一开始的题意理解有问题。读对了题之后,发现 2-SAT 好像跑不了了。这下不会做了 /ll。

开 T3,写了一会儿发现又读错题了 /fn。然后就又不会做了,打了暴力就投降了。

开 T4,只会 n3n^3,但是不想写了。

基本上罚坐了一上午。

估分 100+0+16+0=116100+0+16+0=116

实际 100+0+16+0=116100+0+16+0=116

11.14

NOIP 模拟十七。

开 T1,摁想很久,得到了一个做法,写了之后发现假了。再仔细想想就不会做了。

开 T2,想了一段时间发现读错题了。回过神来,感觉特殊性质有得写,写完了发现没有对应的样例。手捏了几个小数据好像没什么问题。拼了一个爆搜胡上去。

开 T3,先想暴力状压,但是只会 2nn32^nn^3,好像连分都没有。试图想拆贡献,但是没想清楚。扔掉了。

开 T4,写了一个 n=1n=1。试图拼搜索,但是没写出来,遂摆。

中间出去跟 hjy 聊了很长时间的天(

估分 0+70+0+10=800+70+0+10=80

实际 0+25+0+10=350+25+0+10=35

后来问 shy 才发现 T2 特殊性质假了。

11.16

在家睡大觉。

完结撒花!!

赞赏