【AcWing】蓝桥杯集训每日一题Day2|前缀和|562.壁画(C++)

文章探讨了Thanh在受限条件下保证壁画美观总分的问题,关键在于使用前缀和技巧高效计算连续作画区域的美观总和。

562. 壁画

562. 壁画 - AcWing题库
难度:中等
时/空限制:1s / 64MB
总通过数:4154
总尝试数:10197
来源:
Google Kickstart2018 Round H Problem B
算法标签 思维题枚举前缀和

题目内容

Thanh 想在一面被均分为 N 段的墙上画一幅精美的壁画。
每段墙面都有一个美观评分,这表示它的美观程度(如果它的上面有画的话)。
不幸的是,由于洪水泛滥,墙体开始崩溃,所以他需要加快他的作画进度!
每天 Thanh 可以绘制一段墙体。
在第一天,他可以自由的选择任意一段墙面进行绘制。
在接下来的每一天,他只能选择与绘制完成的墙面相邻的墙段进行作画,因为他不想分开壁画。
在每天结束时,一段未被涂颜料的墙将被摧毁(Thanh 使用的是防水涂料,因此涂漆的部分不能被破坏),且被毁掉的墙段一定只与一段还未被毁掉的墙面相邻。
Thanh 的壁画的总体美观程度将等于他作画的所有墙段的美观评分的总和。
Thanh想要保证,无论墙壁是如何被摧毁的,他都可以达到至少 B 的美观总分。
请问他能够保证达到的美观总分 B 的最大值是多少。

输入格式

第一行包含整数 T,表示共有 T 组测试数据。
每组数据的第一行包含整数 N。
第二行包含一个长度为 N 的字符串,字符串由数字 0∼9 构成,第 i 个字符表示第 i 段墙面被上色后能达到的美观评分。

输出格式

每组数据输出一个结果,每个结果占一行。
结果表示为 Case #x: y,其中 x 为组别编号(从 1 开始),y 为 Thanh 可以保证达到的美观评分的最大值。

数据范围

1 ≤ T ≤ 100 1≤T≤100 1T100
存在一个测试点 N = 5 ∗ 1 0 6 N=5∗10^6 N=5106,其他测试点均满足 2 ≤ N ≤ 100 2≤N≤100 2N100

输入样例:
4
4
1332
4
9583
3
616
10
1029384756
输出样例:
Case #1: 6
Case #2: 14
Case #3: 7
Case #4: 31
样例解释

在第一个样例中,无论墙壁如何被破坏,Thanh都可以获得 6 分的美观总分。在第一天,他可以随便选一个美观评分3的墙段进行绘画。在一天结束时,第一部分或第四部分将被摧毁,但无论哪一部分都无关紧要。在第二天,他都可以在另一段美观评分 3 的墙段上作画。
在第二个样例中,Thanh 在第一天选择最左边的美观评分为 9 的墙段上作画。在第一天结束时唯一可以被毁掉的墙体是最右边的那段墙体,因为最左边的墙壁被涂上了颜料。在第二天,他可以选择在左数第二段评分为 5 的墙面上作画。然后右数第二段墙体被摧毁。请注意,在第二天,Thanh不能选择绘制第三段墙面,因为它不与任何其他作画墙面相邻。这样可以获得 14 分的美观总分。

题目解析
  1. 每一段墙上有一个评分,有n段
  2. 第一天可以随便选一个位置开始
  3. 画的时候是连续画,不能跳着画,每次画只能在画过墙旁边画,所有画过的画是连续的一段
  4. 每天会画一段墙,每天结束的时候会坏一段墙
  5. 坏掉的墙一定只与一段还未被毁掉的墙面相邻,意思是只能从两边坏,从中间开始坏的话会与两端还未被毁掉的墙面相邻
  6. 当我们停下的时候,所有没画过的墙都已经毁坏掉了
    ![[Pasted image 20240312132723.png]]

一、在最坏的情况下,美观评分值的最大值是多少
数据范围最多有100个数据,其中有一个数据长度为500万,其余所有数据都很小,所有数据的总长大概为500万的级别
需要将时间复杂度控制到 O ( N ) O(N) O(N) O ( log ⁡ N ) O(\log N) O(logN)长度比较小的话也能过

二、先考虑一下最终画的墙的长度是多少
当我们画完的时候,一定是留下中间画完的这一段,而且其余的墙都已经坏掉了,不会出现孤立的线段没有画也没有坏
这个过程是先画再坏,先画再坏,所以画的长度是 [ n 2 [\frac{n}{2} [2n,上取整,其余都是坏掉的
n如果是偶数的话,就是 n 2 \frac{n}{2} 2n,如果是奇数的话,除了第一个,其余的画过的和坏了的各分为 n 2 \frac{n}{2} 2n
( 1 + n 2 下取整 = n 2 上取整 1+\frac{n}{2}下取整=\frac{n}{2}上取整 1+2n下取整=2n上取整)

三、是不是所有长度是 n 2 \frac{n}{2} 2n上取整的区间都一定可以被画出来?
长度为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值