当前位置: 首页 > news >正文

补种未成活胡杨

题目描述

E卷 100分题型

近些年来,我国防沙治沙取得显著成果。某沙漠新种植N棵胡杨(编号1-N),排成一排。
一个月后,有M棵胡杨未能成活。
现可补种胡杨K棵,请问如何补种(只能补种,不能新种),可以得到最多的连续胡杨树?

输入描述

  • N 总种植数量,1 <= N <= 100000

  • M 未成活胡杨数量,M 个空格分隔的数,按编号从小到大排列,1 <= M <= N

  • K 最多可以补种的数量,0 <= K <= M

输出描述

  • 最多的连续胡杨棵树

示例1

输入

5
2
2 4
1

输出

3

说明

补种到2或4结果一样,最多的连续胡杨棵树都是3。

示例2

输入

10
3
2 4 7
1

输出

6

说明

种第7棵树,最多连续胡杨树棵数位6(5,6,7,8,9,10)

题解

双指针算法。 将题目思路转换为转换为线段,求最长线段所包含点的个数。
思路:

  • 未存活的会将线段分成多个区间。
  • 通过补种的方式进行合并区间,记录合并之后区间的最大值。
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;int main() {int n, m, k;cin >> n >> m;vector<int> notAlive(m+1,0);notAlive[m] = n+1;int index = 0;int tmp;for (int i = 0; i < m; i++){cin >> notAlive[i];}// 将未活点从小到大进行排序sort(notAlive.begin(), notAlive.end());cin >> k;int res = 0;// 左边界,代表当前区间左边存活的第一个位置int left;// 右边界代表当前区间最后一个存活的位置int right;for (int i = 0; i <= m; i++) {if (i == 0) {left = 1;} else {left = notAlive[i-1] + 1;}if (i + k >= m) {right = notAlive[m] -1;} else {right = notAlive[i+k] - 1;}res = max(res, right - left+1);}cout << res;
}

http://www.mrgr.cn/news/83529.html

相关文章:

  • android 官网刷机和线刷
  • 探秘MetaGPT:革新软件开发的多智能体框架
  • HTTP-响应协议
  • DFS与BFS
  • 蓝桥杯嵌入式速通(1)
  • 用户界面的UML建模13
  • 对话新晋 Apache SeaTunnel Committer:张圣航的开源之路与技术洞察
  • HarmonyOS Next系列之华为账号一键登录功能实现(十四)
  • shell脚本回顾1
  • 【Ubuntu 24.04】虚拟机常见问题解决
  • rk3568 内核态OOM内存泄漏memleak使用
  • 分类模型为什么使用交叉熵作为损失函数
  • Spring——几个常用注解
  • mybatis分页插件:PageHelper、mybatis-plus-jsqlparser(解决SQL_SERVER2005连接分页查询OFFSET问题)
  • 【leetcode刷题】:双指针篇(有效三角形的个数、和为s的两个数)
  • 文献阅读分享:XSimGCL - 极简图对比学习在推荐系统中的应用
  • 【大数据】Apache Superset:可视化开源架构
  • PatchTST:通道独立的、切片的 时序 Transformer
  • 【JVM-2.3】深入解析JVisualVM:Java性能监控与调优利器
  • 25/1/12 嵌入式笔记 学习esp32
  • Elasticsearch快速入门
  • 浅谈云计算03 | 云计算的技术支撑(云使能技术)
  • 现代 CPU 的高性能架构与并发安全问题
  • AWS简介
  • 【Excel/WPS】根据平均值,随机输出三个范围在80到100的随机值。
  • 从预训练的BERT中提取Embedding