【杂题乱写】2023 牛客七夕比赛
标准的算法竞赛题有下面几个,写这篇博客主要是这个 M 很有意思,一直没绕过来这个弯
如果你有更牛逼的构造方法欢迎交流指导。
B
构造边长为 \(n\) 的矩阵,使得每个 \(2\times 2\) 的子矩形的权值和的极差最小
两个指针 L=1,R=\(n^2\) 。将网格黑白染色后按照顺序遍历,黑色填 \(R\) 并让 \(R\leftarrow R-1\),白色填 \(L\) 并让 \(L\leftarrow L+1\)
C
把 \(\sum\limits_{i<j} (a_{i}+a_j)dis(i,j)\) 拆成 \(\sum\limits_{i=1}^na_i\sum_{j=1}\limits^n dis(i,j)\)
注意到在一个环上 \(\sum\limits_{j=1}^n dis(i,j)\) 对于每个 \(i\) 都是一样的
D
统计每个点作为路径覆盖的点集的 LCA 的方案数,由于每层的点是没区别的,那么需要乘点数
特判 \(k=1\)。如果直上直下,可以通过 \(k^{m-1}\) 计算,否则使用 \(\binom k2\) 钦定这三个点的位置,剩下的点可以直接往下接
如果 LCA 的深度比较浅,那么两个儿子分别接多少方案数也是确定的 \(m-2\),否则需要额外计算两个儿子往外伸的方案数,由于这题比较友好所以 \(m\) 可以枚举,要不然要等差乘等比
每层的点数是 \(k^i\),浅点的方案数是等比数列。
E
计算六种元素的前缀和,对于每个 六元组相同 的位置对,计算是不是区间里面每个元素的前缀和最小值都与其相同。
位置对变成相邻位置,那么找到那些不满足最小值限制的相邻对子,他们将整个序列分成了若干段,每段求长度即可。
F
对于某个数字的两次相邻出现 \(a,b\) 那么 \(a<l\le r<b\) 的区间可能合法
对于某个数字的四次出现 \(a,b,c,d\) 那么 \(c<l\le a,b\le r<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 换成 ab ,ca 换成 ac,cb 换成 bc
如果又出现连续的 aa/bb/cc 接着缩掉。于是判断两个字母/一个字母也就简单了。

浙公网安备 33010602011771号