HNUCM-OJ Problem 1614 幸运数 模拟 最短子段和

Zarah ·
更新时间:2024-09-21
· 735 次阅读

题目描述

众所周知,不管是人还是熊都需要人品。于是乎,为了给自己找一个幸运数字,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>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<<cc<<endl; return 0; } 学如逆水行舟,不进则退
作者:一百个Chocolate



problem oj

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章