文章目录

  • 题目大意
  • 解题思路
  • 代码
  • 知识点

题目大意

解题思路

  • 技巧:
    首先明确这里求的是连续子序列的和, 为了降低求和的复杂度,我们使用sum[i]sum[i]sum[i]表示前iii个数字的和。这样,iii到jjj的子序列和即为s[j]−s[i−1]s[j]-s[i-1]s[j]−s[i−1], 基于此,我们有三种方法进行求解。
  • 解法:
    一、暴力思路:按长度从小到大枚举。复杂度为O(n2)O(n^2)O(n2)会超时。
    二、二分法: 对长度二分进行枚举。复杂度为O(nlogn)O(nlogn)O(nlogn).
    三、尺寸法: 很明显此题满足尺寸法的情况.因此由如下步骤

    • (1): 初始sum=0,s=0,e=−1sum = 0, s = 0, e=-1sum=0,s=0,e=−1(sum的和始终为a[s]+a[s+1]+...+a[e]a[s]+a[s+1]+...+a[e]a[s]+a[s+1]+...+a[e])
    • (2): 若sum < S 并且 e < N-1, 末端推进( sum+=a[++e])
    • (3): 若sum >= S, 前端推进(sum-=a[s++])
    • (4): 结束条件,末端到达最后,并且当前sum<S. 再无可行解
    • (5): 推进过程更新最小满足区间长度, 直到结束条件.
    • (6): 最后输出最小区间长度

代码

  • 暴力法:略
  • 二分法:
#include<iostream>
#include<stdio.h>
using namespace std;int main()
{int T;scanf("%d", &T);int sum[100000+5];int tmp;while(T--){int N, S;scanf("%d%d", &N, &S);sum[0] = 0;for(int i=1; i<=N; i++){scanf("%d", &tmp);sum[i] = sum[i-1]+tmp;}int ans = 10000000;int l = 1; int r = N;while(l < r){int mid = (l + r) / 2;int flag = 0;for(int i=1; i+mid-1<=N; i++){int j = i+mid-1;if(sum[j]-sum[i-1] >= S){ans = min(ans, mid);flag = 1;break;}}if(flag)r = mid;elsel = mid+1;}if(ans == 10000000)printf("0\n");elseprintf("%d\n", ans);}return 0;
}
  • 尺寸法
#include<iostream>
using namespace std;
const int MAX = 100000+5;
int main()
{int T;cin >> T;int a[MAX];while(T--){int N, S;cin >> N >> S;for(int i=0; i<N; i++)cin >> a[i];int sum, s, e;sum = s = 0;e = -1;int ans = MAX;while(!(e == N-1 && sum < S)){if(sum < S && e < N-1)sum += a[++e];if(sum >= S){ans = min(ans, e-s+1);sum -= a[s++];}}if(ans == MAX)cout << 0 << endl;elsecout << ans << endl;}return 0;
}

知识点

