【蓝桥杯每日一题】3.25

news2025/3/29 8:31:41

Alt

🏝️专栏: 【蓝桥杯备篇】
🌅主页: f狐o狸x

“OJ超时不是终点,是算法在提醒你该优化时间复杂度了!”


目录

3.25 差分数组

一、一维差分

        题目链接:

        题目描述:

        解题思路:

        解题代码:

二、海底高铁

        题目链接:

        题目描述:

        解题思路:

        解题代码:

三、二维差分

        题目链接:

        题目描述:

        解题思路:

        解题代码:

四、地毯

        题目链接:

        题目描述:

        解题思路:

        解题代码:


3.25 差分数组

        我们直接用一道题来了解差分数组吧

一、一维差分

        题目链接:

        【模板】差分

        题目描述:

        解题思路:

        还是可以用暴力枚举来搞定,我们把整个数组遍历一遍,再把对应位置加上x就行了,但是这样绝对是会超时长滴,不然我干嘛用这个例题?

        对于类似的题,我们就可以用差分算法,和前缀和数组类似,我们需要预处理一个差分数组出来

        这个数组的好处就是当你要在 l ~ r 的区间加上 x 的时候(图中用2~5)来表示,就只需要在差分数组中的 l 位置加上 x ,r + 1 位置减去 x ,再还原为原数组就行

         也就是:a[ l ] += x; a[ r + 1 ] -= x;

        此时还有人要问:煮波煮波,那怎么还原数组呢?其实把差分数组做一个前缀和运算即可还原 证明如下:

        解题代码:

#include <iostream>
using namespace std;

typedef long long LL;

const int N = 1e5 + 10;

LL a[N];

int n, m;

int main()
{
    cin >> n >> m;
    // 利用差分的性质预处理差分数组
    for(int i = 1; i <= n; i++)
    {
        LL x;cin >> x;
        a[i] += x;
        a[i + 1] -= x;
    }
    // m次操作
    while(m--)
    {
        LL l, r, x; cin >> l >> r >> x;
        a[l] += x;
        a[r + 1] -= x;
    }
    // 利用前缀和还原数组
    for(int i = 1; i <= n; i++)
    {
        a[i] = a[i - 1] + a[i];
        cout << a[i] << " ";
    }

    
    return 0;
}

二、海底高铁

        题目链接:

        P3406 海底高铁

        题目描述:

        解题思路:

        这里我们只需要知道这个人每段铁路一共坐了几次,再判断是直接买票划算还是买卡划算,最后累加输出即可

        解题代码:

#include <iostream>

using namespace std;

const int N = 1e5 + 10;

typedef long long LL;

LL f[N];

int n, m;

int main()
{
	cin >> n >> m;
	int l, r; cin >> l;
	// 利用差分记录每段铁路经过的次数
	for (int i = 2; i <= m; i++)
	{
		cin >> r;
		if (l <= r) f[l] += 1, f[r] -= 1;
		else f[r] += 1, f[l] -= 1;
		l = r;
	}
	// 还原数组
	for (int i = 1; i <= n; i++)
	{
		f[i] = f[i - 1] + f[i];
	}

	LL ret = 0;
	for(int i = 1; i < n; i++)
	{
		LL a, b, c; cin >> a >> b >> c;
		ret += min(a * f[i], c + b * f[i]);
	}
	cout << ret << endl;

	return 0;
}

三、二维差分

        题目链接:

        【模板】二维差分

        题目描述:

        解题思路:

        如图所示我们需要对以下结果数组进行操作:

f[x1][y1] + k

f[x2 + 1][y1] - k

f[x1][y2 + 1] - k

f[x2 + 1][y2 + 1] - k

         这样我们累加起来以后就可以得到二维数组中区间+k的操作

        解题代码:

#include <iostream>

using namespace std;

typedef long long LL;

const int N = 1010;

LL f[N][N];

int n, m, q;

void insert(int x1, int y1, int x2, int y2, int x)
{
    f[x1][y1] += x;
    f[x2 + 1][y1] -= x;
    f[x1][y2 + 1] -= x;
    f[x2 + 1][y2 + 1] += x;
}

int main()
{
    cin >> n >> m >> q;
    // 预处理二维齐差分数组
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            LL a; cin >> a;
            insert(i, j, i , j ,a);
        }    
    }
    while(q--)
    {
        LL x1, y1, x2, y2, a; cin >> x1 >> y1 >> x2 >> y2 >>a;
        insert(x1, y1, x2, y2, a);
    }
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= m; j++)
        {
            f[i][j] = f[i - 1][j] + f[i][j - 1] - f[i - 1][j - 1] + f[i][j];
            cout << f[i][j] << " ";
        }
        cout << endl;
    }
    
    return 0;
}

