Educational Codeforces Round 28 简单题解

A数组

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

而且要求:每个1后面的全部数都是1排序

 

要不把全部1去掉class

要不数组是0...01...1形式,这种只须要枚举1的位置,就好了时间

 

Bnew

有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

相关文章
相关标签/搜索