蓝桥杯每日一题:壁画(前缀和)

题目描述:

Thanh 想在一面被均分为 N 段的墙上画一幅精美的壁画。

每段墙面都有一个美观评分,这表示它的美观程度(如果它的上面有画的话)。

不幸的是,由于洪水泛滥,墙体开始崩溃,所以他需要加快他的作画进度!

每天 Thanh 可以绘制一段墙体。

在第一天,他可以自由的选择任意一段墙面进行绘制。

在接下来的每一天,他只能选择与绘制完成的墙面相邻的墙段进行作画,因为他不想分开壁画。

在每天结束时,一段未被涂颜料的墙将被摧毁(Thanh 使用的是防水涂料,因此涂漆的部分不能被破坏),且被毁掉的墙段一定只与一段还未被毁掉的墙面相邻。

Thanh 的壁画的总体美观程度将等于他作画的所有墙段的美观评分的总和。

Thanh想要保证,无论墙壁是如何被摧毁的,他都可以达到至少 B 的美观总分。

请问他能够保证达到的美观总分 B的最大值是多少。

输入格式

第一行包含整数 T,表示共有 T组测试数据。

每组数据的第一行包含整数 N。

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

输出格式

每组数据输出一个结果,每个结果占一行。

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

数据范围

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

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

在第一个样例中,无论墙壁如何被破坏,Thanh都可以获得 66 分的美观总分。在第一天,他可以随便选一个美观评分3的墙段进行绘画。在一天结束时,第一部分或第四部分将被摧毁,但无论哪一部分都无关紧要。在第二天,他都可以在另一段美观评分 33 的墙段上作画。

在第二个样例中,Thanh 在第一天选择最左边的美观评分为 99 的墙段上作画。在第一天结束时唯一可以被毁掉的墙体是最右边的那段墙体,因为最左边的墙壁被涂上了颜料。在第二天,他可以选择在左数第二段评分为 55 的墙面上作画。然后右数第二段墙体被摧毁。请注意,在第二天,Thanh不能选择绘制第三段墙面,因为它不与任何其他作画墙面相邻。这样可以获得 1414 分的美观总分。

解题思路:

每天画一幅,冲毁一幅,且冲毁的只能是至少一个邻边没有墙,不能从中间冲毁;每天画必须和已画的相邻。

得到结论最多能画(n+1)/2 = k幅画。

于是直接枚举每个k区间,比较max。k区间的总评分用前缀和来求取socre = s[i] - s[i-k];(i从k-n)

参考代码:

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
const int N = 5e6+10;
int s[N];
char str[N];
int n;

int main()
{
    scanf("%d", &n);
    for(int ca=1;ca<=n;ca++)
    {
        int x;
        cin>>x;
        cin>>str+1;
        for(int i=1;i<=x;i++)
          s[i] = s[i-1] + str[i] - '0';
        
        int sum = 0,m = (x+1)/2;
        for(int i=m;i<=x;i++) sum = max(sum,s[i] - s[i-m]);
        printf("Case #%d: %d\n",ca,sum);
    }
    return 0;
}

相关推荐

  1. 每日壁画前缀

    2024-04-02 21:44:02       33 阅读
  2. 每日(python)

    2024-04-02 21:44:02       61 阅读
  3. 每日(BFS)

    2024-04-02 21:44:02       40 阅读
  4. 每日(dfs)

    2024-04-02 21:44:02       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-02 21:44:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-02 21:44:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-02 21:44:02       82 阅读
  4. Python语言-面向对象

    2024-04-02 21:44:02       91 阅读

热门阅读

  1. SpringCloud面试题——Nacos

    2024-04-02 21:44:02       32 阅读
  2. 私域流量黄金时代:SCRM赋能企业深度运营

    2024-04-02 21:44:02       32 阅读
  3. ARM_02-光控灯

    2024-04-02 21:44:02       31 阅读
  4. 【力扣】45.跳跃游戏Ⅱ

    2024-04-02 21:44:02       30 阅读
  5. NAT协议

    NAT协议

    2024-04-02 21:44:02      35 阅读
  6. 蓝桥杯刷题_day10

    2024-04-02 21:44:02       37 阅读
  7. python数据类型内置方法(部分明天补充)

    2024-04-02 21:44:02       40 阅读
  8. C语言中输入函数scanf与gets得区别

    2024-04-02 21:44:02       35 阅读