算法刷题day28

目录

  • 引言
  • 一、截断数组
  • 二、双端队列
  • 三、日期统计

引言

这几道题是周赛里的几道题目,第一道题目我没用这种方法,但还是做出来了,用的一种比较特殊的思考方法,就是把每一个点都判断出来,不满足要求的就舍弃,因为 n n n 很小,所以就过了。但第二道题就不一样了,还是要有正确的思路,这样一下子就出来了,就不用太多繁琐的细节判断了,不过慢慢积累,下次见到就会了,加油!


一、截断数组

标签:贪心

思路:如图所示,如果 [ 1 , a ] [1,a] [1,a] 中的奇数和偶数的个数一样,那么 ( a , n ] (a,n] (a,n] 中的奇数和偶数的个数也一样,如果 [ 1 , b ] [1,b] [1,b] 中的奇数和偶数的个数一样,那么 ( a , b ] (a,b] (a,b] 中的奇数和偶数个数也一样,如果 [ 1 , c ] [1,c] [1,c] 中的奇数和偶数的个数相同,那么可得到划分的区间的奇数和偶数个数都一样。所以我们只要找到左半边奇数和偶数个数相同的点,那么这些点划分出来的区间都是满足要求的。还有一个条件就是截断成本不超过 B B B ,那么我们只要把这些满足要求的点的花费放到一个集合里,再升序排列,直到超过 B B B 为止,这时所截断操作的个数是最多的。
在这里插入图片描述

题目描述:

给定一个长度为 n 的整数数组 a1,a2,…,an。如果一个整数数组恰好包含相同数量的奇数元素和偶数元素,就称该数组为一个平衡数组。给定的数组 a 恰好就是一个平衡数组。现在,我们可以将该数组从中间截断,从而得到若干个非空子数组。关于截断操作:每次操作都需要一定成本,具体来说,将数组从 ai 和 ai+1 之间截断,所需成本为 |ai−ai+1|。
所有进行的截断操作的总成本不得超过 B。
所有截断得到的子数组都必须也是平衡数组。
请你计算,在满足所有要求的前提下,最多可以进行多少次截断操作。输入格式
第一行包含两个整数 n,B。第二行包含 n 个整数 a1,a2,…,an。输出格式
一个整数,表示在满足所有要求的前提下,可以进行的截断操作的最多次数。数据范围
前 4 个测试点满足 2≤n≤6。
所有测试点满足 2≤n≤100,1≤B≤100,1≤ai≤100。输入样例1:
6 4
1 2 5 10 15 20
输出样例1:
1
输入样例2:
4 10
1 3 2 4
输出样例2:
0
输入样例3:
6 100
1 2 3 4 5 6
输出样例3:
2

示例代码:

#include <bits/stdc++.h>using namespace std;const int N = 110;int n, B;
int a[N], cost[N];int main()
{ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);cin >> n >> B;for(int i = 1; i <= n; ++i) cin >> a[i];int odd = 0, even = 0, cnt = 0;for(int i = 1; i < n; ++i){if(a[i] % 2) odd++;else even++;if(odd == even) cost[cnt++] = abs(a[i+1] - a[i]);}sort(cost, cost+cnt);int res = 0, sum = 0;for(int i = 0; i < cnt; ++i){sum += cost[i];if(sum > B) break;res++;}cout << res << endl;return 0;
}

二、双端队列

标签:分类讨论、贪心

思路:就是分类讨论的一道题。我们用 a a a b b b 来表示队头和队尾两个元素, l a s t last last 代表上一次取的元素。1. a , b > l a s t a,b > last a,b>last,那么肯定是选小的取出来,不然另一头就永远不会动了。2. a = b > l a s t a=b>last a=b>last,那么从一边取了之后,另一边是不会再取了,所以我们提前模拟看从哪一边取会取得更多就取哪边。3. a ∣ b > l a s t a\ |\ b > last a  b>last, 那么只能取大的一边了。4. a , b < = l a s t a,b <= last a,b<=last ,结束模拟。

题目描述:

给定一个长度为 n 的双端队列 a1,a2,…,an。作为双端队列,我们既可以从队列的左端弹出元素,也可以从队列的右端弹出元素。我们希望弹出尽可能多的元素,并要求所有弹出元素按照弹出顺序进行排列,刚好可以构成一个严格递增的序列。请你计算,最多可以弹出多少个元素。输入格式
第一行包含整数 n。第二行包含 n 个整数 a1,a2,…,an。输出格式
输出一个整数 k,表示最大弹出元素数量。数据范围
前 6 个测试点满足 1≤n≤10。
所有测试点满足 1≤n≤2×105,1≤ai≤2×105。输入样例1:
5
1 2 4 3 2
输出样例1:
4
输入样例2:
7
1 3 5 6 5 4 2
输出样例2:
6
输入样例3:
3
2 2 2
输出样例3:
1
输入样例4:
4
1 2 4 3
输出样例4:
4

示例代码:

