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

POJ 3601 Subsequence

题目描述:

给你一个包含 N 个正整数的序列(10 < N < 100000),每个数都不超过 10000,还有一个正整数 S(S < 100000000)。请写个程序,找出序列中连续子序列的最短长度,使得这段子序列的和大于或等于 S。

输入格式:

第一行是测试用例的数量。每个测试用例的第一行包含两个数字 N 和 S,用空格分开。
第二行是序列中的 N 个数字,也用空格分开。输入以文件结束符结束。

输出格式:

每个测试用例输出一行结果,表示满足条件的最短子序列长度。如果找不到符合条件的子序列,就输出 0。

样例:

INPUT: OUTPUT:
2
10 15
5 1 3 5 10 7 4 9 2 8
5 11
1 2 3 4 5
2
3

题解:

容易发现,直接暴力搜序列起点(i,j)时间复杂度为O(n^2),肯定会超时,分析如何降低复杂度至O(n)。观察可知,区间连续,采用双指针 l,r 枚举左右端点,求满足条件的区间最小值即可。

AC CODE:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e5+10;
int t,n,s,a[N],d[N];
int main(){cin>>t;while(t--){memset(d,0,sizeof(d));cin>>n>>s;for(int i=1;i<=n;i++){cin>>a[i];d[i]=d[i-1]+a[i];}if(d[n]<s) {cout<<0<<endl;continue;}int ans=N*100;for(int i=1,j=1;i<=j and i<=n and j<=n;i){if(d[j]-d[i-1]<s) j++;else ans=min(ans,j-i+1),i++;//cout<<ans<<" "<<i<<" "<<j<<endl;}cout<<ans<<endl;}return 0;
}
http://www.wxhsa.cn/company.asp?id=1068

相关文章:

  • 【IEEE出版】第十届计算机技术与机械电气工程国际学术论坛(ISCME 2025)
  • Python-httpx库的post请求的几种参数的区别
  • 精准把控人力,PJMan “负荷分析” 助力项目高效推进
  • 92. 递归实现指数型枚举
  • Logstash、Filebeat和Fluent比较
  • 车载电动充气泵芯片方案设计
  • [题解]P4281 [AHOI2008] 紧急集合 / 聚会
  • 【API接口】最新可用红果短剧接口
  • 微信个人号接口
  • 数据结构与算法-28.图
  • 剪映如何将草稿分享给别人?
  • 测试开发私教服务班4.0:大厂导师1对1带你突破职业瓶颈!
  • 深入理解Java对象:从创建到内存访问的JVM底层机制
  • 【AP出版】第八届人文教育与社会科学国际学术会议(ICHESS 2025)
  • 从零开始搭建Qwen智能体:新手也能轻松上手指南
  • # 简单贪心题(greedy)
  • 免安装在线录屏神器推荐:纯前端屏幕录制工具使用指南
  • sqlalchemy连接池的长连接一直占用,无法释放导致服务卡住
  • 锁相关记录
  • 加入任务计划
  • 使用yolo算法对视频进行实时目标跟踪和分割
  • qoj2607 Survey
  • ubuntu24修改网络ip
  • ShardingSphere入门篇
  • 一个完整的项目管理流程都包括哪些环节?
  • 第5讲 机器学习生态构成 - 详解
  • Scaling Law之后AI的下一站:数据质量、效率与闭环的“军备竞赛”
  • 当前流行的前端框架
  • 移远EC800M RTOS笔记
  • Linux 实例:配置 NTP 服务