题面

题意:给你一个长度为n(n<100000)的数组,让你找到一个最短的连续子序列,使得子序列的和>=m  (m<1e9)

题解: 1 显然我们我们可以二分答案,然后利用前缀和判断是否可行,这样是O(nlgn)的   注意没有答案 ans输出0

 #include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
using namespace std;
int T,n,m,a[],l,r,ans;
int check(int x)
{
for (int i=;i<=n-x+;i++)
{
if (a[i+x-]-a[i-]>=m) return ;
}
return ;
}
int main()
{
scanf("%d",&T);
while (T--)
{
memset(a,,sizeof(a));
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)
{
scanf("%d",&a[i]);
a[i]+=a[i-];
}
l=;r=n;ans=;
while (l<=r)
{
int mid=(l+r)/;
if (check(mid))
{
ans=mid;
r=mid-;
}else l=mid+;
}
printf("%d\n",ans);
}
}

2 还是一道尺取的裸题,先取前x个数(r++),直到大于m,此时减去该区间最前面的一个数(收缩 l++),再次判断是否大于S,重复操作,直至r==n或取得的区间无法大于S 停止

 #include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
using namespace std;
int sum,T,n,m,a[],l,r,ans;
int check(int x)
{
for (int i=;i<=n-x+;i++)
{
if (a[i+x-]-a[i-]>=m) return ;
}
return ;
}
int main()
{
scanf("%d",&T);
while (T--)
{
memset(a,,sizeof(a));
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++) scanf("%d",&a[i]); ans=n+;l=;r=;sum=;
while ()
{
while (r<=n && sum<m)
{
sum+=a[r];
r++;
}
if (sum<m) break;else
{
ans=min(ans,r-l);
sum-=a[l];
l++;
}
}
if (ans!=n+) printf("%d\n",ans);else printf("0\n");
}
}

POJ-3061 Subsequence 二分或尺取的更多相关文章

  1. POJ 3061 Subsequence 二分或者尺取法

    http://poj.org/problem?id=3061 题目大意: 给定长度为n的整列整数a[0],a[1],--a[n-1],以及整数S,求出总和不小于S的连续子序列的长度的最小值. 思路: ...

  2. POJ 3061 Subsequence ( 二分 || 尺取法 )

    题意 : 找出给定序列长度最小的子序列,子序列的和要求满足大于或者等于 S,如果存在则输出最小长度.否则输出 0(序列的元素都是大于 0 小于10000) 分析 : 有关子序列和的问题,都可以考虑采用 ...

  3. poj 3061 Subsequence 二分 前缀和 双指针

    地址 http://poj.org/problem?id=3061 解法1 使用双指针 由于序列是连续正数 使用l r 表示选择的子序列的起始 每当和小于要求的时候 我们向右侧扩展 增大序列和 每当和 ...

  4. Poj 3061 Subsequence(二分+前缀和)

    Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12333 Accepted: 5178 Descript ...

  5. POJ:3579-Median(二分+尺取寻找中位数)

    Median Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9201 Accepted: 3209 Description Gi ...

  6. POJ 3061 Subsequence 二分查找

    题目大意:给出长度为n的一个序列,给出一个数字S,求长度最短的序列和大于等于S的连续子序列,输出该长度,如果没有答案输出0. 题目思路:看数据范围,这道题就是卡时间的.我们可以用sum[i]记录前i项 ...

  7. Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot(二分或者尺取)

    题目哦 题意:给出一个序列,序列有四个字母组成,U:y+1,D:y-1 , L:x-1 , R:x+1;   这是规则 . 给出(x,y) 问可不可以经过最小的变化这个序列可以由(0,0) 变到(x, ...

  8. POJ 3061 Subsequence 尺取

    Subsequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14698   Accepted: 6205 Desc ...

  9. poj 3061 Subsequence

    题目连接 http://poj.org/problem?id=3061 Subsequence Description A sequence of N positive integers (10 &l ...

随机推荐

  1. 关于php初学者的理解!请大家浏览并指出不足!谢谢!

    昨天开始学习php,由于之前是学习.NET的,刚接触php,就关于语法就是各种不适应,什么js,jq在脑子里一团浆糊..过了一天感觉好了点,现在有点想法,大家欢迎交流批评! 今天用php做了个登录,判 ...

  2. C#自动缩进排列代码的快捷键 c# 代码重新排版 变整齐

    C#自动缩进排列代码的快捷键:  ctrl + k + d 1.小技巧, 可以把最后一个}去掉, 重新写下,就可以达到排版的效果. 2.快捷键:编辑-高级-设置文档的格式 快捷键Ctrl+E,D,设置 ...

  3. 使用replace pioneer批量修改文件名

    shell的正则表达式还是很难记忆的,也没有沉静的心情看文档,于是使用了replace pioneer. 1.  启动replace pioneer,Tools->batch runner  , ...

  4. Centos 7.x 源码编译搭建Nginx

    环境: centos 7 防火墙关闭 Selinx关闭 Nginx Web安装 安装依赖库 yum install pcre-devel pcre gcc gcc-c++ zlib zlib-deve ...

  5. java实现根据高德地图API接口进行地址位置解析,将地址转化为经纬度

    原创文章,转载请注明,欢迎评论和更改. 1,所需额外ar包,import net.sf.json.JSONObject; 2,完整源代码代码 package com.travel.util; impo ...

  6. Yii2验证码使用教程

    控制器代码 public function actions() { return [ 'captcha' => [ 'class' => 'yii\captcha\CaptchaActio ...

  7. 1.Eclipse创建普通java工程

    1.创建java工程 2.输入java 工程名 3.编写类

  8. 游标后面select 带有in时

    今天遇到一个问题,使用游标时,在给游标填充值的时候,select  语句中带有 where查询条件,并且还有 in子句. 本来我是这样写的,试了很多次都不出结果,当然number in (304010 ...

  9. 在ecshop模板使用自定义函数

    https://blog.csdn.net/shaolinld/article/details/46400485 在ecshop模板使用自定义函数 可以增加自定义函数,在模板直接调用,例如: {$us ...

  10. (16)Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】

    在上一节使用是配置文件的方式进行使用druid,这里在扩散下使用编程式进行使用Druid,在上一节我们新建了一个类:DruidConfiguration我在这个类进行编码: package com.k ...