CSP2024考前集训记录

CSP2024考前集训记录

2024.9.2

高一学长供的题。

A题

image
image

开考5分钟想到枚举 a 后再枚举 d=gcd(b,c) 后转化为求 φ(b+cd),直接上线性筛。

然后时间复杂度 O(nn),瓶颈在枚举 b+c 的因数上。

于是后半个比赛全在想怎么优化,想到的包含:再套一层线性筛之类的……

结果题解是先枚举 d 再枚举 a,然后复杂度就变成 O(nlognloglogn) 了……

题解

img

B题

image
image

想到了可以通过修改唐链上的任意一点权值为极大值,然后定根从下往上逐步处理每个子树。

然后把点权换成边权,结果忘记还有 LCA 了……

于是后面想的贪心(按子树内不同权值从小到大排序再合并)也错了,导致暴力也是错的……

并且合并用的启发式合并也没学。

考下3分钟补完了。

题解

img

C题

image
image

刚开始没看懂题,以为一次询问只能选一次区间,于是预处理出来 dist(i,i+1)i=ll+k2dist(i,i+1),然后对于每一个询问就只需 ST表 得到区间最大值就可以了。

然后敲到一半临时发布样例解释,发现一次询问中可以选取选取多个区间,那么就得再套一个 dp。

但是多组询问是个大问题,刚开始想着从 1 开始 dp 之后差分,但是没想出来……

结果正解是整体二分套dp,不会)

题解

img

D题

image
image

赛时看到概率&期望就溜了。

赛后学长只讲了前半部分(30 pts),以龙数容斥可以做到 O(n3)

后面就要上狄利克雷后缀和了,还没学(

题解

img
img
img

总结

60+0+0+0=60

主要知识点漏洞:概率期望、整体二分、数学、容斥

2024.9.3

高二学长供的题。

A题

image
image

一道签到水题。

我的思路:把所有 OTA 缩成一个字符 #D 不动,其他变成 .

然后从后往前扫一遍,对于每一个 D 记录这个 D 后面 . 前面 # 的数量,然后把所有 D 的答案加起来。

但是自己不知道哪里写错了,大样例过了也只过了 Subtask1。

赛后看 std,std是反着做的,而且比我的也简短一些,他看成 OTAD,然后直接从前往后扫一遍就没了。

题解

img

B题

image
image

小学奥数题(确信)

首先研究了一下 n=1n=2 的情况,然后大胆猜想这个有递推关系:

S(i,j)n=i,m=j 时的答案,那么考虑 S(i,j1)S(i,j)

为了取最大值,这个 i 维超球和其他 j1i 维超球都要有一个 i1 维截球。

然后每个 i1 维球会把这个 i 维超球分成两个部分,于是增量是 S(i1,j1)

于是递推式:S(i,j)=S(i,j1)+S(i1,j1).

初始状态:S(1,i)=2i,S(i,0)=1.

注:赛时只有一个人切)

题解

img

C题

image
image

