题意:每次可以从数组顶端取任意数量,取出的所有数组之和如果在l到r之间,则获胜,否则失败,求最大获胜局数。
分析:用双指针算出区间内的和。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void sol(){
ll n,l,r;cin>>n>>l>>r;
ll ans=0,sum=0;
ll a[n+10];
for(int i=1;i<=n;i++)cin>>a[i];
ll x=1,y=0;ll c=0;
while(x<=n&&y<=n){
if(sum>=l&&sum<=r){
ans++;sum=0;x=y+1;
}
if(sum<l){
y++;
sum+=a[y];continue;
}
if(sum>r){
sum-=a[x];
x++;
}
}
cout<<ans<<endl;
}
int main(){
int t;cin>>t;
while(t--){
sol();
}
}