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