发了 spj,然后 spj 里面有 k 答案,直接拿下40分(

然后找规律,没看出来规律,归纳也没归纳出来。

题解

image
image

好多人都切了这道

D题

注:Subtask 1 的 n=1 删去,Subtask 2分值改为35分。

img
img

又是概率期望,啥思路都没有。

题解

img
img
img
img

总结

15+100+36+0=151

主要知识点漏洞:概率期望、构造(?)

2024.9.4

今天由同学讲计数题。

ATcoder ABC151E

题意

给定集合 A 与正整数 k,求:

TA|T|kmaxTminT

(k|A|1×105)

思路

直接处理极差不好做,于是想到拆开最大值和最小值。

集合的所有子集的某些信息的合并不好做,于是考虑从另一面来做,枚举信息的值再来找子集个数。

由于 maxTTA,于是想到枚举以 uA 为最大值的情况数。

然后对 A 排序,那么以第 i 大的数 ai 为最大值的集合另外 k1 个数只能在 1...i1 大的数中选,个数是 (i1k1),于是对答案的贡献是 ai(i1k1).

然后对最小值做同样操作然后相减就可以了。

CodeForces 559C

题意

给定一个大小为 n×m 的网格,每次可以从 (x,y) 走到 (x,y+1)(x+1,y),但有 k 个格子不能经过,也不能走到网格外,求从 (1,1) 走到 (n,m) 的路径总数。

(1n,m1×105,k2×103)

思路

记第 i 个障碍为 (xi,yi)

首先有很朴素的 dp:记 fi,j 是从 (1,1) 走到 (n,m) 的路径总数,那么 fi,j=fi1,j+fi,j1,时间复杂度 O(nm).

考虑优化,由于状态数就是 O(nm) 级的,于是必须从状态入手。

在没有障碍的情况下,从 (x1,y1)(x2,y2) 的路径数量是 (x2+y2x1y1x2x1),可以 O(logn) 算出。

而本题增加了障碍(关键格)的限制,于是想到通过某种手段只考虑关键格,跳过普通的格子。

于是设 fi 表示从 (1,1) 到第 i 个格子 (xi,yi) 的合法路径总数。

然后考虑转移,由于不经过障碍比较难计算,于是考虑从反面(经过障碍)计算。

假设现在在处理第 i 个障碍,于是枚举其它的所有障碍 j,如果障碍 j 在障碍 i 左上方(xjxi,yjyi),那么存在路径通过障碍 j.

为了保证方案不重复贡献,若一条路径第一次通过障碍 t,那么强制它在障碍 t 记录。

于是对于障碍 j,它到 (1,1),不经过其它障碍的路径数量是 fj;它到第 i 个障碍的路径数量是 (xi+yixjyjxixj),然后乘起来就是强制第一次经过障碍 j 的数量。

于是对于障碍 ifi 就是 (xi+yi2xi1) 减去所有在左上方的障碍 j 的贡献。

考虑答案,假如把终点 (n,m) 也视作障碍,那么答案就是它的 f 值。

CodeForces 1970E

题意

给定有 n+1 个点的无向图 G 与正整数 m,点 i 与 点 0 之间有 si 条短边与 li 条长边。一条途径是合法的,当且仅当这条途径从点 1 开始,有 2m 条边,且对于 i[1,m],第 2i1 条边与第 2i 条边至多有一条边是短边。求合法途径总数。

Easy version:0si,li1×103,1n1×102,1m1×103

Medium version:0si,li1×103,1n1×102,1m1×109

Hard version:0si,li1×103,1n1×105,1m1×109

思路

Easy Ver.

由于长度为 2i 的合法途径可以从长度为 2i2 的合法途径拓展得来,于是考虑 dp。

fi 是长度为 2i 的合法途径数量,于是发现 fi 的计算还需要知道长度为 2i2 的途径的最后一个点。

于是重设 fi,j 是长度为 2i,最后一个点为 j 的途径数量,于是 fi,j=j=1nfi1,j[sj(si+li)+ljsi]=j=1nfi1,j[(si+li)(sj+lj)lilj].

由于 fi 只和 fi1 有关系,于是可以滚动数组优化。

时间复杂度 O(n2m)

Medium Ver.

由于 m 大到爆炸,不能再递推了。

考虑递推式改为不递推的常用方法:把递推维度 m 去掉,然后剩下的部分写成向量,构造矩阵使得该矩阵与向量相乘后与递推式等价,然后在快速幂优化至 O(logm).

在本题中,令向量 xi 为:

[fi,1fi,2fi,3fi,n]

于是可以构造矩阵 F:(记 ei=si+li

[s1s1l1l1s1s2l1l2s1s3l1l3s1snl1lns2s1l2l1s2s2l2l2s2s3l2l3s2snl2lns3s1l3l1s3s2l3l2s3s3l3l3s3snl3lnsns1lnl1sns2lnl2sns3lnl3snsnlnln]

那么原递推式等价于 xi=Fxi1.

然后上矩阵加速就行。

时间复杂度 O(n3logm)

Hard Ver.

现在 n 太大了,于是单单矩阵就会爆空间,纯递推也不能接受。

于是考虑修改状态定义。

容易想到从长短路入手,但是由于增加的第 2i1 条边和第 2i2 条边有关联(点 j),仍然很难想。(当时卡在这里没做出来)

于是就要让新增加的边与前一条边没有除了点 0 之外的公共点。

注意到第 2i 条边到达点 u0 后,第 2i+1 条边一定回点 0

于是可以把第 2i 条边和第 2i+1 条边划分为一组,第 1 条边和第 2m 条边单独考虑即可。

那么第 2i 条边和第 2i1 条边只可能有公共点 0 了。

但是此时当前组前一条边能否选长边与前一组后一条边的类型有联系,于是要将上一组一组后一条选的边的类型记录下来。

fi,0/1 表示第 2i 条边可以随便走/只能走短边,于是:

fi,0=fi1,0j=1n(sj+lj)sj+fi1,1j=1nsjsjfi,1=fi1,0j=1n(sj+lj)lj+fi1,1j=1nsjlj

接下来考虑构造矩阵。令 xi 为:

[fi,0fi,1]

F 为:

[j=1n(sj+lj)sjj=1nsjsjj=1n(sj+lj)ljj=1nsjlj]

于是 xi=Fxi1 与原递推式等价。

边界条件: f1 为:

[s1l1]

记录答案时,枚举最后停留的木屋,方案数之和即为答案。

时间复杂度 O(n+logm)

CodeForces 1245F

题意

T 次询问,每次给定 l,r,求 i=lrj=lr[i+j=i xor j].

(1T100,0lr1×109)

思路

首先由二维前缀和,若设 f(x,y)=i=0xj=0y[i+j=i xor j],那么 i=lrj=lr[i+j=i xor j]=f(r,r)f(l1,r)f(r,l1)+f(l1,l1).

又因为异或是不进位加法,于是 f(x,y)=i=0xj=0y[i and j=0].

位运算不好处理,考虑二进制拆位。然后就可以数位dp。

dpt,0/1,0/1 表示 前 ti 无/有限制,j 无/有限制的方案数。

其中有限制的意思是高位与最大值相同。

Luogu P2606

题意

一个排列 {pn} 是合法的,当且仅当对于所有 iN[2,n]pi>pi2.

求长度为 n 的合法排列数量,答案对 m 取模。

(1n1×106,1m1×109)

思路

条件的 ii2 距离很大,不好处理,考虑构造一一映射。

由于二元关系相当于图中的一条边,于是构造图 G,使得 (i,i2) 有边当且仅当 pi>pi2.

于是会发现图 G 是一棵以 1 为根完全二叉树。

并且若将 pi 看作点 i 的权,那么图 G 是一个小根堆。

容易发现一个合法序列与一个小根堆一一对应。

接下来只需要求合法点权分配方案数即可。

考虑子树 u,根强制最小,剩下由儿子子树自由分配(因为左右子树互不影响)即可。

那么记子树 u 大小为 su,左儿子为 2u,右儿子为 2u+1,子树 u 的分配方案是 fu.

于是 fu=(su1s2u)f2uf2u+1.

最终答案是 f1.

然后由于 m 不确定,有可能在组合数 (su1s2u) 中出现 su1m 的情况,需要用 Lucas 定理。

Luogu P7140

题意

给定长度为 n 的序列 {an},询问 q 次,每次给定 d,p1,p2,求:(保证所有下标不超过 n

i=0d1j=0d1k=0d1ap1+id+jap2+jd+k

(1n,q,ai2×105)

思路

考虑化简式子。

首先 ap1+id+jk 没有关系,于是原式等于:

i=0d1j=0d1ap1+id+jk=0d1ap2+jd+k

然后最里层的求和就是一个连续的区间了,于是设 Sn=i=1nai,那么进一步等于:

i=0d1j=0d1ap1+id+j(Sp2+(j+1)d1Sp2+jd1)

然后括号里面的东西和 i 也没关系,于是也可以提出来:

j=0d1(Sp2+(j+1)d1Sp2+jd1)i=0d1ap1+id+j

里层的东西直接前缀和优化空间复杂度是 O(n2) 的,会 MLE,即使根号分治时间复杂度也是 O(qdn),过不去。

注意到下标不超过 n,于是就有:

p1+(d1)d+(d1)d2ndn

那么根号分治的暴力枚举部分就可以不用了,直接前缀和复杂度是 O(qn).

于是设 Td(n)=i=0j1ianid,于是式子变成:

j=0d1(Sp2+(j+1)d1Sp2+jd1)(Td(p1+(d1)d+j)Td(p1+j)+ap1+j)

(由于 p1d+j 有可能小于 0,所以只能到 p1+j

然后对于每一次询问,枚举 j 即可。

Luogu P5363

题意

给定 nm。有一个 1×n 的棋盘,上面恰有 m 颗棋子,任两颗棋子不在同一个格子内。

A 和 B 轮流对棋盘进行操作。A 先手,一次操作可以将一颗棋子向左移动任意格,但不得越过任何棋子且不得越出棋盘。当一方无法做出操作时,另一方赢。

求使 A 有必胜策略的初始状态数。

(1n1.5×105,1m50)

思路

博弈论 + 计数,考虑将其一一映射到另外的博弈论模型。

考虑操作一次带来的影响。若将棋子 i 向左移动了 x 格,那么它到前面一颗棋子的距离减少了 x,到后面一颗棋子的距离增加了 x

那么对于 i[1,m+1]N,设 ai 是第 i 颗棋子到第 i1 颗棋子之间的空白格子数量(其中第 0 颗棋子在棋盘左侧外,第 m+1 颗棋子在棋盘右侧外),

于是初始时满足 aiN,i=1m+1ai=nm,移动棋子 i 向左 x 格等价于将 ai 减去 x,将 ai+1 加上 x

容易发现这样的序列 {am} 与棋盘初始状态一一对应。

(然后就不会了,不知道如何判断是否有必胜策略)

同学说这是阶梯 Nim 博弈,有必胜策略当且仅当 xor2(mi)(mi)mai0.

像背包,于是考虑dp。

首先将 a1,a2,,am1,am 重标号为 am,am1,,a2,a1.

位运算,考虑拆位。

拆位完后,长得很像背包,于是考虑dp。

fd,r 表示考虑到了 d 位,还剩 r 个格子的分案数,于是:

fd,r=2kfd+1,r+2dk(tk)

其中,t=m+12.

最终答案即枚举剩下格子数,将其插在 m+1t 个剩余位置即可。

Luogu P4931

题意

询问 T 次,每次询问给定 n,定义一个长度为 2n 的排列 {pn} 的特征值为:(记 bii{pn} 中的位置) (下标从 1 开始)

i=1n[b2i1n] xor [b2in]

对于 k=0,1,2,...n,求出特征值为 k 的排列 pn 数量。

(1T1×103,1n1×103)

思路

同学讲了不会,自己想了半天想不出来。😃

2024.9.5

正睿 NOIP 模拟赛

A题

img

img

第一眼看到所有子串之和都是质数就感觉不太可能存在,于是马上手玩了一下 n=4,发现确实不行,然后就尝试证 n 较大的时候不成立:

S(l,r)=i=lrai.

n>3,则 S(2,n)6,于是 a1=2.

紧接着显然有 a22,于是 2a2.

然后有 a3=2.

考虑 a4,若 a4=2,于是 S(3,4)=4P,矛盾。

a42,于是 2a4,那么 2|S(2,4),矛盾。

于是 n4 就不成立了。

接着对 n=1,2,3 分类讨论一下就行。

题解

img

B题

img

img

(1n105)

首先有一个很显然的dp:按 x 排序,记 fi 是第 i 个白细胞存活轮数,于是:

fi=1+max1ji1yjyizjzifj

然后看这个方程长得就很能 CDQ,然后就打了个板子上去。

然后清空写挂了,调了两个半小时没调出来:)

最后只交了个 O(n2) 暴力dp上去。

题解

img

C题

img

img

(0n4096n2 的幂次)

看了一眼想到以人为叶子向上建博弈树,然后就去写 T2 了。

赛后想了一下,可以向上dp。

然后插入可以用线段树分治 (?),但是没有结合律比较难弄。

然后看题解,只需要预处理一些长为 2k 的答案就行了xd

题解

img

D题

img

img

(2n20,1mn(n1)2)

看了一眼没思路就溜了。

题解看到状压dp就看不懂了。

题解

img

总结

100+70+0+0=170

主要问题:计数、dp

2024.9.6

正睿 NOIP 模拟赛

A题

img

img

看到这种能从一个数 u 在集合中推出另一个数 v 在集合中立马想到建边 (u,v)

刚开始以为条件 3 的边会很多,结果打了个表发现并没有很多。

题解

img

B题

( 空间限制 64 MB )

img
img

一眼数位dp,但是遇到 ? 就要处理一下 limit

然而想了半天感觉很抽象,想不出来,尤其是回文串的处理。

赛后看榜单发现想的只是 60 分做法,100 分做法要用字符串匹配。

题解

img

C题

img

img

没看到 “每条边至多在一个简单环” 这个条件,直接开溜了。

然后看了题解,发现是板子题。(但是这些板子都不会)

(不过教练只造了基环树。。。)

题解

img

img

D题

img

img

看了一眼,口糊了一个 O(n4) 的做法,然后感觉太难写了,打了个模拟退火骗了个60分。

题解

img

img

总结

100+0+0+60=160

2024.9.7

CSP-S模拟赛(?)

A题

img
img

首先想到了朴素dp,设 fi,j 表示考虑完前 i 只牛后,最后一组之和为 j 的方案数,于是:

fi,j=fi1,jai(jai)fi,ai=fi1,jai+j0fi1,j

i 这一维可以压掉,然后就不会了。

然后调暴力没调出来,但是发现这个就相当于将 dp 数组整体向右移动 ai 格,然后在 ai 处增加 j0fi1,j

但是整体向右移动不好维护,于是变成 “视角” 向左移动。

于是就只需要大值域、单点修、区间查了,于是直接上动态开点线段树就没了。

题解

img

B题

img
img

想了挺久,发现自己只会 O(n2) 做法,加上预处理只有 70 分。

有人在赛场上说 BSGS,可惜我不会(

想起同学说有些神奇的强制在线可以反推答案,试着套了上去结果对了。

可惜有人在赛场上喊这个做法-_-

题解

img

C题

img
img

赛场在想枚举/二分极差,卡在字母种类多而想不出来,于是打了 O(n2) 暴力+模拟退火水了50分跑路了。

赛后同学说可以枚举字母就秒了。

直接枚举字母对 (x,y),然后把 x 看成 1y 看成 1,直接做最大字段和就没了-_-

时间复杂度 O(262n).

正解是 O(26n) 的,但没看太懂。

题解

img

D题

img

看懂了题意,也仅仅是看懂了题意了。

题解

img

总结

100+100+50=250

主要问题:计数、极差处理方法

2024.9.9

梦熊十三连测第八场

A题

img
img

可以想到每一天进的球数对 3 的余数有循环 2,1,2,1,2,1,

然后把对 [l,r] 的询问拆成 [0,l)[0,r] 两部分再相减。

钦定第 0 天进了 1 个球,于是 [0,x]x+1 天一共进了 2x+11 个球。

然后把除以 3 下取整丢失的部分丢掉,再除以 3 就可以了。

题解

img

B题

img
img
首先看到排列,可以想到若对于 i[1,m]N,连接 ibi,那么构造出来的图 G 是一堆环,且若给定一个 {an},回到原来的状态所需的步数是:(记 i 所在的环大小是 si

lcmi=1nsai

不会期望dp,于是决定从定义下手,记上式(即 {an} 回到原来的状态所需的步数)为 f({an}),那么答案是:

{an}f(an)mn

注意到多次选 si 相同的 i 与选一个对答案的贡献是一样的,于是只需要记录每种 si 有多少 i 即可。

考虑 si 的种类数,由于 si 的点数不少于 si,于是若 si 种类多于 13,则:

sii=114i=105>100m

矛盾,于是 si 种类至多 13

直接枚举所有 {an} 不现实,于是考虑对其分类。

由于每个 {an} 对答案的贡献为 lcmi=1nsai,于是考虑对 lcmi=1nsai 分类。

但是它有可能很大,不能直接放进状态内,而我们只需要知道 {an} 选的数的 si 就可以知道 lcmi=1nsai 了。

si 的种类很少,于是直接把 si 选不选放进状态内。

f(S) 表示 {an} 只选了 S 中的 si 的方案数,那么若记满足 siSiR(S),于是 f(S)=R(S)n

但是这个定义有一些问题,例如令 s1=1s2=s3=2n=3,那么 1,1,1 这个序列会在 f({1})f({1,2}) 被重复统计。

于是重新设计状态,设 f(S) 表示 {an} 恰好选了 S 中的 si 的方案数。

考虑不合法情形的特征,容易发现这样的情形只选的 S 的一部分,即为 S 的真子集。

于是

f(S)=R(S)nTSf(T)

时间复杂度 O(3k),其中 ksi 的种类数。

爆标了哈哈

题解

img

C题

img
img

首先想到了一个性质,对于任意 i<j,可以令 ai xor ajaj.

然后听说异或线性基可以 O(logV) 求一堆数可以异或起来的最小值、最大值等,于是可以直接在原序列上跑 LIS 就行。

由于新序列不确定,而贪心地想,前面的数越小越好(因为对后面没有影响),于是设 fi,j 为考虑了前 i 个数,递增序列长度为 j,结尾最小的数。

但我不会异或线性基 xd

题解

img
img

D题

img
img

想到了dp,但想不清楚具体怎么写哈哈

打了个模拟退火跑路了xd

赛后才发现输出0有100分

题解

img

总结

100+100+0+100=300

主要知识点漏洞:异或线性基

2024.9.10

nslf训练题(?)

A题

img
img
img
img

k 的范围就可以上状压dp,设 fu,S 为在最后一点在 u,走过了 S 的最短距离即可。

但是我在外面定义了 n,mmain 里面又定义了一遍 n,m,然后外面的 dijkstra 用的外面的 n,m=0,调了两个半小时没调出来心态爆炸了

题解

视频题解,绷不住了

B题

img
img

首先反转一个子串,左右两边是不变的,于是可以用线段树维护哈希并线段树上二分出公共最长前后缀,于是有无解只需要判断中间的串反转之后时候可以变成 T 的对应部分即可,并最短的反转
长度即中间串的长度。

然后两侧的部分也有部分可以反转,而由于这部分 ST 相同,那么这可以在 T 上二分。

总复杂度 O(nlogn),但我赛后写被卡了:)

题解

img

C题

img
img

神奇的贪心题,不会

题解

img

D题

img
img

图论计数题,不会

题解

img

2024.9.11

某个人供题。

今天打的心态爆炸。

但是题目背景去掉就是一套好题。

A题

img
img

首先第一问直接模 9 就没了,因为最后一定是个位数。

然后第二问想了贪心,结果假了。

没想到正解是个爆搜。

题解

img
img
img

B题

img
img

会 SubTask1、2、3,打到这道题感觉被题目背景嘲讽了,不想写。

板子是 P5540。

题解

img
img
img
img
img

C题

img
img

一道看起来很数学的题。

一眼数据点分治,t=1,2 是废话。

考虑 t=3,由于 m 很小,于是只要能对任意 u,v,快速地求出 N(u)N(v) 有多少点即可。(但是我不会哈哈)

然后 t=4 就只需要知道有多少边就行。

(然后正解和我的完全不一样,绷)

(据说 t=3 可以直接bitset暴力搞,但我试了,T了)

(学长说了个 t=4 我的做法的解决方案,但我看不懂)

img

题解

img
img
img
img

D题

img
img

只会暴力dp。

题解

img
img
img
img

2024.9.12

同学讲字符串专题。

板子都没打完,后面补。

2024.9.13

正睿场。

A题

img
img

首先能发现题目相当于一直往某个数的小数部分末尾加数,初始为 0,问最后的最大值。

具体地,记第 iai,那么选择它相当于在数字末尾加 9ai.

然后贪心想假了,只考虑了最小的数字,选完了就把后面全选上。

然后大样例全过了……最后 80 分。

题解

img

B题

img
img

很像省选集训的 D3T1,然后想到了换根+树套树写法,但是不会写。(但是集训那题的正解是点分治,不过我也不会)

然后这道题想到了按权值从大到小排然后扫描,但是后面不会了。

考后才知道直接动态维护直径就没了。

题解

img

C题

img
img

看到这种区间操作就想着改成单点操作,然后就不会了。

然后看到这种绝对值+符号反转想到了把它拆成 |AiAi1||Ai+Ai1| 两种状态,然后就不会了。

考后教练说若非 AB,可以连 AB

但是我还是不清楚怎么处理区间操作。

题解

img

D题

img
img

想到了考虑每个元素作为贡献的区间数量,然后跑一个单调栈就行。

题解

img

2024.9.14

A题

img
img

看这神奇的式子形式感觉比较难搞,尝试定序把最大最小值拆开之后还是不好做,遂放弃打暴力跑路。

题解

img

B题

img
img

首先有递推式:2n1n

然后看着能转成矩阵乘法,于是直接上矩阵快速幂。

题解

img

C题

img
img

最小差不好维护,于是考虑枚举作为贡献的两个人,排个序做个dp,是 O(n3k) 的。

结果正解是枚举最小差 1...1×105k1,然后 O(nk) 做dp……

题解

img

D题

img
img

带修 k 维区间最大曼哈顿距离板题。

但是考试的时候没看到最大值,寄了。

题解

img

2024.9.16

梦熊场。

A题

img
img

由于颜色数量是可重复贡献信息,而答案满足单调性,于是考虑ST表+二分。

然后可以用bitset优化。

时间复杂度 O(n2lognw).

题解

img

B题

img
img

没有非降就停止操作的条件是水题,可惜有这个条件。

然后想了半天正难则反,没想出来。

又想了半天,越想越感觉不可做,最后爆搜都不会了。

题解

img

C题

img
img

可以想到枚举峰,然后前面求逆序对后面求顺序对就行。

然后赛时竟然认为这个是错的。

题解

img

D题

img
img

赛时推了个性质:可以将整个网格图分成一堆 N×M 的矩阵,然后大网格图的染色只依赖于一个小矩阵的颜色与相邻两个小矩阵颜色的差异。

然后不会了,想的爆搜也是挂的。

题解

img
img

2024.9.18

初二同学供题。

A题

img
img

刚开始感觉没法做,后来发现即使选最边上的也可以覆盖略多于 14 面积,于是直接分成 9 块,
然后出题人说 T400,于是直接爆搜就没了。

题解

img

B题

img
img

首先有 n 分块 60 分做法

然后想了好久

后面发现第一次查 1500 个,第二次查 1499 个,一直下去,每次卡着上界查就没了。

题解

img

C题

img
img

想到了第二乐章至多选择两个片段,然后想了半天没啥思路就打暴力了,然后打炸了

题解

img

D题

img
img

一眼最大子段和,感觉能树套树,但是不会。

打暴力,然后合并区间写挂了,寄。

题解

img

2024.9.19

正睿场。

A题

img
img

分数输出卡死了二分,然后只会打暴力。

然后暴力也莫名奇妙挂了。

题解

img

B题

img
img

试图按 r 从小往大加边,然后发现由于 p 的条件不好做,于是不会了。

题解

img

C题

img
img

尝试了dp,然后想不清楚。

题解

img

D题

img
img

想了很久可以单栈排序的序列的特点,没想出来,跳了。

题解

img
img
img

2024.9.23

NFLS场

A题

img
img

直接暴力就没了,然后要特判 k=0k=1.

B题

img
img

首先可以记 C=BA,于是可以对 C 的一行或一列加一或减一,目标是让 C 全零。

然后设 xi 为第 i 行被加上的数,yi 为第 i 列减去的数。

那么有解的充要条件是对于所有 1in,1jm,有 xiyj=Ci,j.

然后发现这东西是差分约束,而且是等式,于是随便令一个是 0,然后按边权随便跑跑,如果跑到一半矛盾了就无解。

然后考虑最优值,发现如果将所有 xi,yi 加上同一个数仍然是解,并且由于这个图是 Kn+m,2,实际上所有的解只能通过这样的方式生成。

于是只需要求 i=1n|xic|+i=1m|yic| 最小值即可。

直接求中位数即可。

题解

img

C题

img
img

与答案有关的 f(i,j) 就有 n2 个,而且还要和 b 比较,感觉很不可做,打个 O(n2) 暴力就溜了.

然后正解就只是转化了一下用bitset优化。

题解

img

D题

img
img

正解和暴力都不会,溜了。

题解

img

2024.9.24

NFLS场

A题

img
img

首先拿并查集把所有块分类,设第 i 块下落了 hi 格。

然后对于每一列,考虑相邻两块 x,yxy 上面.

设第 x 块最底部的高度为 b,第 y 块最顶部的高度为 t,于是 bhx+1>thy+1.

然后发现这个东西很像差分约束,于是移项+取等为 hxhybt+1,然后建边:xy,边权为 bt+1.

由于边权均为正,所以可以只跑dijkstra.

题解

img

B题

img
img

首先可以想到把 l,r 都除以 k,于是只需要考虑互质即可。

然后由于脑力被A题榨干了,连正难则反都没想到,后面经典的容斥也没想到。

考后发现套路很经典。

题解

img

C题

img
img

同B.

题解

img

D题

img

同B.

题解

img

Luogu P2042

题意

写一个数据结构,支持插入、删除、区间修改为一个值、区间翻转、区间求和、求全局最大子段和。

思路

平衡树板题,但是超级难写。

重点是走到更深的点之前一定要pushdown。(就这个错误查了大半天)

然后 O(logn) 插入超级容易T,卡了很久常。

然后先 find(r+1)find(l-1) 可以省一个 splay(L),改了这个之后就可以开 C++17 卡过去。

写了421行,7.3kb。

2024.9.25

正睿场

A题

img
img

看着像AC自动机,但是直接建空间会爆炸,于是不会了。

没想到是类似折半搜索的方式。

题解

img

B题

img
img

首先在DAG上有dp,设 dp[u][0/1] 为从 u 点开始 Alice/Bob 先手最后的值,于是

dp[u][0]=maxuvdp[v][1]dp[v][1]=minuvdp[v][0]

然后考虑扩展到环,结果写了dijkstra、SPFA、分层图都挂了,发现最小值不好处理,然后没时间了。

结果考后同学说是从大往小跑就行。

题解

img

C题

img
img

神奇卡空间题,得从空间较小的算法入手。

首先全局第 k 小有个正常做法,对值域二分,可以做到空间 O(1),时间 O(nlogV).

然而这个做法在这道题相当于 O(64n),只能拿到40分。

然而我们发现有很多空间被浪费了,check 都只用了一个变量,于是可以进行 65536 分(不分更多是因为空间开不下)。具体地,第一次将值域分为 65536 份,找到第 k 小所在的地方,继续分下去。

这样就成功地做到了 O(4n)

当时我只想这能过 75 分,但是它却过了 80 分。

但是别人拿这个过了 100 分,甚至跑得飞快。

卡了好久的常还没卡过去,最后发现它多跑了100毫秒。

题解

img
img
img

D题

img
img

看着像点分治,可惜我不会,打了个 O(nqlogq) 暴力溜了。

题解

img

2024.9.27

A题

img
img

首先答案是 lcmi=1nai2.

直接求最小公倍数会爆,然后发现:

lcmi=1nai=anlcmi=1n1aigcd(lcmi=1n1ai,an)

然后发现最小公约数的最大公倍数是最大公倍数的最小公约数,于是能变成:

anlcmi=1n1ailcmi=1n1gcd(ai,an)

于是只需要令 ailcmj=1i1gcd(aj,ai)ai 即可,答案即为 i=1nai2,复杂度 O(n2logV),多了个 log,成功被卡回暴力分。

结果正解是把计算过程中的 lcm 也用变化后的 ai 表示。

题解

img

B题

img
img

打了个表,发现只需要把由 Σ 中的字符组成的所有三位字符串按字典序排序后首尾相接就行了。

题解

img

C题

img
img

赛时没看题,赛后看题解看不懂怎么处理深度相同的特殊点

题解

img

D题

img
img

没看题。

题解

img

2024.9.30

A题

img
img

第一问一眼左右横跳。

第二问打了个表,发现为偶数时答案为 (n2)!,为奇数时答案为 (n12)!.

题解

img

B题

img
img

AB 直接跑dijkstra就行(但我忘记加第一天的 B 挂了)

然后 AB 不会。

题解

img

C题

img
img

一眼讨论 t 有没有过回文串中点,但是被B磨了太久没写。

题解

img
img

D题

img
img

题解

img
img

2024.10.6

A题

img
img

首先有显然的 O(n3) 做法:记录能否到达思维能力 +i,代码能力 +j 的题,对于每一道题直接转移就行。

然后这个东西过了100分。

题解

img

B题

img
img

感觉感觉要尽可能让他们都吃到伤害,然后打了个从小往大减的O(n^2) 假暴力,拿了60pts.

题解

img

C题

img
img

感觉可以拆成两个序列,但是不会dp。

题解

img

D题

img
img

不会概率。

题解

img

2024.10.8

A题

img
img

尝试推式子,无果。

然后打了个表发现是恒等式。

题解

img

B题

img
img

打表观察边权/路径/答案特点均无果,于是只能打个 50pts 跑路。

赛后发现可以贪心地在边权相同的情况下跳到编号最小的点,然后直接跑dijkstra就行。

题解

img

C题

img
img

不会博弈论,把题面复制上去拿了 20 pts.

题解

img

D题

img
img

直接扫描线可以 O(n2m)

然后欧几里得距离感觉很不好做,加上没时间就 60pts 跑路了。

题解

img

2024.10.12

A题

img
img

直接优先队列模拟就没了。

题解

img

B题

img
img

赛时没想到啥好的做法,上了个点分治。

结果递归的时候求出重心就直接递归儿子了,成功变 75 分。

题解

img

C题

img
img

直接构造一条链增长率是线性的,只能拿到 20 分。

然后发现半径为 2 的菊花增长率是平方的,但是不够灵活。

然后发现把这两个东西拼起来就行了。

题解

img

D题

img
img

只需要 O(logn) 地知道每条边只出现在一个简单环的概率就行了。

而这个东西当且仅当没有其他非树边的对应路径与其有边集相交。

但是我只会做点集相交。

把点 LCA 替换成边 LCA 之后会有贡献重复,感觉要分类讨论,还要处理除以 0 的问题,但是不会。

题解

img

2024.10.14

A题

img
img

题解

怎么又是视频题解。

B题

img
img

C题

img
img

D题

img
img

2024.10.15

A题

img
img

题解

img

B题

img
img

题解

img

C题

img
img

题解

img

D题

img
img

题解

img

img

2024.10.16

A题

img
img

题解

img

B题

img
img

题解

img

C题

img
img

D题

img
img

2024.10.19

A题

img
img

题解

img

B题

img
img

题解

img

C题

img
img

题解

img

D题

img
img

注:就是求有多少排列满足 a 是其中一个LIS.

题解

img

posted @   STLvector  阅读(97)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示