【杂题乱写】2023 牛客七夕比赛

标准的算法竞赛题有下面几个,写这篇博客主要是这个 M 很有意思,一直没绕过来这个弯

如果你有更牛逼的构造方法欢迎交流指导。

B

构造边长为 n 的矩阵,使得每个 2×2 的子矩形的权值和的极差最小

两个指针 L=1,R=n2 。将网格黑白染色后按照顺序遍历,黑色填 R 并让 RR1,白色填 L 并让 LL+1

C

i<j(ai+ajdis(i,j) 拆成 i=1naij=1ndis(i,j)

注意到在一个环上 j=1ndis(i,j) 对于每个 i 都是一样的

D

统计每个点作为路径覆盖的点集的 LCA 的方案数,由于每层的点是没区别的,那么需要乘点数

特判 k=1。如果直上直下,可以通过 km1 计算,否则使用 (k2) 钦定这三个点的位置,剩下的点可以直接往下接

如果 LCA 的深度比较浅,那么两个儿子分别接多少方案数也是确定的 m2,否则需要额外计算两个儿子往外伸的方案数,由于这题比较友好所以 m 可以枚举,要不然要等差乘等比

每层的点数是 ki,浅点的方案数是等比数列。

E

计算六种元素的前缀和,对于每个 六元组相同 的位置对,计算是不是区间里面每个元素的前缀和最小值都与其相同。

位置对变成相邻位置,那么找到那些不满足最小值限制的相邻对子,他们将整个序列分成了若干段,每段求长度即可。

F

对于某个数字的两次相邻出现 a,b 那么 a<lr<b 的区间可能合法

对于某个数字的四次出现 a,b,c,d 那么 c<la,br<c 的区间可能合法

假设一共出现了 m 种数字,那么上面的限制变成矩形加,权值是 m 的 点 (l,r) 才是合法的。使用扫描线处理矩形加,对于权值是 m 的计算可以通过维护区间最大值和最大值出现的次数得到

G

注意到这题是基环树,所以答案就是 n

M

先把连续的字母缩成一个

这时候有一种想法是把 abc,acb,cba,cab,bac,bca 都变成 3 然后 3a,3b,3c,a3,b3,c3 都变成 3 ,类似的可以得到 2/1 的结果

但是 change 函数的使用次数过于多了。

赛时一直在想离散化,但是确实也没有任何离散化的门路。

不过最终做法是把所有 abc 的排列全部变成 abc ,或者说把 ba 换成 abca 换成 accb 换成 bc

如果又出现连续的 aa/bb/cc 接着缩掉。于是判断两个字母/一个字母也就简单了。

posted @   没学完四大礼包不改名  阅读(45)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示