【蓝桥杯每日一题】3.25

news/2025/3/30 11:19:40/

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.ppmy.cn/news/1583512.html

相关文章

Unity Shader编程】之复杂光照

在Unity Shader的LightMode标签中&#xff0c;除了前向渲染和延迟渲染外&#xff0c;还支持多种渲染模式设置。以下是主要分类及用途&#xff1a; 一、核心渲染路径模式 前向渲染相关 ForwardBase 用于基础光照计算&#xff0c;处理环境光、主平行光、逐顶点/SH光源及光照贴图。…

Windows命令提示符(CMD) 中切换目录主要通过 cd(Change Directory)命令实现

在 Windows命令提示符&#xff08;CMD&#xff09; 中切换目录主要通过 cd&#xff08;Change Directory&#xff09;命令实现。以下是详细的切换目录方式及常见用法示例&#xff1a; 使用技巧&#xff1a; 1.在文件夹的地址栏&#xff0c;直接输出cmd 即可跳转到当前的文档。…

系统分析师常考题目《论面向对象分析方法及其应用》

软考系统分析师论文范文系列 【摘要】 2022年6月&#xff0c;我所在团队承接了某金融机构“智能信贷风控系统”的设计与开发任务&#xff0c;我作为系统分析师主导了需求分析与架构设计工作。该系统旨在通过数据驱动的动态风控模型&#xff0c;优化信贷审批流程&#xff0c;提…

从零开始的大模型强化学习框架verl解析

之前在职的时候给一些算法的同学讲解过verl的框架设计、实现细节以及超参配置&#xff0c;写这篇文章姑且作为离职修养这段时期的复健。 本文中提到的做法和思路可能随着时间推移有变化&#xff0c;或者是思想迪化&#xff0c;仅代表个人理解。如果有错漏的地方还请指出。 现…

C#基础学习(六)函数的变长参数和参数默认值

什么是变长参数呢&#xff1f; 指的是你传入函数中的形参可以不定项性&#xff0c;你可以输入一个数组进去&#xff0c;就相当于有数组长度那么多的参数可以拿来使用。那么需要怎么来实现呢&#xff0c;就一个关键字params,这个关键字的作用就是当你写在函数参数传入的地方&…

相生、相克、乘侮、复杂病机及对应的脏腑功能联系

一、五行相生关系&#xff08;母子关系&#xff09; 五行生序脏腑关系生理表现举例木生火肝&#xff08;木&#xff09;滋养心&#xff08;火&#xff09;肝血充足则心血旺盛火生土心&#xff08;火&#xff09;温煦脾&#xff08;土&#xff09;心阳充足则脾胃运化功能正常土…

问题:md文档转换word,html,图片,excel,csv

文章目录 问题&#xff1a;md文档转换word&#xff0c;html&#xff0c;图片&#xff0c;excel&#xff0c;csv&#xff0c;ppt**主要职责****技能要求****发展方向****学习建议****薪资水平** 方案一&#xff1a;AI Markdown内容转换工具打开网站md文档转换wordmd文档转换pdfm…

关于伽马变换小记

伽马变换&#xff08;Gamma Correction&#xff09;讲解 1. 伽马变换的基本概念 伽马变换&#xff08;Gamma Correction&#xff09;是一种非线性的灰度变换方法&#xff0c;主要用于调整图像的亮度和对比度&#xff0c;以适应人眼视觉特性或设备特性。它广泛应用于图像增强、…