竞赛讨论区 > 【题解】牛客OI周赛8-提高组
头像
向宇同桌
编辑于 2019-05-10 10:16
+ 关注

【题解】牛客OI周赛8-提高组

A-用水填坑

10分

边界不能存水, 那么一共有个位置能存水.

枚举每个位置放多少水, 判断是否合法然后取最优方案.最多有种情况.

20分

不存在两个连续的块能存水, 那么只需要在10分的基础上枚举每个块和它四周的块能不能同时存水就好了.

95分

大概是发现每一层都是独立的, 因为高度不超过100, 所以将其分为若干高度为1的层, 每层独立处理, 看看每一层能存多少水, 再累加起来就好了.可以直接搜索.复杂度不超过O(nmh).

100分

这大概是个贪心的做法.

一开始所有未在边界点的最终高度都是不确定的.策略是用已经确定了高度的最低的点来更新其它未确定点的高度, 如果它相邻的点比这个点高度低, 显然可以填到一样高, 因为这样做能保证这个被更新的点一定是被它相邻的高度最低的已确定高度的点更新到.

那么用堆来维护最低的确定高度的点, 一开始堆内只有边界上的点.

每个点只能进一次堆被更新一次高度.复杂度.

这个题总体来说比较简单, 95分可以说是非常容易拿到的.

B-死宅选点

d_i表示, 那么若点u与点v的路径上有i条边, 这条路径的厌恶度就是d_i.

30分

假设选择一个位于中点左边的点u, 这个点左边有a个点, 右边有b个点.则***生的厌恶度为.

注意到如果选择u右边的那个点作为答案, 厌恶度变为.发现厌恶度变小了.因此可以推断, 选择更靠右的点(不超过中点)是更优的.同理, 选择右边的点也是如此.因此, 当图为链的形态时, 选择中点是最优的.

50分

, 可以以每个点为树根遍历一遍树, 得到每个点作为根时的厌恶度进行比较.

因为树是随机生成的, 利用随机生成的树期望最高树高为, 平均树高为, , 那么产生的最长路径长度大概在50以内\footnote{数据中有两个点最长路径长度达到了63, 但真的是随机数据, 嘻嘻!}, 所以答案是可以用一个128位长整数(C++中的\li\li int128)表示的, 用long long(\li int64)分数会少一点吧.

70分

, 因为1的任意次幂都为1, 所以一条路径的厌恶度就是路径上边的个数.

f(u)u到其它所有点的厌恶度总和.容易得到

其中表示v这棵子树的大小.

随便选一个点作为树根, 遍历一遍树就得到了树根的答案.然后再遍历一遍树, 得到其它点的答案.

100分

发现难点在于没法对直接进行运算.首先可以看成是一个公比为k首项为k的等比级数.类比的常识再应用等比数列求和公式.我们可以得到.

因为分子上的-k和分母上的k-1是每一项d都有的, 本题也无需求出具体的值.因此可以认为d_i相等.

p(u,h)表示树上与u距离h点的个数.

d(i,j)表示i的子树中与i距离为j的点的个数, u(i,j)表示不在u的子树中与i距离为j的点的个数.

那么$$

那么点u与其它点的总厌恶度就是.

其实可以将看成是一个k进制数第i位上的一个"1".模拟进位, 即, 当然到最后一位就不用再进位了.

那么这样比较两个k进制数的大小最多需要最大路径长度次().加上前面求p(u,h)的复杂度大概是.总复杂度为.

C-随机采矿

10分

.注意到T为任意可能值时都为1.所以第0个时刻一定会制造一个SCV.以后就不会再制造了.

20分

, 又因为第一个SCV在第0时刻被制造.所以只需要考虑第二个在什么时候制造即可.

设第二个SCV被制造时刻的期望值为E.

其实这个做法只是为您提供了一个可能的思路.

50分1

这个做法不是我想的(另一位), 设g(i,j)到第i个时间(第i-1个时刻到第i个时刻)有j只工作的(不算正在制造的)SCV的期望收益, 逆推得到:

然而这个做法我并没有想到如何优化到更高的分数.

50分2

f(i,j)表示第i时刻拥有j只SCV的概率.那么

E(t)t-1t时刻的期望收益(没减去制造SCV时间的收益)

减去制造SCV时间的收益

总复杂度为O(nm), 可以通过的数据.

100分

发现每次转移实质上都是一次线性变换.

可以把依次填入一个的矩阵中, 设为A_t

特别的

就可以将依次转移表示成一次矩阵乘法了.

发现最多有种值, 即B_i中可能.

那么进行数论分块.对于的一个可能的值求出当这时的转移矩阵.矩阵快速幂即可.

首先为了方便, 将E(t)同样表示成矩阵乘法的结果的形式.

发现要求E(t)需先求出A_t, 但是在求A的时候并不是将所有的全部算出来的.

不过依然可以利用一点小技巧求出期望.

依然是利用之前的数论分块的结果.

如果的结果相同,设此时的转移矩阵为C, 那么

发现这是一个矩阵等比级数的形式.一般有两种求等比级数的方法:

  • 等比数列求和公式: 有除法, 需要用到逆矩阵, 可能不存在逆矩阵(广义逆矩阵可能可以?), 不建议用;

  • 分治: , 根据n的奇偶性进行讨论.复杂度是.

这个做法复杂度

std

全部评论

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

等你来战

查看全部

热门推荐