校际交流模拟总结

前言

又名:校际交流挂分记

由于上次补总结补了一整天多,决定每天及时写总结。

校际交流,但是被本校的人吊打。


Day 1

总体情况

都是 CF 6月24日 Div1+Div2 的原题,早知道多打点 CF 了。

T1 考场降智没想出来,后面暴力基本上都打了。

60+20+50+20=150,rk3

怎么一回家就会 T1 了啊!


T1

CF1842C

一眼 DP,只会 O(n3) ,瞎优化一下变成 O(n2)

其实再小优化一点就可以 O(n) 了,但是优化的时候有个 sb 错误,没调出来,只能交暴力。

算是比较简单的优化吧,转移的时候记录每种颜色最大值,去掉枚举最大值的 O(n)

Div 2 C 都不会了,废

CODE


T2

CF1842D

最短路建模题。

最近被差分约束搞晕了,看到这种最短路建模就想放弃。

为什么是图论建模呢?因为输入格式

uv 连权值为 w 的无向边,然后可以推出对于每个点 i ,其参会时长不会超过它到点 n 的最短距离。总时长最大就是 dis1

构造:考虑将所有点划分为两个集合 ST,S 中为还能参加聚会的点,T 中为已经不能参加聚会的点。初始 nT 中,其他点在 S 中。

每次从 S 中选择一个 dis 最小的点 x,让 S 中的所有点都参加一次聚会,时长为 x 的参会时间上限,直到点 1 不在 S 当中。

CODE


T3

CF1842F

50pts

枚举所选点数 cnt,然后树上背包板子,dp[x][j] 表示 x 子树内选 j 个点,子树内所有边对答案的贡献。

dp[x][j]=maxysonx(dp[x][jk]+dp[y][k]+abs(cntkk))

然而我太弱了,树上背包调了一个多小时。

100pts

事实上这是 CF 的题,或许不会考这么裸的模板。所以正解是贪心。

绝对值很麻烦,所以用一些神奇的操作把绝对值去掉了。

可以找到树的黑点的重心,即某个点,它的子树内黑点个数的最大值最小,易证重心任一子树内黑点个数不过半,绝对值就去掉了。

然后以重心为根,求出每个点的深度 dep[i] ( dep[rt]=0 ).

sz[i] 表示以 i 为根子树中黑点的个数,答案为

irtk2szi=k(n1)2irtszi

对于每个点会对除了根之外所有的祖先的 sz 产生 1 的贡献,所以化为

k(n1)2irt,coli=blackdepi

要求贡献最大,所以要最小化 dep[i] 的和。

所以贪心地选深度最小的点。

关于重心,直接枚举就行了,如果枚举到非重心,可能导致 k2szi 变负,只会让答案偏小,取 max 后不影响结果。

感觉很巧妙。

时间复杂度 O(n2)

CODE


T4

CF1842G