四、地毯

        题目链接:

        P3397 地毯

        题目描述:

        

        解题思路:

        这题其实就是把地毯对应的区域全加上一,最后再输出数组即可解决

        解题代码:
 

#include <iostream>

using namespace std;

const int N = 1010;

int f[N][N];

int n, m;

void insert(int x1, int y1, int x2, int y2, int a)
{
	f[x1][y1] += a;
	f[x2 + 1][y1] -= a;
	f[x1][y2 + 1] -= a;
	f[x2 + 1][y2 + 1] += a;
}

int main()
{
	cin >> n >> m;
	while (m--)
	{
		int x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2;
		insert(x1, y1, x2, y2, 1);
	}

	for (int i = 1; i <= n; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			f[i][j] = f[i - 1][j] + f[i][j - 1] - f[i - 1][j - 1] + f[i][j];
			cout << f[i][j] << " ";
		}
		cout << endl;
	}

	return 0;
}

        今天就到这里吧,下一期我们将讲解二分算法~886~

        蓝桥杯选手日常:
        睡醒→看题→看不懂→搜题解→抄代码→被卡常→怒删重写→提交→WA

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

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

相关文章

前端NVM安装

https://v0.dev/chat/settings 本地启动环境 1安装 nvm 2安装node nvm install v18.19.0 nvm install v20.9.0 nvm use 18 node -v 3安装 pnpm npm install -g pnpm 或者 npm i -g pnpm 4启动 代码 目录下 执行 pnpm i pnpm run dev 4.1到代码目录下 4.2直接cmd…

Springboot应用配置github自动流部署 深入理解CI/CD:构建、测试和部署的自动化完整流程

什么是 CI 持续集成 通过自动化的流程和工具&#xff0c;提高软件开发的效率、质量和交付速度。 持续集成是开发团队通过将代码的不同部分集成到共享存储库中&#xff0c;并频繁地进行构建和测试&#xff0c;以确保代码的一致性和稳定性。 概念 在现在的开发模式中&#x…

解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《深度探秘&#xff1a;AI界的007》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、什么是Docker 2、什么是Ollama 二、准备工作 1、操…

c++R 格式

问题描述 小蓝最近在研究一种浮点数的表示方法&#xff1a;RR 格式。对于一个大于 0 的浮点数 dd&#xff0c;可以用 RR 格式的整数来表示。给定一个转换参数 nn&#xff0c;将浮点数转换为 RR 格式整数的做法是: 将浮点数乘以 2n2n&#xff1b; 四舍五入到最接近的整数。 …

qt QOffscreenSurface详解

1、概述 QOffscreenSurface 是 Qt 中用于离屏渲染的一个类。它允许在不直接与屏幕交互的情况下进行 OpenGL 渲染操作&#xff0c;常用于生成纹理、预渲染场景等。通过 QOffscreenSurface&#xff0c;可以在后台创建一个渲染表面&#xff0c;进行绘制操作&#xff0c;并将结果捕…

基于Spring Boot的消防物资存储系统的设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

深度学习算法清单

目录 1. 神经网络必备基础知识点 2. 神经网络前向传播与反向传播 3. 网络模型整体架构分析实例 4. 神经网络建模效果分析 5. 激活函数与过拟合问题解决 6. 卷积神经网络核心知识点 7. 卷积建模流程与各参数作用分析 8. 池化层的作用与效果 9. 经典卷积神经网络架构分析…

【杂记三】Cython加速模块cython_nms未编译

一、问题 from cython_nms import nms as cnms ModuleNotFoundError: No module named cython_nms Github download 需要生成如下的 二、安装编译编译安装 cython_nms 1. 确保已经安装了 Cython conda activate your-env pip install cython2. 编译编译 cython_nms 进入编译…

订票系统|基于Java+vue的火车票订票系统(源码+数据库+文档)

订票系统目录 基于Springbootvue的火车票订票系统 一、前言 二、系统设计 三、系统功能设计 1会员信息管理 2 车次信息管理 3订票订单管理 4留言板管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍…

近场通信(NFC)在电动车启动系统中的技术实现路径

