5 条题解

  • 1
    @ 2025-11-17 10:42:36

    我叶梓楣也要成为duck大魔王!!!(2)

    这道题的话 就是给我们一些数字嘛 然后按照这个数字的顺序 我们去考虑 最多有多少个符合的区间 那我们最贪心的去想肯定是只要满足 我们就重新开一个区间嘛 所以我们就想到了 我们用双指针 去维护 如果大于r了 就左指针右移 缩小一点 如果小于l 那就右指针移动 扩大一点 然后就可以了 双指针还是挺常用的一种思想吧 大家多做题 就会有些感觉 比如 这道题 维护一个[l,r]的区间 维护区间 我们就想到会不会是双指针

    #include <bits/stdc++.h>
     using namespace std;
     #define int long long
     #define endl '\n'
     #define EPS 1e-8
     #define fi first
     #define se second
     #define lowbit(x) x & (-x)
     const int inf = 0x3f3f3f3f;
     typedef pair<int, int> pii;
     const int N = 2E5 + 10;
     int arr[N];
     void solve()
     {
         int n, l, r;
         cin >> n >> l >> r;
         int vec[n+1]={0};
         for (int i = 1; i <= n; i++)
         {
             cin >> vec[i];
         }
         int ll = 0, rr = 0;
         int ans = 0, sum = 0;
         while (ll <= n && rr <= n)
         {
             if (sum <= r && sum >= l)
             {
     ​
                 ans++;
                 ll = rr + 1;
                 sum = 0;
             }
             else if (sum < l)
             {
                 rr++;
                 sum += vec[rr];
             }
             else if (sum > r)
             {
     ​
                 sum -= vec[ll];
                 ll++;
             }
         }
         cout << ans << endl;
     }
     signed main()
     {
         ios::sync_with_stdio(false);
         cin.tie(0);
         cout.tie(0);
         int t = 1;
         cin >> t;
         while (t--)
         {
             solve();
         }
         return 0;
     }
     ​
    

    我叶梓楣也要成为duck大魔王!!!(2)

    信息

    ID
    1206
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    (无)
    递交数
    198
    已通过
    30
    上传者