尺寸法:

  • 定义: 反复推进区间的开头和末尾,来求满足条件的最小区间的方法被称为尺寸法。
  • 使用情况: 如果从起始点sss开始,区间[s,t][s,t][s,t]刚好满足题意,那么从起始点s+1s+1s+1开始,若区间[s+1,t′][s+1, t'][s+1,t′]满足题意,则t′&gt;=tt' &gt;= tt′>=t.

问:若含有负数,能否使用尺寸法?不行!!!

挑战程序设计竞赛: Subsequence相关推荐

  1. ICPC程序设计题解书籍系列之三:秋田拓哉:《挑战程序设计竞赛》(第2版)

    白书<挑战程序设计竞赛>(第2版)题目一览 白书:秋田拓哉:<挑战程序设计竞赛>(第2版) 第1章 蓄势待发--准备篇(例题) POJ1852 UVa10714 ZOJ2376 ...

  2. 《挑战程序设计竞赛(第2版)》习题册攻略

    本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...

  3. POJ 1150 The Last Non-zero Digit 《挑战程序设计竞赛》

    为什么80%的码农都做不了架构师?>>>    POJ 1150 The Last Non-zero Digit超大组合数:求超大组合数P(n, m)的最后一个非零位.4.1更加复杂 ...

  4. POJ 3735 Training little cats​ 题解 《挑战程序设计竞赛》

    为什么80%的码农都做不了架构师?>>>    POJ 3735 Training little cats调教猫咪:有n只饥渴的猫咪,现有一组羞耻Play,由k个操作组成,全部选自: ...

  5. POJ 3608 Bridge Across Islands 《挑战程序设计竞赛》

    为什么80%的码农都做不了架构师?>>>    POJ 3608 Bridge Across Islands跨岛大桥:在两个凸包小岛之间造桥,求最小距离?3.6与平面和空间打交道的计 ...

  6. 挑战程序设计竞赛(第2版)》

    <挑战程序设计竞赛(第2版)> 基本信息 作者: (日)秋叶拓哉 岩田阳一 北川宜稔 译者: 巫泽俊 庄俊元 李津羽 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787 ...

  7. AOJ 1312 Where's Wally 题解《挑战程序设计竞赛》

    为什么80%的码农都做不了架构师?>>>    本文由码农场 同步,最新版本请查看原文:http://www.hankcs.com/program/algorithm/aoj-131 ...

  8. 挑战程序设计竞赛——详解DFS及BFS

    挑战程序设计竞赛--详解DFS及BFS 一.学会要用到的stl函数,Stack.Quene.Pair 1.Stack(DFS隐式的用到,并与Queue对比记忆) 头文件==#include== sta ...

  9. 【操作指导 | 代码实现】挑战程序设计竞赛2:算法和数据结构

    书籍封面 第一章 前言 1. 本人衷心建议 ~~~~~~       如果你是一位初学者,我指的是你只会基本的 C/C++ 编程,即使编的很烂,这本书对于你算法和数据结构的提升非常有帮助,所涉及的每一 ...

最新文章

  1. python数据分析设置_Python 数据分析系列之如何安装和设置 Python
  2. 信息工程大学806自主命题2020年回忆版真题2020年信息工程大学,初试806回忆版
  3. maven scala plugin 实现jvmArgs,执行过程原理解析笔记
  4. Mysql 查看、创建、更改 数据库和表
  5. 使用sqlldr导入文本数据到oracle
  6. python解压打开文件过多_让Python在后台自动解压各种压缩文件!
  7. CPython 标准库源码分析 collections.Counter
  8. Repository HDU - 2846 (trie)
  9. 拦截游戏窗口被移动_家中最值得购入的17款儿童游戏,教你如何从IPAD中夺回小朋友的注意力...
  10. Microsoft edge兼容性问题
  11. vue上传音视频文件并获取时长
  12. 华为手机录制屏幕视频的详细操作
  13. 分析企业上云的办法及意义
  14. 谐振电路及品质因数(三)
  15. Python的安装与运行
  16. 使用计算机软件进行电视剪辑称为,后期剪辑(影视后期制作一个流程)_百度百科...
  17. android 百度地图 车辆监控,实现GPS一辆或多辆小车在百度地图上显示驾驶路线
  18. 如何实施集团企业的ERP财务模块
  19. 锁相环 CD4046 的应用
  20. 云计算行业的前景如何?

热门文章

  1. Linux:关于设置PS1提示符输入长命令格式出现的问题及解决
  2. python项目实战:控制Windows电脑桌面壁纸
  3. java 正序a~z_java 策略模式,list集合,实现id 姓名年龄正序倒序排序(如果年龄或者姓名重复,按id正序排序)...
  4. 理论上 Android可以处理 多个手指的触摸
  5. Task一个轻量级分布式任务计算系统
  6. 金沙艺廊于澳门四季名荟正式开幕;招商维京游轮深耕“文游”助力中国旅游业高质量发展 | 全球旅报...
  7. FFS(快速文件系统)–Unix文件系统
  8. Uni-App - 使用 iconfont 图标或者自定义图标
  9. Live800:教育行业新拐点,在线客服系统如何提供价值?
  10. java hypot_Java StrictMath hypot()用法及代码示例