神奇密码

  题目大意:就是给你一个数组,要你找出连续的数的绝对值的和最接近t的那一串,并且要找出数组的上界和下界的下标,并显示他们的和

  因为这一题的数有正有负,所以必须要先把和求出来,然后排序,然后利用a(s,t)=sum(t)-sum(s)找出目标

  

 #include <iostream>
#include <algorithm>
#include <functional> using namespace std; //pair<int, int>Acc[100016];
static struct _set
{
int sum, index;
bool operator<(const _set&x)const
{
return sum < x.sum;
}
}Acc[]; void solve(const int, const int);
int get_sum(int *const, int*const, int*const, const int, const int,const int);
int ABS(int); int main(void)//游标卡尺大法
{
int n, k, t, tmp; while (~scanf("%d%d", &n, &k))
{
if (n == && k == )
break;
Acc[].sum = ; Acc[].index = ;
for (int i = ; i <= n; i++)
{
scanf("%d", &tmp);
Acc[i].index = i; Acc[i].sum = Acc[i - ].sum + tmp;
}
sort(Acc, Acc + n + );//直接给和排序 for (int i = ; i < k; i++)
{
scanf("%d", &t);
solve(n, t);
}
}
return ;
} void solve(const int n, const int S)
{
int ans_sum, ans_lb, ans_ub, lb, ub, sum; lb = ub = ; sum = ans_sum = 0x80808080;
while ()
{
while (ub < n && sum < S)//标准尺取法
sum = get_sum(&ans_sum, &ans_lb, &ans_ub, lb, ++ub, S);
if (sum < S)
break;
sum = get_sum(&ans_sum, &ans_lb, &ans_ub, ++lb, ub, S);
}
printf("%d %d %d\n", ans_sum, ans_lb + , ans_ub);
} int ABS(int x)
{
return x >= ? x : -x;
} int get_sum(int *const ans_sum, int*const ans_lb, int*const ans_ub, const int lb, const int ub,const int S)
{
if (lb >= ub)
return INT_MIN;
int tmp = Acc[ub].sum - Acc[lb].sum;
if (ABS(tmp - S) < ABS(*ans_sum - S))
{
*ans_sum = tmp;
*ans_lb = min(Acc[ub].index, Acc[lb].index);
*ans_ub = max(Acc[ub].index, Acc[lb].index);
}
return tmp;
}

  

参考http://www.hankcs.com/program/algorithm/poj-2566-bound-found.html

Greedy:Bound Found(POJ 2566)的更多相关文章

  1. B - Bound Found POJ - 2566(尺取 + 对区间和的绝对值

    B - Bound Found POJ - 2566 Signals of most probably extra-terrestrial origin have been received and ...

  2. 尺取法 poj 2566

    尺取法:顾名思义就是像尺子一样一段一段去取,保存每次的选取区间的左右端点.然后一直推进 解决问题的思路: 先移动右端点 ,右端点推进的时候一般是加 然后推进左端点,左端点一般是减 poj 2566 题 ...

  3. POJ 2566:Bound Found(Two pointers)

    [题目链接] http://poj.org/problem?id=2566 [题目大意] 给出一个序列,求一个子段和,使得其绝对值最接近给出值, 输出这个区间的左右端点和区间和. [题解] 因为原序列 ...

  4. poj 2566 Bound Found(尺取法 好题)

    Description Signals of most probably extra-terrestrial origin have been received and digitalized by ...

  5. poj 2566 Bound Found

    Bound Found Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 4384   Accepted: 1377   Spe ...

  6. POJ 2566 Bound Found 尺取 难度:1

    Bound Found Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 1651   Accepted: 544   Spec ...

  7. POJ 2566 Bound Found(尺取法,前缀和)

    Bound Found Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 5207   Accepted: 1667   Spe ...

  8. poj 2566 Bound Found 尺取法 变形

    Bound Found Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2277   Accepted: 703   Spec ...

  9. poj 2566 Bound Found 尺取法

    一.首先介绍一下什么叫尺取 过程大致分为四步: 1.初始化左右端点,即先找到一个满足条件的序列. 2.在满足条件的基础上不断扩大右端点. 3.如果第二步无法满足条件则到第四步,否则更新结果. 4.扩大 ...

随机推荐

  1. 3_mysql 主从复制

    mysql 主从复制 网易数据库 石勇 提纲 什么是主从复制 主从复制的原理 主从复制的用途 主从复制的搭建 主从复制的问题 什么是主从复制 数据拷贝 准实时 源-主节点:目的-从节点 主从复制的原理 ...

  2. nyoj 91 阶乘之和(贪心)

    阶乘之和 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3! ...

  3. eclipse无法自动识别出svn项目

    因为重新安装了svn插件,重启后发现原来的svn项目无法自动识别出来,连Team->Share Project都没有,而本地用tortoiseSvn是可以正常操作的. 后来我把项目删除然后重新导 ...

  4. oracle查询单表占用空间的大小

    oracle查询单表占用空间的大小 SELECT segment_name AS TABLENAME, BYTES B, BYTES KB, BYTES MB FROM user_segments w ...

  5. Hadoop 之Mong DB 之CentOS 6 使用 yum 安装MongoDB及服务器端配置

    安装MongoDB的方法有很多种,可以源代码安装,在Centos也可以用yum源安装的方法.由于MongoDB更新得比较快,我比较喜欢用yum源安装的方法.64位Centos下的安装步骤如下: 1.准 ...

  6. 第31天 mvp

    interactor调用接口 Activity包含Presenter,这样界面上的操作就会通知到Presenter. Presenter调用view接口, Activity实现view接口,这样Pre ...

  7. 将一个div始终定位在屏幕中心

    //div的id为box #box{ width:200px; heighti:200px; border:1px solid #f00; //重点是以下规则 position:absolute; t ...

  8. BZOJ1798——[Ahoi2009]Seq维护序列seq

    1.题目大意:区间修改乘法操作和加法操作,求区间和 2.分析:为了填补bzoj2631的坑还是写一发题解吧,首先呢,既然想要双标记,但是这两个标记之间又有着制约作用,所以要定义优先级,这个优先级就定义 ...

  9. 在 2017 年将会更加流行的 6 个 Web 开发趋势

    2016即将过去,2017就要来临. 前阵子看到很多对2016前端领域的总结,也是有人欢喜有人忧啊. 转发了这一篇2017web的发展趋势.那么到底会是怎么样的一个发展趋势的,只好拭目以待了. 201 ...

  10. BZOJ 1922: [Sdoi2010]大陆争霸

    Description 一个无向图,到一个点之前需要先到其他点,求从第一个点到第 \(n\) 点最短时间. Sol 拓扑+Dijkstra. 跑Dijkstra的时候加上拓扑序... 用两个数组表示 ...