HNUCM-OJ Problem 1614 幸运数 模拟 最短子段和
发布日期:2021-06-29 14:31:45 浏览次数:2 分类:技术文章

本文共 826 字,大约阅读时间需要 2 分钟。

题目描述

众所周知,不管是人还是熊都需要人品。于是乎,为了给自己找一个幸运数字,Mavis 学习了人类的阿拉伯数字,并不知从哪儿弄来了一串序列和一个 S,Mavis 说:“长度最短且和大于等于 S 的连续子段的长度, 就是俺的幸运数字”!

但是 Mavis 只会喊口号,不会解决问题,所以这个问题就交给你了。

输入

输入文件共三行。

第一行输入仅一个正整数 n,意义如题所述。( n ≤ 4000000, ai ≤ 10^9)

第二行输入 n 个正整数 ai,表示序列中的元素。

第三行输入仅一个正整数 S,意义如题所述。

每两个输入的数之间都用一个空格隔开。

输出

输出文件仅一行一个整数,表示幸运数。

样例输入

8
4 12 10 18 17 10 17 17
40

样例输出

3

思路

题目求大于或者等于S的最短子段和,输出最短长度,模拟即可,遍历找出大于或者等于S的区间,然后求出最短区间即可。

代码

#include
using namespace std;typedef long long ll;const int maxn=5e6+5;ll a[maxn],n,sum;int main(){
ios::sync_with_stdio(false); cin.tie(0); cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; cin>>sum; ll res=0,cc=maxn; ll s=1,k=1; while(k<=n){
while(res
=sum){
cc=min(cc,k-s); res-=a[s++]; } } cout<
<
学如逆水行舟,不进则退

转载地址:https://chocolate.blog.csdn.net/article/details/105032571 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:一文过关 matlab 基础练习题
下一篇:跳跃版图 java 大整数 记忆化搜索 dp

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年05月01日 15时58分04秒