POJ-3061 Subsequence 二分或尺取
题意:给你一个长度为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 二分或尺取的更多相关文章
- POJ 3061 Subsequence 二分或者尺取法
http://poj.org/problem?id=3061 题目大意: 给定长度为n的整列整数a[0],a[1],--a[n-1],以及整数S,求出总和不小于S的连续子序列的长度的最小值. 思路: ...
- POJ 3061 Subsequence ( 二分 || 尺取法 )
题意 : 找出给定序列长度最小的子序列,子序列的和要求满足大于或者等于 S,如果存在则输出最小长度.否则输出 0(序列的元素都是大于 0 小于10000) 分析 : 有关子序列和的问题,都可以考虑采用 ...
- poj 3061 Subsequence 二分 前缀和 双指针
地址 http://poj.org/problem?id=3061 解法1 使用双指针 由于序列是连续正数 使用l r 表示选择的子序列的起始 每当和小于要求的时候 我们向右侧扩展 增大序列和 每当和 ...
- Poj 3061 Subsequence(二分+前缀和)
Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 12333 Accepted: 5178 Descript ...
- POJ:3579-Median(二分+尺取寻找中位数)
Median Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9201 Accepted: 3209 Description Gi ...
- POJ 3061 Subsequence 二分查找
题目大意:给出长度为n的一个序列,给出一个数字S,求长度最短的序列和大于等于S的连续子序列,输出该长度,如果没有答案输出0. 题目思路:看数据范围,这道题就是卡时间的.我们可以用sum[i]记录前i项 ...
- 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, ...
- POJ 3061 Subsequence 尺取
Subsequence Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14698 Accepted: 6205 Desc ...
- poj 3061 Subsequence
题目连接 http://poj.org/problem?id=3061 Subsequence Description A sequence of N positive integers (10 &l ...
随机推荐
- PCL:描述三维离散点的ROPS特征(Code)
前言: 三维点云为三维欧式空间点的集合.对点云的形状描述若使用局部特征,则可分为两种:固定世界坐标系的局部描述和寻找局部主方向的局部描述,ROPS特征为寻找局部主方向的特征描述. 1.寻找主方向(对X ...
- 安卓JNI使用OpenCV
OpenCV也有Java数据结构的包,不过计算速度还是很慢,非不得已不使用此种方式调用OpenCV.使用NDK编写底层OpenCv的调用代码,使用JNI对代码进行封装,可以稍微提高一点效率. 参考链接 ...
- 本博客基本不再更新,请移步至我的CSDN博客
本博客基本不再更新,请移步至我的CSDN博客:http://blog.csdn.net/wpxu08
- SpringBoot入门系列(转)
SpringBoot入门系列:第一篇 Hello World http://blog.csdn.net/lxhjh/article/details/51711148
- AOP注解形式 整合memcache
1.首先自定义注解 :添加缓存 @Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documented@Inheritedp ...
- lvs直接路由模式DR模式
1)实验所有关闭防火墙systemtcl stop firewalldsystemctl disable firewalldsetenforce 0iptables -F2)配置负载调度器配置虚拟IP ...
- 基于MATLAB的语音信号处理
一.图形界面设计 1.新建GUI界面 2.新建空白页 3.命名为"yydsp",打开界面 4.拖放控件 5.按预定功能修改界面 6.填写Callback函数 未填写前的代码: fu ...
- The story of one latency spike
转自:https://blog.cloudflare.com/the-story-of-one-latency-spike/ A customer reported an unusual proble ...
- P1125 笨小猴
P1125 笨小猴 标签:NOIp提高组 2008 云端 难度:普及- 时空限制:1s / 128MB 题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼.但是他找到了一种方法,经试验证 ...
- ldap 用户组和用户(4)
Posixgroup用户组属性 默认情况下openldap的用户组属性是Posixgroup,Posixgroup用户组属性和用户没有实际的对应关系.如果我们一定要把Posixgroup和user对应 ...