题目链接:
这个尺取法的思想挺好的,如果第一次做尺取法题,不妨看下尺取法入门题。
题目大意:

多组测试数据(0,0)截止。
每组数据输入 n,k(n数字个数,k询问次数)
下一行n个数表示序列。
接下一行k个表示询问,表示找到一个子序列和的绝对值最接近k。每个询问输出三个数 分别是子序列和的绝对值,子序列头和尾。

分析:

  • 传统暴力,数值量太高O(n^2)肯定直接爆炸。
  • 本来从别人尺取法看到本题。发现这有负数,sum不单调怎么玩。苦苦没有想法。后来简单看了别人思路:求和排序 尺取法。
  • sum好求。求完排序初始的序列不是都乱了么,最后还怎么输出?所以这个要用到结构体或者二维数组根据sum排序。你可以用sum[][2]数组其中一个是sum求和,另一个是初始标记。我们在执行的过程中不需要考虑标记,只需要最后输出时候再考虑。
  • 求和数组排完序列的处理也是棘手的,因为sum就算单调了,但是sum有正负之分。如果这样处理起来也很麻烦,但是有一个好方法:sum求差。sum差的含义是两点之间的序列和。这样我只在乎序列和的大小。不用在乎你的正负关系。我只需要知道你们两之间的序列差的绝对值是那么大。但是这样缺少一种情况—sum[i];但是我们可以引入一个sum[0],sum[1]到sum[n]减去sum[0]就是自身。就能保证所有情况。
  • 所以具体思路就是:先把数组求和,然后排序,并把对应的初始序号也计下。然后使用尺取法,left,right=0,right从1到n遍历,看sum[right]-sum[left]是否与已知绝对值靠近,如果满足情况更新对应的L,R,和value.因为他不需要找最短或者最长序列,找到满足即可。也减少了难度。最后L和R是对应value=sum[R]-sum[L].找到R和L对应的序列编号,min对应小的,max对应大的(min,max对应L,R排序前实际位置一个为小编号一个为大),其实|value|=|sum[max]-sum[min]|,实际上序列不包含min那个节点,所以最后输出value min 1 max.

还有一点比较坑的是,他的测试用例有问题。。他又16个-1.是挺坑的,打断点调了很久。

