校际交流模拟总结

前言

又名:校际交流挂分记

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

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


Day 1

总体情况

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

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

60+20+50+20=150,rk3

怎么一回家就会 T1 了啊!


T1

CF1842C

一眼 DP,只会 \(O(n^3)\) ,瞎优化一下变成 \(O(n^2)\)

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

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

Div 2 C 都不会了,废

CODE


T2

CF1842D

最短路建模题。

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

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

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

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

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

CODE


T3

CF1842F

50pts

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

\[dp[x][j]=\max_{y \in son_x}(dp[x][j-k]+dp[y][k]+abs(cnt-k-k)) \]

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

100pts

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

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

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

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

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

\[\sum_{i \neq rt} k-2 \cdot sz_i = k\cdot (n-1)- 2 \cdot \sum_{i \neq rt} sz_i \]

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

\[k\cdot (n-1)- 2 \cdot \sum_{i \neq rt,col_i=black} dep_i \]

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

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

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

感觉很巧妙。

时间复杂度 \(O(n^2)\)

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

\(sum_i\)\(\sum_{i=1}^n i\).

易证 \(p\) 为奇数时 \(sum_i \mod n \equiv sum_{i+n} \mod n\),

\(p\) 为偶数时 \(sum_i \mod n \equiv sum_{i+2 \cdot n} \mod n\).

直接枚举 \(1\)\(\min(p,p \mod 2n)\) 判断。

CODE


T2

CF1784C

总觉得 T2 比 T4 难……

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

题解

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

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

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

然后贡献就是 \(\sum b_i - \frac{m \cdot (m+1)}{2}\),\(b_i\) 表示前面要操作的数,\(m\) 是当前操作过后的最大值。

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

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

如果找不到就 \(m=m+1\),然后 \(a_i\) 需要操作到 \(m\).

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

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

CODE


T3

CF1778D

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

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

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

P3750 套路差不多。

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

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

\(f_i\) 表示当前 \(i\) 个字符不同,操作到 \(i-1\) 个字符不同所需要的次数期望。

分类讨论:

若下次改变一个不同的字符,期望为 \(1 \cdot \frac{i}{n}\),

若下次改变相同的字符,期望为 \((f_{i+1} + f_i) \cdot \frac{n-i}{n}\),

所以 \(f_i=\frac{i}{n}+(f_{i+1} + f_i) \cdot \frac{n-i}{n}\),

移项,\(f_i=\frac{n+(n-i) \cdot f_{i+1}}{i}\).

然后 \(f_n=1\) ,递推计算。

CODE


T4

CF1804E

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

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

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

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

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

CODE


Day 3

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

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

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

T1

T361977

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

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

我的考场做法:

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

然后找所有覆盖到 \(x_0\) 的矩形,计算最小未被覆盖的 \(y_0\)

然而后面找 \(y_0\) 的部分写假了,我试图维护染色区间端点,但其实有可能不连续,然后 \(100 \rightarrow 20\),乐。

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

CODE

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

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

再枚举 \(y_0\) ,单点查询。

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


T2

T361966

显然倒序操作。

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

发现以 \(v\) 为中心,\(d\) 为半径染色时,若 \(u\)\(v\) 距离为 \(d'\)\(u\) 周围与它距离 \(\leq d-d'\) 的点与 \(v\) 的距离都 \(\leq d\) ,会被染色。

记录 \(f_i\) 表示当前 \(f_i\) 已经被染色的半径,若某次染色中到达 \(i\) 的半径为 \(d\)\(d \leq f_i\) 则不用继续染色。

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

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\) 必须删,使删掉的数总合最小。

然后 \(dp_i=\max(dp_j)+a_i\) \((i-k-1 \leq j < i)\),单调队列维护符合条件的最小 \(dp_j\)

斜率优化

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\) 检验时,每件衣服看成一个桶,若 \(a_i \geq mid\)\(mid\) 个桶各放一层,若 \(a_i < 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\) 或以下,而最小子段和前面一定是满血(如果不是那最小子段和可以继续往前扩)。

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

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

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


T4

20pts

枚举排列和集合,统计。

50pts

枚举排列长度 \(n\),枚举集合大小 \(sz\),\(f_i=\sum_{sz=1}^n \binom{n}{sz}\cdot \binom{n-sz}{sz} \cdot (sz)! \cdot (n-sz)!\)

\(O(n^2)\) 计算 \(f\)\(g\) 就是前缀和。

100pts

打表发现 \(f_i= fib_i\times n!\)(bushi

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

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


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

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

要补的知识点:树哈希


Day 6

总体情况

30+0+60+60=150,rk1

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


T1

打表,发现 \(AAAAAAA\dots AB\) 的答案就是斐波那契数列,\(A\dots ABA\dots AB\dots\) 划分为若干个 \(A\dots AB\),通过一些斐波那契数相乘得到。

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

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

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

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

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

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


T2

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

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


T3

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

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

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

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

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


T4

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

对于 \(r-l \geq \lceil\frac{n}{2}\rceil\) ,每个区间必然经过中点,可以从中点处把区间分成两段,剩余做法同第一种部分分。

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

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


专题讲座-杂题选讲

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

P6908CODE

一个贪心。

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

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

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

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

最后别忘了随便将 \(C\) 中剩余的加入 \(A\)\(B\)


后寄

又是一堆填不完的坑qaq

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

寄。

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

最高分 900,sto dbw orz

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

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

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

posted @ 2023-08-02 21:54  Wonder_Fish  阅读(60)  评论(0)    收藏  举报