Subsequence
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 11224   Accepted: 4660

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

2
10 15
5 1 3 5 10 7 4 9 2 8
5 11
1 2 3 4 5

Sample Output

2
3

尺取法做法:一直向前增加num[r],直到不能增加,再判断r-l,然后再一直向前减去num[l],然后判断是否小于s。一直循环。70+ms

代码:

#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<cmath>
#include<queue>
#include<set>
#include<map>
using namespace std;
const int N=100010;
int list[N];
inline int Scan()
{
int res=0,ch,flag=0;
if((ch=getchar())=='-')
flag=1;
else if(ch>='0'&&ch<='9')
res=ch-'0';
while((ch=getchar())>='0'&&ch<='9')
res=res*10+ch-'0';
return flag?-res:res;
}
int main (void)
{
int t,n,s,i,j,temp,sum,ans;
scanf("%d",&t);
while (t--)
{
memset(list,0,sizeof(list));
scanf("%d%d",&n,&s);
sum=0;
for (i=1; i<=n; i++)
{
scanf("%d",&list[i]);
}
int l,r,dx;
l=r=1;
temp=0;
dx=N;
while (1)
{
while (r<=n&&temp<s)//r向前递增
{
temp+=list[r++];
}
if(temp<s)
break;
dx=min(r-l,dx);
temp-=list[l++];//l向前递增
}
if(dx==N)//特判
puts("0");
else
printf("%d\n",dx);
}
return 0;
}

二分查找做法:建立另外一个数组sufix来储存前缀和,然后题目变成了保证sufix[r]-sufix[l-1]>=S这样的条件下求r-l的最小值,显然r>=l。将这个式子移项得到sufix[r]>=S+sufix[l]。

就是说当遍历l的时候要使r最小,然后就用自带的lowerbound函数来求。

代码:

#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<cmath>
#include<queue>
#include<set>
#include<map>
using namespace std;
const int N=100010;
int list[N];
int sufix[N];
int main (void)
{
ios::sync_with_stdio(false);
int t,n,s,i,j,temp,sum,ans;
cin>>t;
while (t--)
{
cin>>n>>s;
for (i=1; i<=n; i++)
{
cin>>list[i];
sufix[i]=sufix[i-1]+list[i];
}
int dx=N;
if(sufix[n]<s)//特判
{
cout<<0<<endl;
continue;
}
for (i=0; sufix[i]+s<=sufix[n]; i++)//由于是公式内为l-1,因此i要从0开始,即
{
int t=lower_bound(sufix+i+1,sufix+n+1,s+sufix[i])-(sufix+i);
dx=min(t,dx);
}
cout<<dx<<endl;
}
return 0;
}

  

POJ——3061Subsequence(尺取法或二分查找)的更多相关文章

  1. POJ:3061-Subsequence(尺取法模板详解)

    Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18795 Accepted: 8043 Descript ...

  2. POJ 3320 尺取法,Hash,map标记

    1.POJ 3320 2.链接:http://poj.org/problem?id=3320 3.总结:尺取法,Hash,map标记 看书复习,p页书,一页有一个知识点,连续看求最少多少页看完所有知识 ...

  3. POJ 1064 Cable master(二分查找+精度)(神坑题)

    POJ 1064 Cable master 一开始把 int C(double x) 里面写成了  int C(int x) ,莫名奇妙竟然过了样例,交了以后直接就wa. 后来发现又把二分查找的判断条 ...

  4. POJ 3320 尺取法(基础题)

    Jessica's Reading Problem Description Jessica's a very lovely girl wooed by lots of boys. Recently s ...

  5. poj 2100(尺取法)

    Graveyard Design Time Limit: 10000MS   Memory Limit: 64000K Total Submissions: 6107   Accepted: 1444 ...

  6. POJ 3320 (尺取法+Hash)

    题目链接: http://poj.org/problem?id=3320 题目大意:一本书有P页,每页有个知识点,知识点可以重复.问至少连续读几页,使得覆盖全部知识点. 解题思路: 知识点是有重复的, ...

  7. POJ 1019:Number Sequence 二分查找

    Number Sequence Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36013   Accepted: 10409 ...

  8. [ACM] poj 2456 Aggressive cows (二分查找)

    Aggressive cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5436   Accepted: 2720 D ...

  9. [ACM] poj 1064 Cable master (二分查找)

    Cable master Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 21071   Accepted: 4542 Des ...

随机推荐

  1. HTML之基本语法(链接标签、路径的介绍和使用)

    一.链接标签 语法:<a href="目标地址">这个标签上展示的内容</a> 作用:可以实现在当前页面跳转到新页面的操作 属性 1.target这个属性可 ...

  2. Xor Sum

    6498: Xor Sum 时间限制: 1 Sec  内存限制: 128 MB提交: 27  解决: 13[提交][状态][讨论版][命题人:admin] 题目描述 You are given a p ...

  3. 《队长说得队》【Alpha】Scrum meeting 1

    项目 内容 这个作业属于哪个课程 >>2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 >>实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 ...

  4. 主成分分析法(PCA)答疑

    问:为什么要去均值? 1.我认为归一化的表述并不太准确,按统计的一般说法,叫标准化.数据的标准化过程是减去均值并除以标准差.而归一化仅包含除以标准差的意思或者类似做法.2.做标准化的原因是:减去均值等 ...

  5. 抓取oracle建表语句及获取建表ddl语句

    抓取oracle建表语句及获取建表ddl语句 1.抓取代码如下: 1.1.产生表的语法资料 DECLARE-- v_notPartTable VARCHAR2(1000):= '&2'; -- ...

  6. 配置centos7解决 docker Failed to get D-Bus connection 报错

    在centos7的容器里面出现了一个BUG,就是serveice启动服务的时候出现报错,不能用service启动服务.[root@e13c3d3802d0 /]# service httpd star ...

  7. vuePress的使用

    今天来玩一玩vuePress的使用,用markdown来编辑一个页面网站,这里谈论到了简单使用,细节可以去官网上去查看 开始安装 项目依赖 // package.json { "name&q ...

  8. numpy的linspace使用详解

    文档地址: https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html Parameters(参数): start ...

  9. 网络流(一)——Edmonds Karp算法

    首先是一些关于网络流的术语: 源点:即图的起点. 汇点:即图的终点. 容量:有向边(u,v)允许通过的最大流量. 增广路:一条合法的从源点流向汇点的路径. 网络流问题是在图上进行解决的,我们通常可以将 ...

  10. Helm入门

    前言:Helm是GO语言编写的,是管理kubernetes集群中应用程序包的客户端工具.Helm是类似于centos上的yum工具或Ubuntu上的apt-get工具.对于应用发布者而言,可以通过He ...