题目大意 有n个正整数组成一个序列,给定一个s,求长度最短的连续序列,使他们的和大于或等于s。
尺取法:就是尺取法
我的分类里面有教程
#include <iostream>
#include <cstring>
using namespace std;
long long d[100005],sum;
int main()
{
long long n,s;
while(cin>>n>>s)
{
memset(d,0,sizeof(d));
sum=0;
for(int i=1;i<=n;i++)
cin>>d[i];
long long x=1,y=1,mins=1000000000;
while(1)
{
// cout<<x<<' '<<y<<endl;
while(sum<s&&y<=n)
{
sum+=d[y];
y++;
}
while(sum>=s&&x<=n)
{
if(y-x<mins) mins=y-x;
sum-=d[x];
x++;
}
if(y==n+1) break;
}
if(mins!=1000000000) cout<<mins<<endl;
else cout<<'0'<<endl;
}
}