题意:
给出一个序列,长度为n然后问最小的连续子序列,使和小于s;
思路:
直接两层循环肯定是要超时的;
给出一个序列,长度为n然后问最小的连续子序列,使和小于s;
思路:
直接两层循环肯定是要超时的;
所以我们枚举终点,然后找到终点最近的一个满足条件的位置;
#include<cstdio>
#include<cstring>
const int N = 100005;
int seq[N], sum[N], n, s;
int main() {
while(scanf("%d%d",&n,&s) != EOF) {
sum[0] = 0;
for(int i = 1; i <= n; i++) {
scanf("%d",&seq[i]);
sum[i] = sum[i - 1] + seq[i];
}
int ans = n + 1;
int cur = 1;
bool ok = false;
for(int i = 1; i <= n; i++) {
if(sum[i] - sum[cur - 1] < s)
continue;
while(sum[i] - sum[cur] >= s)
cur++;
ans = ans < i - cur + 1 ? ans : i- cur + 1;
}
printf("%d\n",ans == n + 1 ? 0 : ans);
}
}