竞赛讨论区 > 【题解】牛客小白月赛14
头像
_nekko_
编辑于 2020-03-09 16:57
+ 关注

【题解】牛客小白月赛14

施工中

A. 简单计数

普通做法

考虑矩阵二项式:

则有:

降智严重的做法

构造矩阵 ,那么对于矩阵 ,有 就是答案

可以发现它是一个循环矩阵,因此可以只用第一行来表示,设 ,那么它在模 意义下的 次幂的 即为答案

进一步可以发现, 是相同的,因为它们的图论意义下是完全图上的本质相同点

于是可以只用 来表示

那么循环卷积一次相当于:

对于 ,有:

对于 ,有:

整理可得:

那么只需要维护 即可,因为

,则:

其中 ,设 ,由于 ,可以发现它是一个二阶常系数齐次递推

,则:

由于 ,所以 ,因此有两个不同的根

于是有:

由于 ,可以得到:

因此:

因此:

B. 投硬币

显然答案就是:

C. 植树造林

也就是问你有几个中位数,也就是

D. 签到题I

排序后第 个数

E. 等比数列三角形

标程被打爆了……

就是形如 的三角形个数

只需要满足:

也就是:

,其中 ,且

由于 ,且 ,那么预处理 的时间复杂度就是 级别得了

那么这个暴力的时间复杂度就是:

恭喜获得一个常数比 1 小的算法

预处理是瓶颈

稍作优化,可以用 来存储 的数组,那么空间复杂度就降为了

然而这个做法还是挺烦的,既然都有 了,那么肯定能通过 来使得时间复杂度降下去

,显然答案就是:

其中:

那么暴力模拟这个过程,时间复杂度为:

F. 乐色王传奇

算法1

我会!暴力枚举出每一种可能的情况,将最大值加起来,最后除以即可。

复杂度,期望得分分。

算法2

不如我们统计每个数对上面那个总答案的贡献,最后把所有的贡献加起来?

我们发现这个贡献即是为最大值的情况数

如果有值相同呢?那我们这样规定即可:值为第一关键字,行数为第二关键字,列数为第三关键字。

比如这个表是这样的:

N=2

1 1
1 1

那么。我们发现这么做不会影响答案,并且可以将每个数字的贡献统计得不重不漏。

所以这个情况数到底是多少呢?

对于来说,我们要求从其他行里选出来的数都严格小于它。

所以情况数是

对于每个数字,一遍统计即可,复杂度。期望得分分。

算法3

有一些奇怪的算法存在。我忘了,但是肯定有。期望得分分。

算法4

首先我们将每行的排序。

我们发现对于每一行我们可以一起算。

具体来说就是对于每个其他的行维护一个指针(共个),然后在维护一个当前行的指针

每当时,我们扫一遍所有其它行的指针,如果其它行指针所指的元素小于所指的元素,令其它行指针,并且维护那个式子即可。

由于我们一共有个元素,所以我们要扫次。

故复杂度为(瓶颈就在这)。期望得分分。

算法5

那我们为什么不将个值一起算出来呢?

细想一下其实是可以的。

我们先将所有元素放一起排序,然后每个行维护一个指针(共个)。然后跟算法的思路一样。

注意下细节即可,复杂度,期望得分分。

G. many sum

for(int i = 1 ; i <= n ; ++ i) {
    for(int j = i ; j <= n ; j += i) {
        b[j] += a[i];
    }
}

此时已经可以通过此题了,但如果能做 岂不是更爽

考察这个过程,相当于做了一次高维前缀和,那么就模拟一遍即可

H. 图上计数

这题为啥没人做啊

对于操作一,相当于把子树给缩起来

对于操作二,相当于求子树第 大, 序一下就好了,离线后树状数组就可以了

I. 有毒的玻璃球

可以发现 是一个积性函数,那么线性筛出来就行了

J. J.I

重新说一遍题意

给定一个森林,在其中连尽可能多的边使得仍然是一个二分图(显然森林就是一个二分图)

首先对于每一棵树,可以把它看成一个pair,即分成左右两个点集

也就是说有一些,可以对于一个变成,要求最大化

其中是森林中的边的个数

如果你做过poj 1112的话,你会发现这是个背包裸题

直接压位跑一下就行了

全部评论

(2) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