北京Day 23

T1 AGC011E

题目大意:定义一个数是” 上升的”,当且仅当这个数的每一位数字不小于它的下一位数字。现在有一个数 N, 求 N 最少能拆成多少个” 上升的” 数的和。 N ≤ 1e500000。

题解:

打表,发现每次减去可以减去的最大的数,答案好像是对的。

考虑对增长数进行分解: 我们定义形如 111...111 的数为“全一数”(特别地,0 也是全一数),那么显然任何一个增长数都可以表示为 9 个全一数的和,问题转化为求最小的 K,使得 N 可以被分解成 K 个全一数

N = Σ(10^bi − 1)/9       9*N + K = Σ(10^bi )

考虑数位和,暴力枚举 K 即可。

T2 ARC067F

题目大意:有 n 个餐馆,编号从 1-n,第 i 个餐馆和第 i+1 个餐馆的距离是 Ai。 有 m 张餐卷,在第 i 个餐馆使用第 j 张餐卷可以得到 dij 的收益,每张餐卷只能使用一次,但是每个餐厅可以使用多张餐卷。可以从任意一家餐 厅开始行动,最大化 得到的收益-走的距离。

题解:

最终走过的餐馆一定是连续的一段区间,当区间确定的时候,每张餐票会用在最划算的那个餐馆,考虑每个 B(i,j) 的贡献

维护单调栈求得每张餐票有贡献的区间,将区间 [x,y] 视为平面上的点 (x,y),那么就是矩阵加 B(i,j), 最后扫描每个点,用差分就可以了。

T3 ARC063F

题目大意:在平面直角坐标系上有一个矩形,左下角位于 (0, 0),右上角位 于 (W, H)。矩形的边平行于坐标轴。 一开始,整个矩形都是白色的。在矩形内标 N 个点,第 i 个点位于 (xi , yi)。 对于每一个点 i,执行下述操作中的恰好一种: 将平面区域 x < xi 染成黑色;将平面区域 x > xi 染成黑色;将平面区域 y < yi 染成黑色;将平面区域 y > yi 染成黑色。最大化白色区域周长。

N<=3e5 W,H<=1e8。

题解:

题目本质是求一个周长最大的矩形, 满足这个矩形内部没有点。显然该矩形必然经过矩阵的中线。

枚举上边界,枚举下边界,计算出最优左边界和最优右边界

考虑进行优化,上边界往上移的过程中动态维护每个位置的 xL,xR, 并维护全局最小值

左右各开一个单调栈, 在更新单调栈时在线段树上进行区间加减即可。

T4 agc010f 

题目大意:有一颗 N 个节点的树,标号从 1 到 N。这棵树有 N − 1 条边, 第 i 条边连接节点 ai 和 bi。 现在在第 i 个节点放有 Ai 个石子。A选择一个节点并放一个木块在上面。然后从 A 开始,两人轮流进行如下操作: 从木块所在的节点移除一个石子,然后把木块向相邻的一个节点移动。 若当某个人进行操作的时候当前木块所在节点没有石子,那么他输掉游戏。在找出所有的节点 v 满足一开始时A把木块放在节点 v 能赢得游戏。N<=3000

题解:

对于任意结点 r,我们考虑以它为根,定义函数 f(x) = 0/1 表示在以 x 为根的子树内,是否能够做到先手必胜。

f(x) = 1 的必要条件是对于 x 的子结点,存在一个 v, f(v) = 0 且 valv < valx。

因为在以 v 为根的子树内,无论怎么走都无法使先手获胜,那么 以 x 为起点的话,先手直接走到 v 就可以了,后手就变成了先手。 还要避免先后手来回走的情况,所以 valv < valx。所以若 r 作为起始点可行,那么 f(r) = 1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值