尺取算法模板及例题


例题:http://poj.org/problem?id=3061

模板:

 1 #include
 2 #include
 3 #include
 4 #define ll long long
 5 #define inf 0x3f3f3f3f
 6 using namespace std;
 7 const int N = 100000 + 10;
 8 int a[N];
 9 
10 int main() {
11 
12     int T;
13     cin >> T;
14     while (T--) {
15         int n, s;
16         cin >> n >> s;
17         for (int i = 0; i < n; i++) {
18             cin >> a[i];
19         }
20         int l = 0, r = 0, sum = 0, ans = inf;
21         while (1) {
22             while (sum < s && r < n) {
23                 sum += a[r++];
24             }
25             if (sum < s) break;
26             ans = min(ans, r - l);
27             sum -= a[l++];
28         }
29         if (ans == inf) cout << 0 << "\n";
30         else cout << ans << "\n";
31     }
32 
33     return 0;
34 }