Educational Codeforces Round 28 简单题解

A

给出一个01数组,问这个数组至少去掉多少个数,相对位置不变,

并且要求:每一个1后面的所有数都是1

要不把所有1去掉

要不数组是0...01...1形式,这种只需要枚举1的位置,就行了

B

有n个问题,每个问题有k个子问题,1 <= n,k <= 45

做出任何一个问题的第i个子问题需要t[i]时间,得1分

如果某个问题的k个问题全部解决了,还会再奖励1分

现在你有M的时间,0 <= M <= 2 * 10^9,问最多能得多少分

贪心

枚举解决了x个问题,得了x * (k + 1)分,把剩余的子问题按照t的大小排序,然后用剩余的时间贪心去做,看能做多少子问题,能得多少分

C

有一个数组,长度n,1 <= n <= 5000,元素可能是负数,数组从0开始

sum(l,r)表示数组区间[l,r)的元素之和

现在要你找3个数,x,y,z,满足:

1.0 <= x <= y <=z <= n

2.sum(0,x) - sum(x,y) + sum(y,z) - sum(z,n)最大

注意,这道题目i == j时,sum(i,j)表示[i,i),没有元素,值为0

我们枚举y的位置,把数组分成[0,y),[y,n),然后对2个部分都要找一个分隔点,其实就是2个相同的子问题

所以,先枚举y,对每一部分再求分隔点就可以了

D

有一个n * m的矩阵,开始时矩阵元素都为0,有q个操作,第i个操作xi,yi,ti,表示从ti时间开始a[xi][yi] = 1

问最少什么时间,矩阵有一个k * k的子矩阵,子矩阵全为1

二分时间,就行了

E

题意不想说了

树dp,就行了

F

给出一个数组

f(l,r) = 数组[l,r]区间中的不同的数的个数,现在随机选择l,r,求f(l,r)的期望


1.从题意看,if l != r,则选到l,r的概率是2 / n / n if l == r,则选到l,r的概率是1 / n / n

2.pre[i]记录a[i]上一次出现的位置,直接算出每一个位置对期望的贡献

   每一个位置对期望的贡献 = 这个位置有贡献的概率 * 1

原文地址:https://www.cnblogs.com/-maybe/p/7496435.html