蓝桥杯练习题——前缀和

news2024/11/15 11:16:12

1.壁画

在这里插入图片描述

思路

1.求最坏情况下,画的墙总和是多少
2.画的墙在中间连续一段,画了的墙长度是 n / 2 向上取整
3.取最大的 n / 2 向上取整区间和

#include<iostream>
using namespace std;
const int N = 5e6 + 10;
char s[N];
int a[N];
int t, n;

int main(){
    cin>>t;
    for(int i = 1; i <= t; i++){
        cin>>n;
        // 从下标1开始读取
        cin>>s + 1;
        for(int i = 1; i <= n; i++){
            int x = s[i] - '0';
            a[i] = a[i - 1] + x;
        }
        // n / 2 向上取整
        int x = (n - 1) / 2 + 1;
        int res = 0;
        for(int i = x; i <= n; i++){
            res = max(res, a[i] - a[i - x]);
        }
        // Case #1: 6
        cout<<"Case #"<<i<<": "<<res<<endl;
    }
    return 0;
}

2.前缀和

在这里插入图片描述

思路

模板题

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int n, m;

int main(){
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= n; i++){
        scanf("%d", &a[i]);
        a[i] += a[i - 1];
    }
    int l, r;
    while(m--){
        scanf("%d%d", &l, &r);
        printf("%d\n", a[r] - a[l - 1]);
    }
    return 0;
}

3.子矩阵的和

在这里插入图片描述

思路

模板题

#include<iostream>
using namespace std;
const int N = 1e3 + 10;
int a[N][N];
int n, m, q;

int main(){
    scanf("%d%d%d", &n, &m, &q);
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            scanf("%d", &a[i][j]);
            a[i][j] += a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1];
        }
    }
    int x1, y1, x2, y2;
    while(q--){
        scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
        printf("%d\n", a[x2][y2] - a[x1 - 1][y2] - a[x2][y1 - 1] + a[x1 - 1][y1 - 1]);
    }
    return 0;
}

4.K倍区间

在这里插入图片描述

思路

1.求有多少个 (a[r] - a[l - 1]) % k = 0,转化成 a[r] % k = a[l - 1] % k,即有多少个 l 和 r 匹配
2.用哈希表 cnt[x] 存储余数为 x 有多少个
3.右边界 a[r] 取 0 也是 k 的倍数,所以 cnt[0] 要初始化为 1,作为左边界
在这里插入图片描述

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
long long a[N];
int cnt[N];
int n, k;

int main(){
    scanf("%d%d", &n, &k);
    for(int i = 1; i <= n; i++){
        scanf("%d", &a[i]);
        a[i] += a[i - 1];
    }
    long long res = 0;
    cnt[0] = 1;
    for(int i = 1; i <= n; i++){
    	// 第一次是找到左端点,下次找到余数相同的右端点再累加
        res += cnt[a[i] % k];
        cnt[a[i] % k]++;
    }
    printf("%lld", res);
    return 0;
}

5.统计子矩阵

在这里插入图片描述

思路

1.由于每个数都是大于等于 0,保证了单调性,数越多总和越大
2.右边界往右走,左边界也一定往右走
3.暴力枚举上下边界,双指针枚举左右边界
4.方案数最多有 C(500, 2) * C(500, 2),要开 long long

#include<iostream>
using namespace std;
const int N = 510;
int a[N][N];
int n, m, k;

int main(){
    scanf("%d%d%d", &n, &m, &k);
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            scanf("%d", &a[i][j]);
            a[i][j] += a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1];
        }
    }
    // i, l   i, r
    // j, l   j, r 
    long long res = 0;
    for(int i = 1; i <= n; i++){
        for(int j = i; j <= n; j++){
            for(int l = 1, r = 1; r <= m; r++){
                while(l <= r && a[j][r] - a[j][l - 1] - a[i - 1][r] + a[i - 1][l - 1] > k) l++;
                if(l <= r) res += r - l + 1;
            }
        }
    }
    printf("%lld", res);
    return 0;
}

6.递增三元组

在这里插入图片描述

思路

1.枚举 B,对于每个 bj 有多少个 ai 小于 bj,有多少个 ck 大于 bj
2.cnt[i] 为 i 在 a 中出现了多少次,s[i] 为 在 a 中 0 ~ i 一共出现了多少次

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N], b[N], c[N];
int cnt1[N], cnt2[N], s1[N], s2[N];
int n;

