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

LA 2678 Subsequence

2015-07-08 13:39 363 查看
题意:给出n个整数,给定整数S,求长度最短的连续序列,使它们的和大于或等于S

第一种,是求前缀和,然后用lower_bound来找

第二种,尺取法,

#include<iostream>
#include<cstdio>
#include<cstring>
#include <cmath>
#include<stack>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;

typedef long long LL;
const int INF = (1<<30)-1;
const int mod=1000000007;
const int maxn=100005;

int a[maxn];
int n,S;

void solve(){
int t = 0,s = 0;
int res = INF;
int sum = 0;
for(;;){
while(t < n && sum < S){
sum += a[t++];
}
if(sum < S) break;
res = min(res,t - s);
sum -= a[s++];
}
if(res > n) res = 0;
printf("%d\n",res);
}

int main(){
while(scanf("%d %d",&n,&S) != EOF){
memset(a,0,sizeof(a));
for(int i = 0;i < n;i++) scanf("%d",&a[i]);
solve();
}
return 0;
}


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