坑+1(悲


专题讲座-贪心&构造

热身题

CF1804D

贪心(exchange argument)

一篇讲 exchange argument 的博客

例题:

UVA11003

其余例题洛谷上交不了。

构造

例题:

CF1787ECODE

构造策略很简单,就是尽量构造 x 单独一组和异或和为 x 的两个数一组,这样可以使组尽可能的多。

感觉正确性证明很难想。

CF1761ECODE

分类讨论:

若原图连通答案为 0,

原图有一个连通块不为完全图,答案是 1;

原图连通块个数大于2,答案为2;

原图有两个连通块且都为完全图,答案为较小连通块的大小。

CF1697E

虽然说讲了一些构造题,但是碰到这种人类智慧我大概还是不会做的。


Day 2

总体情况

寄,非常寄。

感觉一碰到 CF 这种人类智慧题就要寄。

100+40+0+40=180,rk5


T1

CF1804C

sumii=1ni.

易证 p 为奇数时 sumimodnsumi+nmodn,

p 为偶数时 sumimodnsumi+2nmodn.

直接枚举 1min(p,pmod2n) 判断。

CODE


T2

CF1784C

总觉得 T2 比 T4 难……

我还以为膜你赛 T2 不会出线段树二分这种东西。

题解

看了题解只能感性理解一下,总觉得还有点模糊,不太会用文字表达这个过程。

首先把问题化为把某个前缀变成连续的序列的操作数最小为多少。

手动模拟一下这个过程,或者想象一下,会发现有一些数不用操作,不会产生贡献。

然后贡献就是 bim(m+1)2,bi 表示前面要操作的数,m 是当前操作过后的最大值。

记录 ai 前面要操作的数的和,和 m,对于一个 ai 先强制操作。

如果能找到一个 p 使得操作的数中小于等于 p 的数个数大于 p,此时用 ai 去替换 p.

如果找不到就 m=m+1,然后 ai 需要操作到 m.

感觉讲不清楚。可能自己并不是很理解。

用权值线段树维护,查询的时候用线段树二分。

CODE


T3

CF1778D

当时这题三个学校没人会,一看到期望题就直接放弃。

看了题解觉得挺简单的,然而在考场上自己不敢推柿子。

发现答案只与字符串长度和不同的位置数有关。

P3750 套路差不多。

教练讲的做法和这篇题解差不多,设 fi 表示当前 i 个位置不同,操作到 S=T 的次数期望,写出递推式,然后解方程的感觉。

然而更多的题解好像还有更简单的做法。

fi 表示当前 i 个字符不同,操作到 i1 个字符不同所需要的次数期望。

分类讨论:

若下次改变一个不同的字符,期望为 1in,

若下次改变相同的字符,期望为 (fi+1+fi)nin,

所以 fi=in+(fi+1+fi)nin,

移项,fi=n+(ni)fi+1i.

然后 fn=1 ,递推计算。

CODE


T4

CF1804E

结论就是找一个基环树,并且每个非环点都与环有直接连边。

所以可以枚举环上的点的集合,考虑把环拆成链,以编号最小的点为开头。

fS 表示以 S 中编号最小的点为开头,以某些个点作为结尾使 S 中所有点构成一条链,符合这个要求的点的集合,转移。

然后枚举集合,先判断开头是否与某个可行的结尾有连边,再判断非环点是否与环有连边。(全部状压,位运算解决)

判断合法后,对于非环点随便找一个与它右边的环上点,对于环,从开头,枚举可行的末端点,再从这个点继续枚举可行的前一个点,找完整个环。

CODE


Day 3

相比今天,昨天的寄已经不算什么了。

就是被 T1 坑了,一开始研究 T1 错误样例研究半天,后来搞的扫描线又写挂了,沦为最低档暴力分,并且没有时间想 T4,连分都没骗。(有同学 T4骗分骗了 60

20+30+40+0=90,rk12.

T1

T361977

可以把所有的矩形都放到 d×d 的矩形中,分 4 类,或者说 9 类。

问题转化为给一个 d×d 的矩阵染色,找到坐标字典序最小的未被染色的点。

我的考场做法:

用扫描线维护染色,找到最小的个 x0 满足第 x0 列有点未被染色(即 seg[x0].len<d)。

然后找所有覆盖到 x0 的矩形,计算最小未被覆盖的 y0

然而后面找 y0 的部分写假了,我试图维护染色区间端点,但其实有可能不连续,然后 10020,乐。

后来改成树状数组维护 x0y 的染色,过了。但是代码极其丑陋。

CODE

正解做法前面一样,后面线段树处简单一点。

线段树记录区间最小的被操作次数,如果某个 x0 处整个区间最小值为 0,说明 x0 合法。

再枚举 y0 ,单点查询。

题解做法代码不想写了……反正比我那个做法好写。


T2

T361966

显然倒序操作。

考场上被卡的地方是,倒序染色可能需要经过一些已经被染色的点,并不能减少时间复杂度。

发现以 v 为中心,d 为半径染色时,若 uv 距离为 du 周围与它距离 dd 的点与 v 的距离都 d ,会被染色。

记录 fi 表示当前 fi 已经被染色的半径,若某次染色中到达 i 的半径为 ddfi 则不用继续染色。

每个点最多被搜索到 20 次,时间复杂度 O(dn)

CODE


T3

T361968

很妙的一道题。

每行每列看成一个点,每个点所在的行和列之间连边,权值为该点的权值。

然后跑最小生成树,没了。

此时刚好有性质 (x1,y1),(x2,y1),(x1,y2) 均被染黑后,x1,x2,y1,y2 四点联通,刚好等价于免费联通了 (x2,y2),即免费染黑了 (x2,y2) 点。

太神了。

CODE


T4

T361971

坑+1


专题讲座-DP优化

最长上升子序列问题

单调队列优化

例题:

P1545

P2034CODE

倒着想,选择一些数删掉,距离超过 k 必须删,使删掉的数总合最小。

然后 dpi=max(dpj)+ai (ik1j<i),单调队列维护符合条件的最小 dpj

斜率优化

P3195CODE

矩阵加速

斐波那契数列(P1962)CODE

hdu2294

四边形不等式

坑+1


Day 4

又是挂大分的一天。

10+0+20+0=30,rk12

T1 博弈题完全不会,T2 30pts 挂的莫名其妙,T3 部分分没时间想,T4 题意搞错调了半天都不对。

我怎么这么蒻啊!


T1

麻了我真的还是没想明白 T1。

T1 都不会了。

坑+1


T2

T362783

先讲个笑话:

for(int i=1;i<=18;++i)
	for(int j=1;j<=n;++j)
		f[i][j]=f[f[i][j-1]][j-1];

搞了半天才发现自己是怎么寄的……

关键自己造的数据没查出来。太逆天了。

然后正解就是边双缩点,查询路径上的权值和,

所有割边是必经边,其余都不是。用到边双一个性质,边双中任意两点间可以找到至少两条不相交的路径。(感性理解

然后这个缩完的树是有边权也有点权的,边双内如果有边权值为 1,它的点权就是 1,其他是 0,(当然算所有边边权和也可以),算路径的时候要稍微注意一下。

CODE


T3

T362786

二分答案。

对于 D=0 检验时,每件衣服看成一个桶,若 aimidmid 个桶各放一层,若 ai<mid 就顺着放下去,若能放满,就可行。

对于 D>0用平衡树暴力维护即可,然而我不会, 同样是二分答案,然后贪心检验。

然后由于传数据失败而且浪费很多时间,所以坑先放在这。

坑+1


T4

T362788

是这样的,我想传数据,但是传了三遍都没传上去。

坑+1


专题讲座-图论问题选讲

今天的专题讲座有点难,码量也大。

坑太多了,直接不填。

图的连通性

边双缩点

例题:

P7924CODE

看到不能经过同一条边,显然边双缩点(感性理解,不想证明),然后树上差分求出每个点被走过的次数,次数大于 0 就加上点权。

树上差分:++cnt[x],++cnt[y]; --cnt[lca],--cnt[fa[lca]];

边双的点权是其中所有结点的点权和。

广义圆方树(即所谓的点双缩点)

例题:

P4630

最小生成树

Boruvka

例题:

CF888G

对于异或,容易想到 01 Trie。

Boruvka 的过程找每个集合伸出的最小边,两个点之间边的权值是从他们的 lca 开始往下的路径异或,lca 以上的位都是 0,从 Trie 所以下面往上找 点,然后合并左子树右子树。

过程和 Boruvka 类似,但又有点像 kruskal

kruskal 重构树

(自己找的)例题:

P2245

首先要最大值最小,就是建立最小生成树,每次查路径上的最大值。

更好的做法:建立 kruskal 重构树,点权设为合并集合时的边权,每次查询如果不在一个集合就是 impossible ,否则答案为他们 lca 的点权。

欧拉回路

可能还有一些,记不得了。例题也记的不全。


Day 5

总体情况

第一次发成绩,T2 没加 SPJ。

第二次发成绩,T1 没有忽略换行和空格。

好评测。

80+70+30+50=230,rk3


T1

sqc:像这种题目我们开场 10min 就切掉了。

然而我 4h 都不会。

正解是建图跑 dijkstra我考试时候想的是:虽然有点像但这绝对不是图论


T2

30pts

暴力枚举 x,y 找,找到就退出,找不到就 1

期望得分 30pts,实际得分 70pts。乱搞可以 100pts

100pts

没有课件,忘了(麻


T3

发现血量可能触底就是最小子段和末尾导致血量减到 0 或以下,而最小子段和前面一定是满血(如果不是那最小子段和可以继续往前扩)。

中间如果会用到锁血,就是最小子段和小于等于 x10 ,判断一下锁血后是会寄,还是有剩余血量(剩余血量为 x 加上最小后缀和)。

如果不用锁血,直接用 x 加上全数列最小子段和判断就行了。

有修改操作,所以用线段树维护最小子段和。


T4

20pts

枚举排列和集合,统计。

50pts

枚举排列长度 n,枚举集合大小 sz,fi=sz=1n(nsz)(nszsz)(sz)!(nsz)!

O(n2) 计算 fg 就是前缀和。

100pts

打表发现 fi=fibi×n!(bushi

可以推出来,但我忘了怎么推了……老师也没发题解课件……

然后这个废物懒得传题传数据,也没有数据所以就不写订正代码了。


专题讲座-树和图问题选讲

例题大多是 gym 上的,不想写(bushi

要补的知识点:树哈希


Day 6

总体情况

30+0+60+60=150,rk1

虽然 T1 挂惨 T2 不会,但是大家似乎都 T1 挂惨,然后 T3 写的 50pts 部分分反挂成 60pts,然后 T4 用一些特判加上 15s 的时限,水到了 60pts.


T1

打表,发现 AAAAAAAAB 的答案就是斐波那契数列,AABAAB 划分为若干个 AAB,通过一些斐波那契数相乘得到。

然后这个废物就直接从大往小枚举斐波那契数,完全忘了字典序是先比较长度的。直接寄成 30pts ,警钟敲烂。

upd:讲题的时候发现我写的贪心是可以让长度尽量小,但是有另外一些问题。

有可能除掉了大数,导致小数没有办法继续分解,其实是可以分解成若干个小的数的。

主要是和分解质因数搞混了,没反应过来。警钟敲烂。

正解就是用 dfs 从大数往小搜索。

upd:字典序好像并不是先比较长度,是如果前面全都一样才比较长度……


T2

是一个博弈论的 dp,我完全不会。

这几天必须填的一个坑,不然考到就寄。


T3

注意到洞的数量很少。神奇数字 42

对于每一个洞,以它的上下左右四个点各搜一遍到每个点的最短距离。

然后对于询问,如果区域内无洞,就直接输出曼哈顿距离。

如果有洞,那一定不能经过洞。显然如果原最短路经过洞,考虑洞的最短路应该绕过洞。

所以枚举所有洞周围的点,对于每个这样的点到起点和终点的距离和取 min ,答案若是 就输出 1


T4

对于 l=1 的部分分,可以用线段树维护要求,具体就是每加入一个人,把区间包含那个位置的 k 减一,如果有某个 k=0 ,就可以继续加。

对于 rln2 ,每个区间必然经过中点,可以从中点处把区间分成两段,剩余做法同第一种部分分。

用同样的方法,每次分成过中点的,不过中点的,一直这样分治下去,用线段树维护。

代码极其(),感觉写不起来。


专题讲座-杂题选讲

(能在洛谷上交的)例题:

P6908CODE

一个贪心。

前置芝士:O(n) 判断一个字符串是否是另外一个的子序列。

然后按长度排序,一个一个加入。记两组为 A,B,再加一个存放特殊情况的组 C

如果加入的 si 能放在 A 后面或者 B 后面,就直接放,然后把 C 全放到另外一组,清空 C

否则先放到一个 C 后面,如果能放就放,如果不能放,就把原 C 中的和这个串分别加到 A,B 中。

最后别忘了随便将 C 中剩余的加入 AB


后寄

又是一堆填不完的坑qaq

这边刚写完,nfls 的集训又要开始了……

寄。

这几天模拟总分 800,排名是并列的 rk4。

最高分 900,sto dbw orz

发现自己有一堆东西不会,比如博弈题。

就这样先结束吧,后面可能会不定期的随机地填一些坑。

滚去一个新的地方被吊打了。

posted @   Wonder_Fish  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示