POJ 3061:Subsequence 查找连续的几个数,使得这几个数的和大于给定的S
来源:互联网 发布:布谷布谷软件 编辑:程序博客网 时间:2024/06/13 21:26
Subsequence
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 10172 Accepted: 4160
Description
A sequence of N positive integers (10 < N < 100 000), each of them less than or equal 10000, and a positive integer S (S < 100 000 000) are given. Write a program to find the minimal length of the subsequence of consecutive elements of the sequence, the sum of which is greater than or equal to S.
Input
The first line is the number of test cases. For each test case the program has to read the numbers N and S, separated by an interval, from the first line. The numbers of the sequence are given in the second line of the test case, separated by intervals. The input will finish with the end of file.
Output
For each the case the program has to print the result on separate line of the output file.if no answer, print 0.
Sample Input
210 155 1 3 5 10 7 4 9 2 85 111 2 3 4 5
Sample Output
23
题意是给出一个序列,要求从这个序列中找出几个连续的数,使得这些数的和大于给定的S,求这个数的最小值。
和51nod上面的建设国家很像,都是建立一个队列,然后不断查找。
代码:
#include <iostream>#include <algorithm>#include <cmath>#include <vector>#include <string>#include <cstring>#pragma warning(disable:4996)using namespace std;long long n,s,a[1000005];int main(){//freopen("i.txt","r",stdin);//freopen("o.txt","w",stdout);int test,i,ans,start;long long sum;scanf("%d",&test);while(test--){scanf("%lld%lld",&n,&s);for(i=1;i<=n;i++){scanf("%lld",a+i);}ans=n+1;a[0]=0;sum=0;start=1;for(i=1;i<=n;i++){sum += a[i];while(sum>s){sum = sum - a[start];start++;} if(sum+a[start-1]>s && i-(start-1)+1<ans) { ans=i-(start-1)+1; }}if(ans == n+1){cout<<0<<endl;}else{cout<<ans<<endl;}}//system("pause");return 0;}
0 0
- POJ 3061:Subsequence 查找连续的几个数,使得这几个数的和大于给定的S
- hdu 2715 数分解为几个连续数的和
- 查找最大的不重复数,查找大于给定数字的最小不重复数
- 【二分查找】为非负数组寻找一个上限cap,使得数组的和为给某个给定的数s
- 枚举 判断给定数列中 有几个不同的数
- 输入一个递增排序的数组和一个数字s查找两个数,使得它们的和正好是s
- 求输入的几个数的和
- 计算和为给定数的连续正整数数列
- 寻找和为给定数的连续正整数数列
- 道听途说的技术面:找出正整数序列中连续几个数和为Num的区间
- 求给定数等于最少的几个完全平方数之和
- 求给定数等于最少的几个完全平方数之和
- 在给定数组中查找两个数的和等于给定的数
- 找出相加能得给定数的连续的数
- 几个连续数相加
- Java实现——查找数组中连续元素的和等于给定数的子数组
- LightOJ 1278 一个固定数可以换为几个连续数之和 求这样的连续数有多少对
- 将一个数由几个数的阶乘和表示
- 数据结构例程——串的顺序存储应用
- ADAS Git资源(code&papers)
- Java (计算机编程语言)
- iOS-AFN相较ASI
- UVA 208 Firetruck
- POJ 3061:Subsequence 查找连续的几个数,使得这几个数的和大于给定的S
- Handler
- C#异常处理
- 收集的工具箱
- LeetCode Invert Binary Tree
- SQL Server自动备份、压缩和删除压缩
- IOS SqlLite3数据库
- 100道经典Java面试题及答案
- JSP页面用EL表达式 输出date格式