CCPC 2023 Guilin Onsite (部分)解题报告

CCPC 2023 Guilin Onsite (部分)解题报告

A Easy Diameter Problem

不断删端点的时候直径中点每次只会移动 1/2 的距离(可以在一条边的中间),假如从 u 移动到 vdd1/2,距离 ud 的点集为 S,距离 vd1/2 的点集为 T,那么 ST 是一定要删掉的,而 ST 可以和 ST 差不多时间删掉,也可以留到后面删,于是可以等它必须要删掉的时候再考虑插入到删除序列里,那么 dp 状态里就多加一维当前可以任意插入的后缀的长度,然后具体讨论形式可以直接看官方题解。

实现上的细节是,由于这个点可能在中间,但是可以根据删剩下的直径长度 d 的奇偶直接确定直径中点是边还是点,于是 dp 状态的第一维可以记边的编号 p,表示当前中点是 up,上一个中点是 vp。时间复杂度是 O(n3) 是因为复杂度和边界点总个数有关,而对于某个 d 对边界点个数求和是 O(n) 的。

Code

B The Game

从小到大排序之后,应当是 A 的后 m 个对应到 B 的后 m 个,记录 A 的后 m 个的总大小 saB 的后 m 个的总大小 sb,以及 AB 多出来的数的个数 ressbsa=res 那么可以直接对应从小到大将 A 中的数依次修正为 B,删的一定是前面 res 个。否则我们需要浪费次数,贪心,需要浪费时去操作 A 的最小值。

用俩 multiset 实现了一个对顶堆一样的玩意维护前 m 大。时间复杂度 O(nlogn)

Code

C Master of Both IV

枚举 xor =x,考虑它的真因子一定 x/2,无论怎么异或都搞不出 x 的最高位,所以一定有奇数个 x,从而 x 的真因子 xor 和为 0。xor 为 0 的个数即为不在线性基里的元素个数,注意去重以及统计 x=0 的情况。

Code

E Prefix Mahjong

考虑怎么 check,那就是按值域 f0/1/2,0/1/2,0/1 表示前前位置开头有几个顺子,前一个位置开头有几个顺子,是否已经有雀头。转移是一个矩阵乘法,那么直接在值域上线段树维护矩阵乘法。因为是 01 矩阵所以可以压位,然后值域可以离散化到 1e5,这样复杂度就是 O(nk2logn),其中 k=18

Code

G Hard Brackets Problem

首先发现无论怎么操作,光标的右侧永远是一堆 ),只有光标右侧为空的时候才会插入一个 )。所以合法当且仅当串是若干个合法括号序列中间拼上若干 ) 构成的,分析到这里构造就很简单了。

Code

H Sweet Sugar

一个连通块合法当且仅当 k 且与 k 同奇偶。和这个题一样证,w 合法那么 w2 一定合法。所以贪心一下就行了。

Code

I Barkley II

计算 cnt-mex 最大的区间。枚举 mex 是 x,计算删去 mex 之后剩余的若干区间 cnt 最大是多少。这里虽然不能保证 mex 是 x,首先答案一定能被统计到,其次算错的话真实 mex <x,只会更劣,所以这么做是对的。

Code

J The Phantom Menace

好难写...枚举第一个串的偏移量,然后建图跑欧拉回路 ai[1,d]ai[d+1,m]bj[1,md]bj[md+1,m]。注意这里是一个二分图要区分左右部点(因为 d=m/2 的时候可能有些问题?),需要哈希,时间复杂度 O(nm)

Code

posted @   do_while_true  阅读(943)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?

This blog has running: 1845 days 1 hours 33 minutes 20 seconds

点击右上角即可分享
微信分享提示