#P16253. [InfO(1) Cup 2021 国际轮]Bricks积木
[InfO(1) Cup 2021 国际轮]Bricks积木
题目描述
小方块和小三角收到了一份由小圆圈送来的礼物:一列共有 块的玩具积木。
积木从左到右编号为 。所有积木的高度两两不同。第 块积木具有:
- 高度 ;
- 颜色 。
其中:
C[i] = true表示红色;C[i] = false表示紫色。
如果一块积木右侧不存在比它更高且与它颜色相同的积木,就称这块积木是有趣的。
你可以至多选择一块积木并改变它的颜色,即:
- 从红色变为紫色;或
- 从紫色变为红色。
也可以不改变任何积木。
请计算经过上述操作后,有趣积木数量的最大可能值。
调用协议
你需要实现以下函数:
int solve(int N, bool C[], int H[]);
该函数只会被调用一次。
需要注意,数组 C 和 H 的实际长度不一定恰好为 ,可能更长。对所有 ,保证:
H[i] = 0
C[i] = false
函数应返回最多能够得到多少块有趣积木。
选手不应实现 main 函数。
样例 grader 的输入格式
样例 grader 从标准输入读取:
- 第一行一个整数 ;
- 第二行 个 整数表示颜色,其中
0表示紫色,1表示红色; - 第三行 个整数表示高度 。
随后输出调用 solve 得到的返回值。
数据范围
- ;
- ;
- 所有高度两两不同。
子任务
| 子任务 | 分值 | 限制 |
|---|---|---|
| 1 | 9 | 不需要改变原数组中的任何颜色 |
| 2 | 21 | 对所有 ,均有 C[i] = true |
| 3 | 13 | |
| 4 | 29 | |
| 5 | 28 | 无额外限制 |
样例
输入:
6
0 0 1 0 0 1
7 8 6 2 3 5
输出:
5
样例说明
改变第一块或第二块积木的颜色后,高度为
7 8 6 3 5
的五块积木会成为有趣积木,因此答案为 。
@下发文件