CodeForces vp / contest 记录

Codeforces Round 819 (Div. 1 + Div. 2) and Grimoire of Code Annual Contest 2022

赛时以 8 发罚时的好成绩通过了 ADE 差一步想出来,大概得了个 Rank 681, Performance 2098,实在拉跨。

A

可以操作 [1,n],也可以操作 [1,i][i,n]。几种情况取个最大值即可。

B

m<n 则无解,否则前面一直填 1,最后 1/2 位填剩的即可。

C

暴力合并即可,注意只用合并到高度一样的前两个。

D

这题 5 发罚时……

先随便搞一棵生成树,如果多余的边不形成环,就是树边涂 0,非树边涂 1 即可。

否则找一个非树边连的链上的点,满足它与链的某个端点相邻,交换它们的颜色即可。

E

其实是简单题,但是搞了好久……

打表后可以简单证明排列只可能存在长度为 1,2,4 的置换环,并且长度为 4 的置换环满足环上距离为 2 的点权差为 1

考虑计数。先把长度为 1,2 的答案搞出来,设一个 fn 表示只考虑长度为 1,2 的环的答案,则 fn=fn1+(n1)fn2,然后考虑 4 的答案。

由于 4 是由两个 2 拼起来的,不妨枚举选了 2i2 段。这个的方案相当于把 n2i+1 个物品分成 2i+1 段,因此方案数为 (n2i2i)

这时候 2i2 段要两两配对,并且每对都有 2 种插入方式。因此:

ans=i=0n4(n2i2i)×(2i1)!!×2i×fn4i

G

O(n) 做法感觉其实挺简单的。

考虑发现一些性质。

性质 1: 设最后所有的人变成 t,则 t>max

性质 2: 对于所有 (x,1) (x<t) 最多只有一个相同的,因为如果有多个,后一个会比前一个大。

性质 3: t=min+n1

因此所有的 (t,1) 顺序任意。按权值从大到小考虑,所有 (x,0) 后面恰好有 tx 个数比它小,所有 (x,1) 后面恰好有 xmin 个数不大于它。如果不够分配就无解,否则这些限制 基本 能唯一确定一个排列,再乘上 (x,0) 内部的排列顺序作为系数即可。

Nebius Welcome Round (Div. 1 + Div. 2)

vp 时降智了,简单贪心调了好久……最后是 Rank 1084, Performance 1902

A

先走 min(a,b),多的部分停一次再走。

B

每次接种的人是一段区间,双指针即可。

C

猜了个结论,枚举到 min(10n,p),然后过了。

D

考虑贪心。要求最小,肯定是 11 更优,之后是 01,之后是 00;要求最大,从左到右,如果是 0100 就先放。

E

考虑如果有解,那么一定存在每个点到环的距离 1 的解。暴力找环即可。

具体而言,设 fS,i,j 为起点为 i,终点为 j,经过的点集为 S 的链是否存在,之后枚举 S,i,j,判断 i,j 是否有边即可,这样是 O(n32n) 的。注意到环上起点任意,因此钦定编号最小的点为起点,就能做到 O(n22n)

F

搞笑题。

设图的直径为 d,考虑随便取一个点 u BFS 一遍,求出的最大距离 r 满足 d2r。证明是设直径两端点分别为 i,j,显然 dis(u,i)+dis(u,j)dis(i,j),那么 2rd

由于题目只要求毛估估,所以对于每张图直接输出 r 即可,其中此时的 r 小于上一次的一半就要重新求一遍。每次二分右端点即可。

CodeTON Round 4 (Div. 1 + Div. 2, Rated, Prizes!)

赛时降智了,10 发罚时过 A~E,还 fst 了。最后是 Rank 669, Performance 2074

A

判断是否存在 i 使得 aii 即可。

B

二进制分解即可,填 0 就相当于依次进行 2,1 操作。

C

先删掉所有重复的数,最后枚举保留几个数即可。

D

显然每条信息能得到的是 h 的范围,解不等式即可。

E

考虑从小到大进行并查集。每次如果一个点合并成功了,就继续往它的邻居合并。

使用启发式合并,复杂度 O(nlog2n)

F

考虑如果答案为 x,则第 i 个叶子的深度最优是 xai。一层的 m 个结点要向上占用一个结点,所以最后合并到只剩一个叶子的时候深度不能小于 0

也就是:i=1nmaimx

即:x=logmi=1nmai

也就是说我们要维护 i=1nmai,使用线段树维护大数即可。

Educational Codeforces Round 143 (Rated for Div. 2)

赛时卡 F 了,后来发现正解其实很简单……得了个 Rank 26, Performance 2461

A

枚举即可。

B

显然造成正贡献的线段只有包含 k 的,差分即可。

C

对于每个 ai 计算它能贡献到的最远的位置即可。

D

显然对于每个连通块,染色的情况是互补的。统计 max 的方案,最后乘一个 (n6n3) 即可。

E

考虑设 fii 爆炸后左侧造成的伤害,gi 为右侧。

对于 fi,找到第一个 ajjaiij(若不存在则为 0),那么 fi 可以从 fj 转移。

最后枚举爆炸中心取个 min 即可。

F

考虑二分答案,这样能知道每个点需要走的步数。

对于一次 dfs,贪心地自底向上考虑,如果 u 向下走不行,那么就转移到父节点;如果父节点被染黑了或父节点不存在,就不行。

G

du=deguau,可以发现删点的过程相当于拓扑排序。

先任意求出一个拓扑序,如果对于原图的一条边 (u,v)u 出现在 v 前面,那么连一条边 uv。容易证明要统计的即为新图上的不可到达的点对数。

容斥后转化为统计可达点对。分块 bitset 即可。设一个块长 B=103,每次统计 [iB+1,(i+1)B] 中的点能到达哪些点。时间复杂度 O(n2w),空间复杂度 O(nBw)

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