牛客小白月赛22题解

https://ac.nowcoder.com/acm/contest/4462#question

A、操作序列

单点增加,区间求和,下标最小的非零数变成零,单点查询。

说完了不就线段树嘛。由于范围比较大,先存下来,离散化,再进行树上的操作。

注意这里的左右区间离散化值不一样的,左边离散化要找到大于等于左边界的值,右边离散化要找到小于等于右边界的值。

https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43053746

B、树上子链

类似于 dp 求树直径

https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43054927

C、交换游戏

暴搜,由于每次只会影响三个位置,若遍历到的三个位置可以被改变,则改变后重新搜索,搜索完了改回来,继续遍历。由于n比较小,所以跑起来非常快。

https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43056615

D、收集纸片

暴搜,由于只有10个点,10案例,所以最多计算 10*10!次,直接枚举全排列算就可以了。

https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43055062

E、方块涂色

多组输入

https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43051185

F、累乘数字

直接输出

https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43051080

G、仓库选址

考虑暴力的做法,枚举每个位置为仓库的位置,看起来似乎会超时,那考虑一下优化。

若仓库在点 (x,y) 处,若现在将仓库移动到点 (x+1,y) ,那么对于左下角为(1,1),右上角为(x,m)的矩阵,所有点到达仓库的距离都+1,对于左下角为(x+1,m),右上角为(n,m)的矩阵,所有点到达仓库的距离都-1.

所以我们考虑二维前缀和,暴力出仓库在(1,1)位置的答案,然后每次移动一个位置用二维前缀和来计算贡献就可以了。

(暴力也能过。。。)

https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43056417

H、货物种类

考虑最多只有1e5次进货,所以 d 小于1e9 可以忽略了。

由于需要算有最多种类的仓库,我们考虑将同一种货物的所有进货区间合成一个区间,然后直接对这个区间add+1,当然,可能合并后的区间是不连续的,我们可以分多次,对它每一个连续区间add+1就可以了。

可以直接维护max max_id,但由于这个线段树代码是直接魔改了A题的线段树,并且最后再求n次单点值也不会超时,所以懒得改了(反正不会超时)

https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43054475

I、工具人

占坑。

J、计算A+B

先判一遍是不是只有一个+,然后字符串模拟,注意考虑进位和前缀0情况。

https://ac.nowcoder.com/acm/contest/view-submission?submissionId=43052328

 

你可能感兴趣的:(牛客网)