【杂题乱写】2023 牛客七夕比赛
标准的算法竞赛题有下面几个,写这篇博客主要是这个 M 很有意思,一直没绕过来这个弯
如果你有更牛逼的构造方法欢迎交流指导。
B
构造边长为 的矩阵,使得每个 的子矩形的权值和的极差最小
两个指针 L=1,R= 。将网格黑白染色后按照顺序遍历,黑色填 并让 ,白色填 并让
C
把 拆成
注意到在一个环上 对于每个 都是一样的
D
统计每个点作为路径覆盖的点集的 LCA 的方案数,由于每层的点是没区别的,那么需要乘点数
特判 。如果直上直下,可以通过 计算,否则使用 钦定这三个点的位置,剩下的点可以直接往下接
如果 LCA 的深度比较浅,那么两个儿子分别接多少方案数也是确定的 ,否则需要额外计算两个儿子往外伸的方案数,由于这题比较友好所以 可以枚举,要不然要等差乘等比
每层的点数是 ,浅点的方案数是等比数列。
E
计算六种元素的前缀和,对于每个 六元组相同 的位置对,计算是不是区间里面每个元素的前缀和最小值都与其相同。
位置对变成相邻位置,那么找到那些不满足最小值限制的相邻对子,他们将整个序列分成了若干段,每段求长度即可。
F
对于某个数字的两次相邻出现 那么 的区间可能合法
对于某个数字的四次出现 那么 的区间可能合法
假设一共出现了 种数字,那么上面的限制变成矩形加,权值是 的 点 才是合法的。使用扫描线处理矩形加,对于权值是 的计算可以通过维护区间最大值和最大值出现的次数得到
G
注意到这题是基环树,所以答案就是
M
先把连续的字母缩成一个
这时候有一种想法是把 abc,acb,cba,cab,bac,bca
都变成 然后 3a,3b,3c,a3,b3,c3
都变成 ,类似的可以得到 的结果
但是 change
函数的使用次数过于多了。
赛时一直在想离散化,但是确实也没有任何离散化的门路。
不过最终做法是把所有 abc
的排列全部变成 abc
,或者说把 ba
换成 ab
,ca
换成 ac
,cb
换成 bc
如果又出现连续的 aa/bb/cc
接着缩掉。于是判断两个字母/一个字母也就简单了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律