poj Subsequence

来源:互联网 发布:hl202控制软件下载 编辑:程序博客网 时间:2024/05/16 01:45

这里写图片描述

思路:用户输入的数列a[n],再定义个sum[n]存储a[n]的前n项和。一开始写的代码老是超时,后来看了一下尺取法可以将时间复杂度优化到o(n),大致思想就是定义起点 l 和终点 f ,f的初始值是满足sum[i]>s的i的最小值。然后l++循环,直到sum[f]-sum[l]

#include <iostream>using namespace std;int a[100000];long sum[100000];int main() {    int c,n,l,f,m,i;    long s;    cin >> c;    sum[0] = 0;    while (c--) {        cin >> n >> s;        l = 0;        f = 0;        m = n;        for (i = 1; i <= n; i++) {            cin >> a[i];            sum[i] = sum[i - 1] + a[i];            if (f == 0 && sum[i] >= s)f = i;        }        if (f == 0) {            cout << 0 << endl;            continue;        }        while (true) {            if (sum[f] - sum[l] >= s) {                if (f - l < m) m = f - l;                l++;            }            else {                if (f == n)break;                f++;            }        }           cout << m << endl;    }    return 0;}
原创粉丝点击