int main(){
    scanf("%d", &n);
    for(int i = 1; i <= n; i++){
        scanf("%d", &a[i]);
        cnt1[a[i]]++;
    }
    for(int i = 1; i <= n; i++) scanf("%d", &b[i]);
    for(int i = 1; i <= n; i++){
        scanf("%d", &c[i]);
        cnt2[c[i]]++;
    }
    for(int i = 0; i <= 100000; i++){
        s1[i] = s1[i - 1] + cnt1[i];
        s2[i] = s2[i - 1] + cnt2[i];
    }
    long long res = 0;
    // 枚举 B 数组
    for(int i = 1; i <= n; i++){
        res += 1ll * s1[b[i] - 1] * (s2[100000] - s2[b[i]]);
    }
    printf("%lld", res);
    return 0;
}

7.激光炸弹

在这里插入图片描述

思路

1.枚举每个 r * r 区域的前缀和,求最大值
2.题目下标从 0 开始,所以我们要加 1,防止出现 -1 下标

#include<iostream>
using namespace std;
const int N = 5e3 + 10;
int a[N][N];
int n, r;

int main(){
    scanf("%d%d", &n, &r);
    r = min(r, 5001);
    int x, y, w;
    while(n--){
        scanf("%d%d%d", &x, &y, &w);
        x++, y++;
        a[x][y] += w;
    }
    for(int i = 1; i <= 5001; i++){
        for(int j = 1; j <= 5001; j++){
            a[i][j] += a[i - 1][j] + a[i][j - 1] - a[i - 1][j - 1];
        }
    }
    long long res = 0;
    for(int i = r; i <= 5001; i++){
        for(int j = r; j <= 5001; j++){
            res = max(res, 1ll * a[i][j] - a[i - r][j] - a[i][j - r] + a[i - r][j - r]);
        }
    }
    printf("%lld", res);
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1486766.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【RHEL】三分钟启动完整版vim——vim9 huge编译安装

详细安装步骤 一键安装传送门 Vim提供了许多快捷键和命令来加快文本编辑的速度和效率。它具有强大的搜索和替换功能&#xff0c;支持多种文件格式&#xff0c;可以通过插件扩展功能&#xff0c;并提供了强大的自动补全功能。   然而在大多数Linux操作系统中利用系统软件源安装…

【深度学习笔记】计算机视觉——锚框

锚框 目标检测算法通常会在输入图像中采样大量的区域&#xff0c;然后判断这些区域中是否包含我们感兴趣的目标&#xff0c;并调整区域边界从而更准确地预测目标的真实边界框&#xff08;ground-truth bounding box&#xff09;。 不同的模型使用的区域采样方法可能不同。 这里…

事故预测 | Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测

事故预测 | Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测 目录 事故预测 | Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测预测效果基本描述程序设计参考资料 预测效果 基本描述 Matlab基于FuzzySVR模糊支持向量机多特征变量事故预测 运行环境: Matlab2023及以 上…

Nature 研究亮点(Volume 626 Issue 8001, 29 February 2024)

文章目录 激光雕刻肥皂膜卵细胞的回收系统巴斯克语的起源产后抑郁症的治疗 激光雕刻肥皂膜 研究者&#xff1a;Haitao Xu 和 Yu Zhao&#xff0c;清华大学&#xff0c;北京。 发现&#xff1a;在特定条件下&#xff0c;可以使用激光在肥皂膜上进行雕刻。肥皂膜由洗涤剂分子&am…

ElasticSearch DSL语法

一、文档批量操作 1.批量获取文档数据 批量获取文档数据是通过_mget的API来实现的 (1)在URL中不指定index和type 请求方式&#xff1a;GET 请求地址&#xff1a;_mget 功能说明 &#xff1a; 可以通过ID批量获取不同index和type的数据 请求参数&#xff1a; docs : 文档数…

Tomcat介绍在IDEA中创建JavaWeb工程

文章目录 一、WEB服务器服务器概述使用Java代码手写web服务器 二、服务器软件Web服务器服务器软件的使用步骤 三、TomcatTomcat的下载Tomcat的安装与卸载Tomcat的启动与关闭常见问题 四、新建Java Web项目并将项目部署到tomcat中新建Java Web项目将项目部署到Tomcat中出现的问题…

在你的 Vue + Electron 项目里,引入 ESLint

因为我的项目是基于 Electron 平台的 Web 应用&#xff0c;使用 Vue 3 实现&#xff0c;而且用了 TypeScript&#xff0c;所以&#xff0c;在引入 ESLint 的时候&#xff0c;要考虑好几种规范的问题。 文章目录 零、简介1. 规则2. 配置文件3. 共享配置4. 插件5. 解析器6. 自定义…

Unity 切换场景

场景切换前必须要将场景拖动到Build中 同步加载场景 using System.Collections; using System.Collections.Generic; //using UnityEditor.SearchService; using UnityEngine; // 场景管理 需要导入该类 using UnityEngine.SceneManagement;public class c3 : MonoBehaviour {…

你是否知道Python的列表翻转、排序和多维列表

1.reverse() 表示翻转列表中的元素&#xff0c;不会生成新列表 list1 [2343, 55, 4, 345, 676, 768] list1.reverse() print(list1) # [768, 676, 345, 4, 55, 2343] 2.sort() 对原列表元素进行排序&#xff0c;默认是升序 list1 [2343, 55, 4, 345, 676, 768] list1…

在Python中使用多线程(通俗版本)

一、多线程的介绍&#xff1a; 1.进程 通常一个进程包含一个或者多个线程&#xff0c;每个进程有自己独立的一块内存空间&#xff0c;所有的线程共享这一块空间&#xff0c;例如&#xff1a;在Windows操作系统中&#xff0c;一个运行的xx.exe就是一个进程。 2.线程 一个进程…

lua调用C++函数

第一步搭建lua的环境. win10 lua环境搭建-CSDN博客 我使用的环境是win10vs2015lua54 先来个最简单的lua调用C函数, 无参数无返回值的 第一步:定义C函数. int CTest(lua_State* L) // 返回值是固定的int类型,返回0表示没有返回参数,返回1表示有一个返回参数 {std::cout &l…

什么是支持向量机(Support vector machine)和其原理

作为机器学习的基础算法&#xff0c;SVM被反复提及&#xff0c;西瓜书、wiki都能查到详细介绍&#xff0c;但是总是觉得还差那么点&#xff0c;于是决定自己总结一下。 一、什么是SVM&#xff1f; 1、解决什么问题&#xff1f; SVM&#xff0c;最原始的版本是用于最简单的线…

【C++从0到王者】第五十站:B树

文章目录 一、内查找与外查找1.内查找2.外查找 二、B树概念三、B树的插入1.B树的插入分析2.B树插入总结3.插入代码实现4.B树满树和最空时候的对比5.B树的删除6.遍历B树7.B树的性能分析 一、内查找与外查找 1.内查找 像我们之前所用的在内存中的查找就是内查找 种类数据格式时…

Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行

Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行 目录 Arduino应用开发——使用GUI-Guider制作LVGL UI并导入ESP32运行前言1 使用GUI-Guider设计UI1.1 创建工程1.2 设计UI 2 ESP工程导入UI2.1 移植LVGL2.2 移植UI文件2.3 调用UI文件2.4 烧录测试 结束语 前言 GU…

STM32(5) GPIO(2)输出

1.点亮LED 1.1 推挽接法和开漏接法 要想点亮LED&#xff0c;有两种接法 推挽接法&#xff1a; 向寄存器写1&#xff0c;引脚输出高电平&#xff0c;LED点亮&#xff1b;向寄存器写0&#xff0c;引脚输出低电平&#xff0c;LED熄灭。 开漏接法&#xff1a; 向寄存器写0&…

杂记-买华强北电子产品的教训

之前不信邪&#xff0c;去华强北买了一个西部数据所谓全新的机械硬盘&#xff0c;1T&#xff0c;差不多300元。用了不到一年就坏了。然后去官网查S/N&#xff0c;结果查无device。Onedrive同步的时候&#xff0c;我把同步路径设置为机械硬盘&#xff0c;结果机械硬盘崩的时候&a…

HarmonyOS Next 实现登录注册页面(ARKTS) 并使用Springboot作为后端提供接口

1. HarmonyOS next ArkTS ArkTS围绕应用开发在 TypeScript &#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 以下代码是一个基于…

【和鲸冬令营】通过数据打造爆款社交APP用户行为分析报告

【&#x1f40b;和鲸冬令营】通过数据打造爆款社交APP用户行为分析报告 文章目录 【&#x1f40b;和鲸冬令营】通过数据打造爆款社交APP用户行为分析报告1 业务背景2 数据说明3 数据探索性分析4 用户行为分析4.1 用户属性与行为关系分析4.2 转化行为在不同用户属性群体中的分布…

Android之MQTT的使用

MQTT的简单介绍 MQTT是广泛应用于物联网的传输协议&#xff0c;基于TCP MQTT有一个代理服务器&#xff0c;其客户端可以订阅主题或向一个主题发送消息&#xff0c;从而实现通信 MQTT 设计了 3 个 QoS 等级。 QoS 0&#xff1a;消息最多传递一次&#xff0c;如果当时客户端不…

Jmeter基础使用---Token鉴权接口关联

接口测试流程&#xff1a; 查看API接口文档&#xff0c;熟悉接口业务&#xff08;地址、端口、参数、鉴权、状态码&#xff09;设计接口测试用例&#xff08;正例&#xff1a;正确的结果&#xff1b;反例&#xff1a;鉴权异常、参数异常、兼容异常、其他异常&#xff09;使用接…