5 条题解
-
1
我叶梓楣也要成为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; }
信息
- ID
- 1206
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 198
- 已通过
- 30
- 上传者