这样写思路对不对求大佬看看
查看原帖
这样写思路对不对求大佬看看
1272396
huochairenzhishang楼主2024/7/29 16:29
#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <map>
#include <cmath>
#include <cstring>
#include <stack>
#include <queue>
using namespace std;
typedef long long ll;
const int N = 3;
vector<ll> num(N);
vector<ll> sum(N);
ll max(ll x, ll y){
    return x > y ? x : y;
}
ll min(ll x, ll y){
    return x < y ? x : y;
}
bool cmp(int x, int y){
    return x > y;
}
int main()
{
    int t;
    scanf("%d", &t);
    while (t--){
        ll n,l,r;cin>>n>>l>>r;
        num.resize(n);
        for(int i=0;i<n;++i) cin>>num[i];
        sum.resize(n);
        if(num[0]>=l&&num[0]<=r) sum[0]=1;
        else sum[0]=0;
        for(int i=1;i<n;++i){
            if(num[i]>=l&&num[i]<=r) sum[i]=sum[i-1]+1;
            else if(num[i]>r){
                sum[i] = sum[i - 1];
                 continue;
            }
            else{
                int val=num[i];
                int k=i;int ans=0;
                while(val<l&&k!=0){
                    if(num[k-1]>r){
                        ans=1;
                        break;
                    }
                    val+=num[k-1];
                    k--;
                }
                if(ans) sum[i]=sum[i-1];
                else if(k!=0) sum[i]=max(sum[i-1],sum[k-1]+1);
                else sum[i]=max(sum[i-1],1);
            }
        }
        cout<<sum[n-1]<<'\n';
        //for(int i=0;i<n;++i) cout<<sum[i];
    }
    return 0;
}
2024/7/29 16:29
加载中...