您的位置:首页 > 产品设计 > UI/UE

UVaLive 2678(LA)Subsequence SEERC 2006 题解

2017-09-06 17:41 751 查看

UVa传送门

Vjudge传送门

题意:

这道题是要在一个由n个正整数组成的一个序列里面求一个长度对钻的连续序列使其和大于等于一个给定的整数S(10<s<=100000,S<1e9)

题解:

显然我们发现,如果现在已经有满足的序列使其大于等于这个给定的数S了,比如说是下标为i−>j的序列,那么显然如果我们的j指针++,i−>j+1的和一定也大于S,所以显然我们对于所有满足的子序列,j在增加的时候i也是增加的,故序列的左端点i具有单调性,所以我们只需要维护他一直往后走就可以了。

代码:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int ans,n,S,c[100000+10];
int main(){
while(scanf("%d%d",&n,&S)!=EOF&&n&&S){
for(int i=1;i<=n;i++)scanf("%d",&c[i]),c[i]=c[i-1]+c[i];
ans=n+1;
int i=1,j;
for(j=1;j<=n;j++){
if(c[i-1]>c[j]-S) continue;
while(c[i]<=c[j]-S) i++;
ans=min(ans,j-i+1);
}
if(ans==n+1) printf("0\n");
else         printf("%d\n",ans);
}
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: