题意:

给定一串数字,并给定一个目标数字t,求出一个区间,该区间上的所有值相加后取绝对值最接近t.

分析:

先考虑能不能用尺取来做,如果用尺取来做,那么尺取的数列必须是单调的,否则无法确定何时左右端点移动,因此考虑能不能用前缀和来记录每一个点.

因此考虑用sum[i]表示 1-i 的前缀和,并将sum[i]这个数列进行升序,因此sum[r]-sum[l]则表示一个区间内的累加和,但是是左开右闭的一个区间.

由此 sum[r]-sum[l] < t,r++;sum[r]-sum[l] > t,l++;进行尺取即可.

代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define rep(i,a,b) for(int i = a;i <= b;i++)
using namespace std;
typedef long long ll;
const int maxn = 1e5+10;int n,k;
int a[maxn];
ll t,ans;
struct Sum{ll v,num;
}sum[maxn];bool cmp(Sum x,Sum y)
{return x.v < y.v;
}ll abss(ll x)
{if(x < 0) return (-1)*x;else return x;
}int main()
{while(scanf("%d%d",&n,&k),n+k){sum[0].v = 0; sum[0].num = 0;rep(i,1,n){scanf("%d",&a[i]);sum[i].v = sum[i-1].v+a[i];sum[i].num = i;} sort(sum,sum+1+n,cmp);int lp,rp;while(k--){scanf("%lld",&t);ans = 1e17;int tmp = 0;int l = 0,r = 1;while(l<r && r<=n){tmp = abss(sum[r].v-sum[l].v);if(abss(tmp-t) < abss(ans-t)){ans = tmp;lp = sum[l].num; rp = sum[r].num;}if(tmp < t)r++;else if(tmp > t) l++;else break;if(l == r) r++;}if(lp > rp) swap(lp,rp);  printf("%lld %d %d\n",ans,lp+1,rp);}}return 0;
}

【ZOJ 1964】【尺取】Bound Found【暑期 No.3】相关推荐

  1. Bound Found POJ - 2566 (尺取+前缀和)

    题意 就是给一串序列 在给一个t 求一段区间的加和绝对值与t最小的值与区间左右端点是多少 思路 这道题一开始不知道如何去做 用尺取法求区间但是因为区间中存在负数没有单调性  没有特殊的特征 若对区间求 ...

  2. 【2019牛客暑期多校训练营(第三场)- F】Planting Trees(单调队列,尺取)

    题干: 链接:https://ac.nowcoder.com/acm/contest/883/F 来源:牛客网 The semester is finally over and the summer ...

  3. 洛谷 - P1381 - 单词背诵 - 哈希 - 尺取

    https://www.luogu.org/problemnew/show/P1381 字符串匹配,用哈希总没有错的. 然后就是尺取了,题目要求首先尽可能多覆盖,那么每次尾巴往后面长. 一开始先找到第 ...

  4. POJ 3320 Jessica's Reading Problem (尺取)

    Description 给出一段长度为\(n\)的整数序列,求包含所有出现过的数的连续区间的最小长度. Input 第一行给出序列长度\(n\),第二行给出\(n\)个整数,表示这个序列.\(n \l ...

  5. 部分和问题 (dfs搜索 尺取)

    部分和问题 给定整数a1, a2, a3, a4,  ..........   ,  an  ,判断是否可以从中取出若干个数,使得他们的和恰好为k  . 1  <= n <= 20 测试数 ...

  6. Innumerable Ancestors 尺取 dfs序 lca

    给一棵树,m次查询,每次查询给两个集合,从这两个集合中分别选一个结点,使得这两个结点的lca的深度最大 考虑dfs序为3, 4, 5的三个结点,3和4的lca深度一定大于等于3和5的lca深度 所以可 ...

  7. Codeforces Round #321 (Div. 2) B. Kefa and Company (尺取)

    排序以后枚举尾部.尺取,头部单调,维护一下就好. 排序O(nlogn),枚举O(n) #include<bits/stdc++.h> using namespace std; typede ...

  8. AtCoder - arc098_b Xor Sum 2(尺取+位运算)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的序列,现在要求 AlxorAl+1xor...xorAr=Al+Al+1+...+ArA_l\ xor\ A_{l+1}\ xor\ ...\ ...

  9. 牛客 - Alice and Bob(尺取+二分)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,和一个数字 kkk.现在给出 mmm 次询问,每次查询需要回答区间 [l,r][l,r][l,r] 内有多少个子区间,满足区间内不同的数字 ...

  10. 牛客多校9 - Groundhog Looking Dowdy(尺取)

    题目链接:点击查看 题目大意:给出 n 天,每天可以有数件衣服可以选择,但每天只能选择一件衣服穿,每件衣服都有权值,现在需要挑出 m 天的衣服,使得最大值与最小值之差最小 题目分析:比赛时为了恰烂分用 ...

最新文章

  1. Windows 7系统如何设置锁定计算机快捷方式【技术小摘】
  2. matlab双重for训话,Question 2:
  3. 校宝在线携手神策数据 数据赋能产品服务体验双升级
  4. springmvc参数绑定
  5. ie不加载jre_详细讲解!从JVM直到类加载器
  6. vector容器v1、v2之间相互赋值的三种方法及易错点详解
  7. mysql emoji表情_mysql utf8mb4与emoji表情
  8. Apache HTTP Server 下载,安装,配置,启动手把手教你
  9. 绘制一张好看的散点图及pearson和spearman相关性分析的选择
  10. NLPIR大数据语义系统KGB技术引领新方向
  11. css盒模型(标准模式和怪异模式)
  12. 2021年深圳盐田区绿色建筑与装配式建筑发展资金申报资助及条件,补贴200万
  13. led屏背后线路安装图解_科普:网格屏是什么意思?LED网格屏怎么安装
  14. 移动网关贝尔G-140W-C 修改wifi前缀去掉CMCC
  15. 基于ASP.NET的电商系统的设计与实现
  16. java jtable 复选框_java swing如何在JTable一个单元格添加多个复选框
  17. 【@Scheduled定时任务】
  18. 很好用的程序员在线画图软件
  19. 使用LVM动态管理4T以上硬盘
  20. java的开发步骤_Java学习1:JAVA开发的步骤

热门文章

  1. 使用变量替换批量部署GoldenGate
  2. android的GCM研究
  3. iOS开发基础 - UIDataDetectorTypes
  4. javascript客户端验证函数大全
  5. 装ubuntu_系统安装_win10下安装Ubuntu后,启动时无win10选项的解决办法。
  6. ping 代理_linux命令行代理神器-proxychains
  7. c语言 入字符要中文状态吗,常见的HTTP状态码深入理解
  8. mvn打包并部署本地tomcat_maven一键部署tomcat war包
  9. 著名线性代数教授 85岁麻省理工学院教授,给2020本科生教授《线性代数入门》
  10. Docker的核心概念镜像Images, 容器Containers, 数据卷Volumes