返回顶部

Codeforces Round #171 (Div. 2) B. Books (模拟队列)

  • 题意:有一组数,问子数组和最大不超过\(t\)的最多元素个数.

  • 题解:用数组模拟队列,不断的往里面放,队列中的元素之和大于\(t\),就不断地从队头弹出直到满足条件,维护一个最大值即可.

  • 代码:

    int n,t;
    int a[N];
    int q[N];
    int hh,tt=-1;
    
    int main() {
        //ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
        n=read(),t=read();
        for(int i=1;i<=n;++i) a[i]=read();
        int ans=0;
        int sum=0;
        
        for(int i=1;i<=n;++i){
            sum+=a[i];
            q[++tt]=a[i];
            if(sum<=t) ans=max(ans,tt-hh+1);
            while(sum>t && hh<=tt){
                sum-=q[hh++];
            }
        }
    
        printf("%d\n",ans);
    
        return 0;
    }
    
    
posted @ 2020-10-23 11:26  _Kolibri  阅读(68)  评论(0)    收藏  举报