Live Archieve 2678 Subsequence
来源:互联网 发布:机械手臂编程难学吗 编辑:程序博客网 时间:2024/05/03 22:09
题意:给你一个长度为n的序列和一个数m,每个数都是正数,求出一对i,j使得sum[i...j]>=m并且j-i+1最小,并输出这个最小值
首先我们想到的是枚举i,j然后依次判断,但是显然时间复杂度为O(n^2)
有经验的话会知道只需枚举终点或者起点中的一个就可以了,我们选择枚举终点
设前缀和为sum,那么对于终点j我们需要找到一个尽量大的i使得sum[j]-sum[i-1]>=m
那么我们就在枚举每一个j的时候维护这个i的最大值就可以了,当sum[j]-sum[i]>=m时i++
#include<cstdio>#include<iostream>using namespace std;const int maxn=1e5+5,inf=0x3f3f3f3f;inline void _read(int &x){ char t=getchar();bool sign=true; while(t<'0'||t>'9') {if(t=='-')sign=false;t=getchar();} for(x=0;t>='0'&&t<='9';t=getchar())x=x*10+t-'0'; if(!sign)x=-x;}int n,s[maxn],m,sum[maxn],ans;int main(){int i,j;while(scanf("%d%d",&n,&m)!=EOF){ans=inf;for(i=1;i<=n;i++){_read(s[i]);sum[i]=sum[i-1]+s[i];}i=1;for(j=1;j<=n;j++){if(sum[i-1]>sum[j]-m)continue;while(sum[i]<=sum[j]-m)i++;ans=min(ans,j-i+1);}printf("%d\n",ans==inf?0:ans); }}
0 0
- Live Archieve 2678 Subsequence
- UVA live 2678 - Subsequence
- Live Archive 2678 Subsequence
- 文件 文件对话框 Archieve 介绍
- 2678 - Subsequence
- 2678 - Subsequence
- live
- live
- live
- LA 2678 Subsequence
- LA 2678 – Subsequence
- icpcarchive 2678 - Subsequence
- UVa 2678 Subsequence / 二分
- LA 2678 Subsequence
- UVALive - 2678 Subsequence
- UVALive - 2678 Subsequence 推理
- LA 2678(p48)----Subsequence
- LA 2678 Subsequence .
- 线段树【模板】
- Android之如何随时随地退出程序
- 306. Additive Number
- 继承HibernateDaoSupport类引用模板需导入的jar包
- Quadrotor---common knowledge
- Live Archieve 2678 Subsequence
- java中“…”的含义
- linux 常用 shell 环境变量
- No changes To Deploy
- linux set 查看 所有 变量
- html 概述 及其基本标签第一更
- AppCompat DayNight theme
- excersice
- SpringBoot内部的一些自动化配置原理