poj3061 尺取法
这道题就是给你一串数字, 然后让你求最短的连续的和大于等于s的长度, 使用尺取法即可快速解决, 代码如下:
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int a[100000 + 100]; int n, ss; int main() { int T; scanf("%d", &T); while(T--) { scanf("%d%d", &n, &ss); for(int i=0; i<n; i++) scanf("%d", &a[i]); int s=0, t=0, sum=0, res=0x3fffffff; while(1) { while(t<n && sum<ss) sum += a[t++]; if(sum < ss) break; res = min(res, t-s); sum -= a[s++]; } if(res == 0x3fffffff) res = 0; printf("%d\n", res); } return 0; }