Subsequence

Subsequence

https://ac.nowcoder.com/acm/problem/107658

//核心:尺取
//详情见注释;
#include<iostream>
using namespace std;
#define N 100000000 //取一个尽量大的数保证大于个数,用处见下文;
int a[100006];
int main(){
int n;
cin>>n;
while(n--){
int x,y;
cin>>x>>y;
for(int i=0;i<x;i++){
cin>>a[i];
}
int sum=0,l=0,r=0,hu,ans=N,flag=1;//ans初始化为N,就是保证符合条件的个数必小于ans,使ans第一次min比较能进行;
while(l<x){//l为左端点,所以l从最左边开始直到最右边;
while(r<x && sum<y){//while中需要同时满足r<x,并且sum<y,当全部加完都没打到sum也会结束循环,防止超时,开始也因为这个原因wa了
sum+=a[r];
r++;
}//因为尺取,所以上面的r并就留在第一个是sum符合情况的位置不用左移,之后再随着l右移而右移,
if(sum>=y) hu=r-l;//当sum符合条件,更新hu(用来存个数的)
if(l==0&&sum<y)flag=0;//如果全部加起来都小于y,所以没有符合要求的值;
ans=min(ans,hu);//因为求最小所以每个hu来都需要与ans比较ans保留较小值。
sum-=a[l++];//l左移,sum就随之而变化。
}
if(flag==0)cout<<0<<endl;//flag==0代表所有和都小于y没有答案输出0;反之则输出答案;
else cout<<ans<<endl;
}
return 0;
}</iostream>

全部评论

相关推荐

一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
粗心的雪碧不放弃:纯学历问题,我这几个月也是一直优化自己的简历,后来发现优化到我自己都觉得牛逼的时候,发现面试数量也没有提升,真就纯学历问题
点赞 评论 收藏
分享
评论
4
收藏
分享
牛客网
牛客企业服务