#include <bits/stdc++.h>using namespace std;int n;
deque<int> q;int main()
{ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);cin >> n;while(n--){int t; cin >> t;q.push_back(t);}int res = 0, last = 0;while(q.size()){int a = q.front(), b = q.back();if(a > last && b > last){res++;if(a < b) q.pop_front(), last = a;else if(b < a) q.pop_back(), last = b;else {deque<int> backup(q);int t1 = 0, t2 = 0, t = last;while(q.size() && q.front() > last){t1++, last = q.front(), q.pop_front();}q = backup;last = t;while(q.size() && q.back() > last){t2++, last = q.back(), q.pop_back();}q = backup;if(t1 > t2) q.pop_front(), last = a;else q.pop_back(), last = b;}}else if(a > last){res++;q.pop_front();last = a;}else if(b > last){res++;q.pop_back();last = b;}else break;}cout << res << endl;return 0;
}

三、日期统计

标签:暴力枚举、日期问题

思路:就是暴力枚举,每个区间因为年是给定的,所以时间复杂度只有 O ( N 4 ) O(N^4) O(N4) N = 100 N = 100 N=100 ,总的时间为 1 0 8 10 ^ 8 108 ,一秒就能跑出来,然后用 s e t set set 来判重即可。

题目描述:
在这里插入图片描述

示例代码:

#include <bits/stdc++.h>using namespace std;const int N = 110;int nums[N];
unordered_set<int> sset;const int days[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};bool is_leap(int y)
{if(y % 400 == 0 || y % 4 == 0 && y % 100 != 0) return true;return false;
}int get_month_day(int y, int m)
{if(m == 2) return days[m] + is_leap(y);return days[m];
}bool is_vaild(int y, int m, int d)
{if(m < 1 || m > 12 || d < 1 || d > 31) return false;return d <= get_month_day(y,m);
}int main()
{for(int i = 0; i < 100; ++i) cin >> nums[i];int res = 0;for(int y1 = 0; y1 < 100; ++y1){if(nums[y1] != 2) continue;for(int y2 = y1 + 1; y2 < 100; ++y2){if(nums[y2] != 0) continue;for(int y3 = y2 + 1; y3 < 100; ++y3){if(nums[y3] != 2) continue;for(int y4 = y3 + 1; y4 < 100; ++ y4){if(nums[y4] != 3) continue;for(int m1 = y4 + 1; m1 < 100; ++m1){for(int m2 = m1 + 1; m2 < 100; ++m2){for(int d1 = m2 + 1; d1 < 100; ++d1){for(int d2 = d1 + 1; d2 < 100; ++d2){int y = 2023, m = nums[m1] * 10 + nums[m2], d = nums[d1] * 10 + nums[d2];int date = y * 10000 + m * 100 + d;if(sset.count(date)) continue;sset.insert(date);if(is_vaild(y,m,d)) res++;}}}}}}}}cout << res << endl;return 0;
}

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

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

相关文章

【你也能从零基础学会网站开发】Web建站之javascript入门篇 JavaScript事件处理

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 什么是DHTML …

Linux基础命令[16]-head

文章目录 1. head 命令说明2. head 命令语法3. head 命令示例3.1 不加参数3.2 -c&#xff08;按照字节显示&#xff09;3.3 -n&#xff08;按照行数显示&#xff09;3.4 -v&#xff08;显示文件名&#xff09; 4. 总结 1. head 命令说明 head&#xff1a;用来显示文件开头&…

Linux认识与学习BASH

Linux认识与学习BASH 认识BASH这个Shellshell是什么系统的合法shell与/etc/shells功能Bash Shell的功能查询命令是否为Bash shell 的内置命令(type)命令的执行与快速编辑按钮 shell的变量功能什么是变量&#xff1f;变量的使用与设置&#xff1a;echo、变量设置规则、unset环境…

springboot网页时装购物系统链接

链接:https://pan.baidu.com/s/1mCmCSbqUCv48_a6wiLBdJg?pwdfalz 提取码:falz 2600套项目源码 https://kdocs.cn/l/cuAdxEBfLiqA 工作室精心制作&#xff0c;包括小程序项目&#xff0c;springboot项目&#xff0c;传统ssm项目&#xff0c;前后端分离项目。你可以用来制作自…

Stable Diffusion 模型下载:Comic Babes(漫画宝贝)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 条目内容类型大模型基础模型SD 1.5来源CIVITAI作者datmuttdoe文件名称comicBabes_v2.safet…

如何用 RAG 技术玩转文档问答?Milvus × 网易有道 QAnything 为你揭秘!

过去一年&#xff0c;RAG 在技术层面发展迅速&#xff0c;为向量数据库赛道添了一把火。RAG 和向量数据库的结合&#xff0c;能够有效解决幻觉、时效性差、专业领域知识不足等阻碍大模型应用的核心问题。 不久前&#xff0c;网易有道开源了自研的 RAG 引擎 QAnything。用户的任…

Q学习(Q-Learning)

Q学习是一种强化学习算法&#xff0c;用于指导代理&#xff08;Agent&#xff09;在给定环境中如何采取最优行动。它通过学习状态中的行动价值来实现&#xff0c;属于从与环境的交互中学习&#xff0c;通过尝试和错误&#xff0c;以实现目标的机器学习算法。 下面是Q学习工作原…