下面附上java ac代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.Arrays;
import java.util.Comparator;public class poj2566 {static int left=0;static int right=0;   static int minlen=0;public static void main(String[] args) throws IOException {// TODO 自动生成的方法存根StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));PrintWriter out=new PrintWriter(new OutputStreamWriter(System.out));while(in.nextToken()!=StreamTokenizer.TT_EOF){int n=(int)in.nval;in.nextToken();int k=(int)in.nval;if(n==0&&k==0) {break;}int a[]=new int[n];int sum[][]=new int[n 1][2];for(int i=0;isum[right][0]?sum[left][0]:sum[right][0];System.out.println((min 1) " " max);}            }}private static void chiqu(int[][] sum2, int team) {// TODO 自动生成的方法存根int l=0;for(int i=1;i=team&&lcomparator=new Comparator() {@Overridepublic int compare(int[] o1, int[] o2) {// TODO 自动生成的方法存根return o1[1]-o2[1];}};}

如果代码有什么错误请大佬指正!?;

  • 如果对后端、爬虫、数据结构算法等感性趣欢迎关注我的个人公众号交流:bigsai

poj2566Bound Found尺取法进阶(java)相关推荐

  1. poj3320Jessica's Reading Problem—尺取法(java)

    题目链接 大意:给序列数字,找出最小子序列,包含所有的元素类型.例如 5 1 8 8 8 1 输出2,因为1 8就包含了所有元素 思路:尺取法 这个和裸的尺取优点不同的是,他需要一个map来维护判断而 ...

  2. poj3061尺取法/前缀和 二分(java)

    今天遇到这题因为以前没见到过,当时就是想着应该有着一个很简单的方法可以过但是奈何就是没思路.后来看了别人思路写了下来.学习了尺取法 poj3061 题目介绍: Description A sequen ...

  3. 尺取法 --算法竞赛专题解析(2)

    本系列文章将于2021年整理出版,书名<算法竞赛专题解析>. 前驱教材:<算法竞赛入门到进阶> 清华大学出版社 2019.8 网购:京东 当当      作者签名书 如有建议, ...

  4. hdu 5178(尺取法)

    pairs Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem De ...

  5. Longest k-Good Segment CodeForces - 616D(尺取法)

    The array a with n integers is given. Let's call the sequence of one or more consecutive elements in ...

  6. P1638 逛画展——尺取法的妙用

    题目描述 博览馆正在展出由世上最佳的 mm 位画家所画的图画. 游客在购买门票时必须说明两个数字,aa 和 bb,代表他要看展览中的第 aa 幅至第 bb 幅画(包含 a,ba,b)之间的所有图画,而 ...

  7. 毛毛虫算法——尺取法

    有这么一类问题,需要在给的一组数据中找到不大于某一个上限的"最优连续子序列" 于是就有了这样一种方法,找这个子序列的过程很像毛毛虫爬行方式,我管它叫毛毛虫算法,比较流行的叫法是&q ...

  8. CF660C Hard Process(尺取法)

    整理的算法模板合集: ACM模板 尺取法 题目中要我们求最多改变k次后连续的1的最长长度.那么转换一下,不就是求至多包含k个0的子串的最长长度吗? 直接套用尺取法的思想,维护两端点,一旦0的个数超过k ...

  9. 【常用技巧精选】尺取法

    整理的算法模板合集: ACM模板 目录 1.反向扫描 1 找指定和的整数对 A.UVA1121 Subsequence B.POJ 3320 Jessica's Reading Problem C.l ...

最新文章

  1. 08、求x的y的幂次方的最后3位数——循环
  2. apue 2013-03-14
  3. 高等数学下-赵立军-北京大学出版社-题解-练习11.2
  4. Oracle入门(十二H)之设置、恢复和删除不可用列
  5. java jna调用dll文件_关于java jna调用dll的问题
  6. 信息安全工程师笔记-综合知识冲刺(四)
  7. ldaptemplate 分页_UI设计干货分享:设计语言 - 侧边导航栏/分页
  8. java keytool 使用总结(转)
  9. 基于OMCS的远程桌面实现远程控制地面站
  10. mysql怎么判断多行数据日期是否连续_MySQL学习笔记(一)
  11. 如何利用迅雷下载百度云?
  12. 【OpenCV4 官方文档】机器学习概述
  13. BIOS 的详细介绍
  14. Matlab的fprintf函数使用百分号问题
  15. 青柚文案:水果店青柚推广文案,水果青柚广告文案
  16. 欲登千层楼,又何惧寒风
  17. Excel在统计分析中的应用—第十二章—回归分析与预测-应用LINEST函数进行回归分析
  18. QQ、微信可以正常访问通讯,浏览器无法打开网页
  19. MatLab矩阵的创建、寻访和运算
  20. 2021年全球汽车天线收入大约1816.1百万美元,预计2028年达到2199.7百万美元,2022至2028期间,年复合增长率CAGR为3.0%

热门文章

  1. Bitcoin 地址原理(1)Base58编码
  2. 数学建模——一维、二维插值模型详解Python代码
  3. 【Flask】ORM高级操作之排序和分页操作
  4. 01-简述cache的基本概念和使用场景
  5. [hypervisor]-ARMV8的hypervisor技术介绍–InProgress
  6. [BSidesSF2020]decrypto-1
  7. BUUCTF 特殊的BASE64
  8. 2020-10-26(安卓逆向开篇)
  9. Razer Synapse 0 day漏洞可获得Windows 10管理员权限
  10. 变种GandCrab样本分析