【题解】2024年中国传媒大学程序设计大赛

A 小苯的区间和疑惑

考虑区间和本质上就是一段前缀和减去另一段前缀和,因此我们尽量让这个差值尽可能大即可,那就可以直接维护“前缀和数组 ” 的前缀最小值 和后缀最大值 ,每个 的答案就是

B 小苯的三元组

考虑 ,同时
因此 ,两者要想前者大于等于后者,当且仅当取等号,即:

,说明 的因子。
,说明 的倍数。

因此只需要预处理出 以内所有数字的倍数个数和因子个数(这步可以调和级数 )。
接着枚举 ,答案加上 的因子数乘 的倍数即可。

C 小红的 CUC

签到题。输出一个CUC后面随便输出啥都行,但最好别随机,否则可能会再随机出一个CUC

D 小红的矩阵构造(一)

解法1:我们首先将的那一行全部填成1,然后将的那一列全部填成0,然后将的那一行全部填成1……以此类推,最终即可填完所有。

解法2(by 炸鸡块君):观察样例得知,当且仅当时对应位置为1,否则为0。这个性质可以推广到任意排列,因为排列也可以由样例交换某些行/列形成。

E 小红的矩阵构造(二)

签到题。我们按顺序不断复制的全1矩阵即可,直到最终没地方赋值了(位置越界了),如果还没用完则输出-1。

F 小红的子树乘积

通过启发式合并来维护子树乘积的因子数量。我们需要用map维护每个素数的幂次,然后维护最终幂次加1的乘积即为因子数量。如果超过了则可以直接剪枝掉,其祖先必然也是超过的。

G 小红的独特区间

“种类数恰好为3”的区间,即“种类数不超过3”的区间数,减去“种类数不超过2”的区间数。这两个问题都可以用双指针来解决。

H 小红的生物实验

dfs板子题。首先确定“外部区域”,这部分可以从边界部分的 '.' 字符dfs出来。然后根据题意,和“外部区域”相邻的细胞器则为细胞壁,将这些全部变成字符 '.' 即可。

小红种树(一)

个等差数列第项最大值和最小值之差求和。

alt

立刻想到若干个等差数列的最大值/最小值构成一个半平面交

可以利用单调栈求得半平面交内的优势直线。

求半平面交的时候有个trick可以避免叉积爆long long,由于查询的点都是整数,所以可以用求得焦点的坐标,向下取整保留整数。的值就是相邻优势直线有事区间的分界点,例如上图红色和蓝色的直线,求得,所以红色直线更优势,的区域蓝色以及蓝色后面斜率更高的直线更优,然后依次遍历求的所有的分界点。

接下来只考虑最大值,考虑最大值和水平数轴的差值,问题转化成求每一条直线的优势区间,假设其优势区间为,等差数列的首项为,公差为,则有等差数列的和,这段优势区间的差值为,对于最小值,重新计算依次再减去即可。

J 小红种树(二)

我们先假设所有树都变得和最高的一样(即最高那棵树增量为0),可以求出每棵树的需要增长的高度。显然最终的答案即这些高度的gcd的因子数量。当我们让最高的树变高的时候,若变高了,则最终所求的是的因子数量(g即为初始求的gcd)。用筛法预处理后,枚举每个即可。

全部评论
D题的解法二 ai+bj>n 好巧妙 想不明白
1 回复 分享
发布于 03-21 20:06 广东
有没有代码呀,兰子哥哥
点赞 回复 分享
发布于 03-20 21:16 湖南
F题加了启发式合并的复杂度是多少啊,哪位佬讲一下
点赞 回复 分享
发布于 04-06 11:38 天津

相关推荐

不愿透露姓名的神秘牛友
11-26 18:54
说等下个版本吧的发呆爱好者很贪睡:佬最后去了哪家呀
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
10-05 10:13
已编辑
HHHHaos:让这些老登来现在秋招一下,简历都过不去
点赞 评论 收藏
分享
评论
3
1
分享
牛客网
牛客企业服务