突破次元壁!体验数字人的神秘世界

在这个繁忙的城市&#xff0c;人们的生活总是充满了压力和焦虑。他们似乎总是在追寻着什么&#xff0c;却又不知道自己究竟在追寻什么。在这个看似平凡的世界里&#xff0c;隐藏着一个神秘的数字人世界。 这个数字人世界并不是虚构的&#xff0c;而是我们无法触及的另一个维度…

CUDA入门之统一内存

原文来自CUDA 编程入门之统一内存 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#xff08;HPC&#xff09;开发基础教程 &#x1f380;CSDN主页 发狂的小花 &#x1f304;人生秘诀&#xff1a;学习的本质…

vite配置

"vite": "^5.1.4" resolve.alias&#xff1a;配置别名 1、执行npm install -D types/node 或者 yarn add types/node -D 2、以下配置代表访问src时可以用“”代替 resolve: {alias: {"": path.resolve(__dirname, "./src"),},}, 使…

【C语言】自定义类型:结构体

1. 结构体类型的声明 1.1 结构体回顾 结构是⼀些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.1.1 结构的声明 struct tag {member-list; }variable-list; 例如描述⼀个学⽣&#xff1a; struct Stu {char name[20];//名字int age;//年…

Vue前端项目安装及相关问题解决

目录 安装 以人人开源前端项目安装为例&#xff0c;安装部署及安装过程中的问题的解决思路。开源地址如下&#xff1a; 人人开源 下载代码到本地 安装visial studio code&#xff08;即VSCode&#xff09;作为前端开发工具&#xff0c;使用前端前必须安装node.js作为让js运行…

Android 生成SO - 基础工程创建

最近需要给小伙伴扫盲一下如何使用Android Studio 生成一个SO文件&#xff0c;网上找了很多都没有合适的样例&#xff0c;那只能自己来写一个了。 原先生成SO是一个很麻烦的事情&#xff0c;现在Android Studio帮忙做了很多的事情&#xff0c;基本只要管好自己的C代码即可。 …

【梳理】k8s使用Operator搭建Flink集群(高可用可选)

文章目录 1. 架构图2. helm 安装operator3. 集群知识k8s上的两种模式&#xff1a;Native和Standalone两种CR 4. 运行集群实例Demo1&#xff1a;Application 集群Demo2&#xff1a;Session集群优劣 5. 高可用部署问题1&#xff1a;High availability should be enabled when sta…

3.1_2 覆盖与交换

3.1_2 覆盖与交换 &#xff08;一&#xff09;覆盖技术 早期的计算机内存很小&#xff0c;比如IBM 推出的第一台PC机最大只支持1MB大小的内存。因此经常会出现内存大小不够的情况。 后来人们引入了覆盖技术&#xff0c;用来解决“程序大小超过物理内存总和”的问题。 覆盖技术的…

DevOps-Jenkins-CI持续集成操作

创建项目 创建个web项目 我这里直接用Spring Web自动生成的demos 启动项目&#xff0c;访问展示如下默认页面信息 项目新增Docker构建配置 在项目下新建docker目录&#xff0c;新增Dockerfile、docker-compose.yml文件 Dockerfile文件&#xff0c;将mytest.jar 复制到容器的…

移动硬盘无法读取怎么修复?分享三个简单方法

移动硬盘作为现代数据存储的重要工具&#xff0c;一旦出现故障&#xff0c;往往会让我们感到焦虑和困惑。当移动硬盘无法读取时&#xff0c;我们需要冷静分析并采取适当的措施来修复它。本文将为您介绍三种有效的修复方法。 一、检查物理连接与驱动程序 当移动硬盘无法读取时&…

LiveGBS流媒体服务器中海康摄像头GB28181公网语音对讲、语音喊话的配置

LiveGBS海康摄像头国标语音对讲大华摄像头国标语音对讲GB28181语音对讲需要的设备及服务准备 1、背景2、准备2.1、服务端必备条件&#xff08;注意&#xff09;2.2、准备语音对讲设备2.2.1、不支持跨网对讲示例2.2.2、 支持跨网对讲示例 3、开启音频开始对讲4、搭建GB28181视频…

动手学深度学习-注意力机制Transformer

注意力机制 1. 注意力提示 1.1. 生物学中的注意力提示 **自主性提示&#xff08;随意线索&#xff09;&#xff1a;收到认知和意识的控制&#xff0c;有主观意愿的推动。**如下图&#xff0c;所有纸制品都是黑白印刷的&#xff0c;但咖啡杯是红色的。 换句话说&#xff0c;这…

【办公类-21-09】三级育婴师 视频转文字docx(等线小五单倍行距),批量改成“宋体小四、1.5倍行距、蓝色字体”

作品展示&#xff1a; 背景需求&#xff1a; 一、视频处理 1、育婴师培训的现场视频 2、下载视频&#xff0c;将视频换成考题名称 二、音频 视频用格式工厂转成MP3音频 3、转文字doc 把音频放入“网易云见外工作台”转换为“文字" 等待5分钟&#xff0c;音频文字会被写…