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; }
𝓐𝓬𝓱𝓲𝓮𝓿𝓮𝓶𝓮𝓷𝓽 𝓹𝓻𝓸𝓿𝓲𝓭𝓮𝓼 𝓽𝓱𝓮 𝓸𝓷𝓵𝔂 𝓻𝓮𝓪𝓵
𝓹𝓵𝓮𝓪𝓼𝓾𝓻𝓮 𝓲𝓷 𝓵𝓲𝓯𝓮