POJ 3061 Subsequence
尺取法。
#include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<queue> #include<algorithm> using namespace std; const int maxn=100000+10; int n; long long k,sum; long long a[maxn]; int ans,l,r; int main() { int T; scanf("%d",&T); while(T--) { scanf("%d%lld",&n,&k); for(int i=1; i<=n; i++) scanf("%lld",&a[i]); ans=999999999,l=r=1,sum=a[1]; while(1) { if(sum<k) { if(r==n) break; r++; sum=sum+a[r]; } else { ans=min(ans,r-l+1); sum=sum-a[l]; l++; } } if(ans==999999999) ans=0; printf("%d\n",ans); } return 0; }