题目大意:给定t个case,每个case给一个总数N与数S,之后输入N个数字,找最短子序列大于S的长度
对此题利用尺取法即可
#include 
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--){
        int a[100000];
        int n,i,s,j;
        cin>>n>>s;
        for(i=0;i<n;i++)cin>>a[i];
        i=0,j=0;//代表左右下标
        int sum=0,mmin=1000000;
        while(j<n){
            sum+=a[j];
            j++;
            while(sum>=s){
                sum-=a[i];
                mmin=min(j-i,mmin);//j-i即尺取的距离
                i++;
            }
        }
        if(mmin==1000000)cout<<'0'<<endl;
        else cout<<mmin<<endl;
    }
    return 0;
}

京公网安备 11010502036488号