随笔分类 -  ACM / 双指针

摘要:原题链接 考察:双指针 思路: 两个单调队列,一个存最大值,一个存最小值.当差值$>k$时开始计数.这时需要在设置一个指针$l$,将最左边的队列元素去掉.计算的时候....不要两头计算,确定左边计算右边........... ##Code #include <iostream> #include < 阅读全文
posted @ 2021-08-01 10:52 acmloser 阅读(37) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:枚举+二分 思路: 枚举其他两个药品的使用量,二分最后的使用量 ##Code #include <iostream> #include <cstring> #include <cmath> #include <vector> using namespace std; typedef 阅读全文
posted @ 2021-07-27 21:20 acmloser 阅读(34) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:双指针 思路: 将原数组排序后,枚举每一个$a[i]\(,求使\)(j,i)$全部变为$a[i]$的最长左边界$j$,当$a[i]$变小时,$j$只会往更左扩展. ##Code #include <iostream> #include <cstring> #include <algo 阅读全文
posted @ 2021-07-24 09:34 acmloser 阅读(27) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:单调队列 错误思路: 双指针.当i前进的时候,j没有回溯使得漏解. 思路: 对于每一个$sum[i]$,用单调队列保存与$i$长度不超过$k$的最小值. 注意下一个问题:因为我们一定要先把$sum[0] = 0$纳入,如果后面的$sum[i]<0$且呈非递增,就无法求解,所以答案的初 阅读全文
posted @ 2021-07-10 00:36 acmloser 阅读(33) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:双指针+枚举 很经典的思路,但蒟蒻不会... 错误思路: 二分面积,然后发现需要枚举面积的约数,配合多组样例会TLE 思路: 枚举第$i,j$行,在$[i,j]\(之间作双指针求\)>=k$的最小面积. ##Code #include <iostream> #include <cst 阅读全文
posted @ 2021-07-09 22:44 acmloser 阅读(23) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:双指针 思路: 很明显可以枚举$log_2sum(i,j)$的值,然后枚举左端点求右端点的区间,用二分TLE到我整个人都麻了,看题解是用双指针... 我自己想的是用枚举右端点,二分求左端点区间,也是TLE... ##Code #include <iostream> #include 阅读全文
posted @ 2021-07-09 20:28 acmloser 阅读(33) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:双指针 应该算水题,但我WA了多发.... 思路: 不能右端点计数,要左端点计数,这样就不需要考虑左右两边计重. ##Code #include <iostream> #include <cstring> using namespace std; typedef long long 阅读全文
posted @ 2021-07-09 11:12 acmloser 阅读(21) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:双指针 思路: 枚举和k,求$sum[r]-sum[l]==k$的最大r,注意特判0 ##Code #include <iostream> #include <cstring> #include <algorithm> using namespace std; const int N 阅读全文
posted @ 2021-07-08 13:16 acmloser 阅读(25) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:二分+完全背包 错误思路: 说实话一眼看就觉得像背包,但是1e7的空间真的有点离谱,实际证明就是要敢想.后面想的贪心都贪不到最优解,枚举会超时. 思路: $f[i][j]$表示前$i$件物品,价值最少是j的最小花费. \(f[i][j] = min(f[i-1][j],f[i][j- 阅读全文
posted @ 2021-07-07 23:24 acmloser 阅读(33) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:二分 思路: 很明显尽量取相邻的,一开始我还以为和$n,k$的奇偶有关,实际是没有关系的. (1) 无解:\(n<\frac{(1+k)*k}{2}\) (2) 将1~k偏移到$<=n$的最大$k$长度连续和,剩下的余数从大开始补. ##Code #include <iostream 阅读全文
posted @ 2021-07-05 01:55 acmloser 阅读(22) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:二分 思路: 不要用圆锥比例求$r_水$,当情况是圆柱会$/0$,利用圆台上下半径差的三角形求$r_水$.二分水的高度. 其实不是很懂为什么可以二分,主要是$V_水$受$r_水$和$h_水$两个变量的影响,如果一方增大另一方就会缩小,有大佬懂t我一下. 全网貌似只有我推的算$r_水$ 阅读全文
posted @ 2021-07-04 21:32 acmloser 阅读(22) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:二分 思路: 前缀和,二分右端点找出现总次数为奇数的r ##Code #include <iostream> #include <cstring> using namespace std; typedef long long LL; const int N = 20010; int 阅读全文
posted @ 2021-07-04 11:33 acmloser 阅读(15) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:双指针 错误思路: 贪心,对于当前枚举$a[i]$,要么把它加入到当前和里,要么新开一个和. 错误原因: 只能说当前差值大不代表以后小. 正确思路: 双指针法用于解决有单调性的区间问题.这里找到区间和的绝对值最靠近t的点.因为数列是有+-的,所以前缀和没有单调性,但是这里求的是绝对值 阅读全文
posted @ 2021-06-28 15:58 acmloser 阅读(28) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:二分 错误思路: 分治.将第一个数和其他所有数比较完后,确定第一个数的位置.然后递归左右半边. 只过了10个数据,剩下的超过10000次. 思路: vector装已经排好的序列,对于新的枚举数,二分求适合它的位置. ##Code // Forward declaration of c 阅读全文
posted @ 2021-06-24 09:56 acmloser 阅读(28) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:前缀和+二分 错误思路: 求每个$kk$矩阵的最大值,没想出来,还以为是dp 思路: 将最大值问题转换为个数问题,求在ans时间内,$kk$矩阵和 = k*k是否为true.这里二分+前缀和(树状数组)解决. 时间复杂度O(\(n*m*log_2 q\)) ##Code #inclu 阅读全文
posted @ 2021-06-10 11:45 acmloser 阅读(33) 评论(0) 推荐(0) 编辑
摘要:原题链接 题意:求构造c[k] = b[i]-a[j],求(最大差值-最小差值)的最小值 考察:双指针 错误思路: 排序b,a.输出b[n]-a[n]-b[1]+a[1].实际上最大差值不一定由b[n]构成,最小差值不一定由b[1]构成.如果b数组都相同,最大差值和最小差值可以是同一个数. 正确思路 阅读全文
posted @ 2021-05-25 12:18 acmloser 阅读(42) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:01分数规划+01背包 错误思路: 二分求最大值,check函数里对 t[i] - mid*w[i]排序,从大到小选,只要和为sum就一直选,最后检测选择的W是否>=m 这个思路错在不能从大到小选,因为存在t[i] - mid*w[i]很小,但是w[i]很大使原本从大到小的W>=m 阅读全文
posted @ 2021-05-06 16:37 acmloser 阅读(65) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:01分数规划 思路: 由奶牛观光所说,01分数规划基本是在考察二分与其他算法的结合.这里也可以化为累加 a[i] - mid*b[i] 注意原式子*100,所以mid需要/100 我们用C数组保存a[i] - mid*b[i]的值,然后选出最大的n-k个,如果和>=0就说明正确. 1 阅读全文
posted @ 2021-05-06 10:35 acmloser 阅读(47) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:思维 思路: 和CF817D一样的思路,考虑单点对答案的贡献.这题没必要统计左右边界.只需要记录上一个与当前字符相同的位置,右边界是字符串最右边.详情见代码 1 #include <iostream> 2 #include <cstring> 3 using namespace st 阅读全文
posted @ 2021-04-13 22:59 acmloser 阅读(63) 评论(0) 推荐(0) 编辑
摘要:原题链接 考察:二分+前缀和 思路: 易知w变大,y和变小,w变小,y和变大.由此发现y与w的变化关系有单调性.但是这道题求的是abs(Y-S),答案和w的变化并无单调性.我们可以求最小的>=s的Y和最大的<s的Y.再两边求最小值. 真的没必要死脑筋的返回true与false.单纯数值类型可考虑返回 阅读全文
posted @ 2021-04-10 14:26 acmloser 阅读(177) 评论(0) 推荐(0) 编辑