电动车NFC一键启动系统基于13.56MHz频段实现非接触控制&#xff0c;技术方案要点如下&#xff1a; ‌系统架构‌ ‌硬件核心‌ NFC芯片&#xff08;如N32G45x&#xff09;处理通信协议&#xff0c;支持手机/卡片识别STM32主控解析指令&#xff0c;AES-128加密模块保障双向认证…

斜线、短横、空格,三种分隔日期的优雅解析(Python | DeepSeek)

标准日期解析操作&#xff0c;str.replace链式如灵蛇蜿蜒&#xff0c;三元表达式像空灵仙家妙法。 笔记模板由python脚本于2025-03-25 22:32:24创建&#xff0c;本篇笔记适合三元表达式、字符串操作修习的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在…

自动化逆向框架使用(Objection+Radare2)

1. 工具链架构与核心优势 1.1 动静结合逆向体系 graph LR A[动态分析] -->|Objection实时Hook| B[关键点定位] B --> C[行为数据捕获] D[静态分析] -->|Radare2深度解析| E[控制流重建] E --> F[漏洞模式识别] B --> F C --> F 组合优势对比&…

[特殊字符] 2025蓝桥杯备赛Day13——P10984 [蓝桥杯 2023 国 Python A] 残缺的数字

&#x1f50d; 2025蓝桥杯备赛Day13——P10984 [蓝桥杯 2023 国 Python A] 残缺的数字 &#x1f680; 题目速览 题目难度&#xff1a;⭐⭐⭐&#xff08;需掌握位运算与组合数学&#xff09; 考察重点&#xff1a;二进制状态处理、位运算、乘法原理、枚举 P10984 [蓝桥杯 2…

线程控制与线程库

目录 解析tid 线程的地址空间布局 线程栈 我们来学习线程控制与线程库 解析tid #include<iostream> #include<string> #include<cstdio> #include<cstring> #include<unistd.h> #include<thread> using namespace std;int shared_val…

P1182 数列分段 Section II

P1182 数列分段 Section II - 洛谷 题目描述 对于给定的一个长度为 N 的正整数数列 A1​∼AN​&#xff0c;现要将其分成 M&#xff08;M≤N&#xff09;段&#xff0c;并要求每段连续&#xff0c;且每段和的最大值最小。 关于最大值最小&#xff1a; 例如一数列 4 2 4 5 1…

比手动备份快 Iperius全自动加密备份,NAS/云盘/磁带机全兼容

IperiusBackupFull是一款专为服务器和工作站设计的备份解决方案&#xff0c;它同时也是一款针对Windows 7/8/10/11/Server系统的简洁且可靠的备份软件。该软件支持增量备份、数据同步以及驱动器镜像&#xff0c;确保能够实现完全的系统恢复。在备份存储方面&#xff0c;Iperius…

2025最新版Ubuntu Server版本Ubuntu 24.04.2 LTS下载与安装-详细教程,细致到每一步都有说明

官网 https://ubuntu.com/ 下载 点击菜单 Prodercts> Ubuntu OS>Ubuntu Server 点击下载 下载后会有个弹窗 安装 选择第一个 install Ubuntu Server 直接默认&#xff0c;选择English 【默认】 选择键盘布局【默认】 选择安装配置【默认】 配置网络 我这里选择…

更新测试环境构建命令以解决构建失败问题

本段代码解决 更新测试环境构建命令以解决构建失败问题 //本项目是reactumi3antdesign 搭建的后台管理系统 "build:test": "cross-env UMI_ENVtest NODE_OPTIONS--openssl-legacy-provider umi build"**原因&#xff1a;**Node.js v17 的 OpenSSL 3.0 与旧…

树莓派5-GPIO和40针引脚

1.树莓派5引脚图 2.GPIO 引脚作用 (1) 电压 板上有两个 5V 引脚和两个 3.3V 引脚&#xff0c;以及一些不可配置的接地引脚 (0V)。其余引脚均为通用 3.3V 引 脚&#xff0c;这意味着输出设置为 3.3V&#xff0c;输入可接 3.3V。 (2) 输出 指定为输出引脚的 GPIO 引脚可设置为…

【数据库】sql错题详解

1. 执行子查询 SELECT 供应商号 FROM 订购单 WHERE 职工号 IN (E1, E3) GROUP BY 供应商号 HAVING COUNT(DISTINCT 职工号) 2筛选职工号为 E1 或 E3 的记录&#xff1a; 依据 WHERE 职工号 IN (E1, E3) 这个条件&#xff0c;从 订购单 表中把职工号为 E1 或者 E3 的记录筛选出…