随笔分类 -  二分/三分算法

摘要:A:http://codeforces.com/contest/1462/problem/A #include<iostream> #include<cstring> #include<map> #include<stack> #include<queue> #include<algorithm> 阅读全文
posted @ 2020-12-17 22:23 liyexin 阅读(142) 评论(0) 推荐(0)
摘要:地址:https://www.acwing.com/problem/content/description/804/ 一: 本来想的是差分做,但是范围是不允许开这么大的数组的。l,r<=1e9 所以考虑离散化。 发现n只有1e5,n个加操作,m个L,R,最多用到n+L+R个区间,也就是3e5。所以开 阅读全文
posted @ 2020-11-13 16:40 liyexin 阅读(144) 评论(0) 推荐(0)
摘要:地址:https://www.acwing.com/problem/content/141/ 解析: 1:在假设完全无差错的情况下,不同子串对应不同哈希值。 对于abcba,那么ab的哈希值应该等于ba的反转哈希值。 也就是说,根据一个字符串,迅速求出它的逆序字符串的反哈希值,如果两者相等,则两者为 阅读全文
posted @ 2020-11-12 19:03 liyexin 阅读(118) 评论(0) 推荐(0)
摘要:洛谷地址:https://www.luogu.com.cn/problem/P1372 题意: 简单来讲,就是在1~n中,找k个使得它们的gcd最大 解析: 一数学分析: 假设第一个为x 那么有2x,3x,4x,....kx kx<=n 则:x<=n/k n/k即为答案 #include<bits/ 阅读全文
posted @ 2020-08-18 18:15 liyexin 阅读(194) 评论(0) 推荐(0)
摘要:地址:https://ac.nowcoder.com/acm/contest/5986/E 解析: 二分最短距离,check出它所需要的修改次数。 check里注意,如果需要修改,那么last是不要变的,因为往后的a[i]-last即为去掉中间后的距离。 如果不需要修改,那么last需要变为a[i] 阅读全文
posted @ 2020-06-09 21:21 liyexin 阅读(210) 评论(0) 推荐(0)
摘要:地址:http://poj.org/problem?id=2182 题意: N头奶牛排队,它们的身高为1~n,已知每头牛前面有多少头比自己矮,求每头牛的身高。 解析: 输入其实是从i=2开始的 暴力代码:跑了438M #include<iostream> #include<cstdio> using 阅读全文
posted @ 2020-06-03 23:27 liyexin 阅读(243) 评论(0) 推荐(0)
摘要:A:http://codeforces.com/contest/1359/problem/A 题意: n张牌,m张王,k个人,每个人分得n/k张牌,得分为手中王牌数-其他人中所拥有的最大王牌数。存在多个,输出0分。 解析: a题依然是熟悉的分类讨论~先分第一个人,再分给其他人,分类讨论。关键是这个n 阅读全文
posted @ 2020-05-29 22:10 liyexin 阅读(163) 评论(0) 推荐(0)
摘要:地址:http://poj.org/problem?id=2985 题意: 输入n,m。共n只猫,m组询问。 1,L,R。L号猫所在组和R号猫所在组合并 0,x。查询第x大组有几只猫。 解析: 理解了好久的说。。。最最重要的还是树状数组的本质要理解好,要不代码写再多也没用。 树状数组:c[i]表示所 阅读全文
posted @ 2020-05-24 18:57 liyexin 阅读(209) 评论(0) 推荐(0)
摘要:地址:http://codeforces.com/contest/1345 题意:按图中规则堆金字塔,给出n个材料,尽量往高的堆,问可以堆出多少个金字塔。 解析:可以推出每个金字塔所需材料数:2,2+5,2+5+8,2+5+8+11.......可以打表,然后二分找>=n的第一个位置,n减去它直到n 阅读全文
posted @ 2020-05-07 18:46 liyexin 阅读(201) 评论(0) 推荐(0)
摘要:地址:https://ac.nowcoder.com/acm/contest/5158/B 解析:先把数组排序,我们需要取某一段,这一段的最大-最小<=k,关键是取哪一段。可以对于每个数,往后找,找到第一个减它>k的,这中间一段就满足了任意两个数之差<=k了。找的过程可以用upper_lound(, 阅读全文
posted @ 2020-04-20 23:23 liyexin 阅读(152) 评论(0) 推荐(0)
摘要:lower_bound和upper_bound均利用了二分查找算法,在一个数组中进行查数。 lower_bound(begin,end,x)-数组名。从begin位置到end-1位置,查找第一个大于等于x的数的位置。如果不存在,返回的是end upper_bound(begin,end,x)-数组名 阅读全文
posted @ 2020-04-19 00:27 liyexin 阅读(205) 评论(0) 推荐(0)
摘要:地址:http://codeforces.com/contest/1337 题意:给出a,b,c,d。从a~b~c~d三个区间内各找一个数,构成三角形。 解析:根据三角形的性质,输出a,c,c是一个可行解。记得从小到大输出,wa了1次。 #include<iostream> #include<vec 阅读全文
posted @ 2020-04-16 23:50 liyexin 阅读(194) 评论(0) 推荐(0)
摘要:二分算法适用于单调函数。对于凸性或凹形函数,可以采用三分的做法。很简单,跟二分类似,只是这里需要两个mid。 已知左右端点L,R,求峰值。第一个mid=(L+R)/2,第二个mmid=(R+mid)/2。判定方法和二分一致,思想就是无限逼近。对于凹形和凸性函数,写法不一样。下面给出模板。 凸性: v 阅读全文
posted @ 2020-03-15 17:19 liyexin 阅读(273) 评论(0) 推荐(0)
摘要:地址:https://ac.nowcoder.com/acm/contest/4743#question 解析:简单模拟。其实我写的并不简单,太尴尬了。第一个是我的,第二个借鉴别人的。 #include<iostream> #include<cstdio> #include<cstring> #in 阅读全文
posted @ 2020-03-14 17:06 liyexin 阅读(225) 评论(0) 推荐(0)
摘要:题目链接:https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3593 题意:输入n*4的矩阵,从4列中每个选一个数求有多少个和为0; 1 6 -45 22 42 -1 阅读全文
posted @ 2020-02-29 00:12 liyexin 阅读(175) 评论(0) 推荐(0)
摘要:https://www.51nod.com/Challenge/Problem.html#problemId=1267 第一种方法:两个for+二分:很好理解,不用考虑重复的问题。但是这个还不够快 #include<iostream> #include<cstdio> #include<cstrin 阅读全文
posted @ 2020-02-16 23:47 liyexin 阅读(226) 评论(0) 推荐(0)
摘要:二分法: 在看这个视频前,我对于二分法是一头雾水的,又加上这个算法我个人很容易写错emm...。视频提到ACwing上的一道题,我用自以为聪明的方法去做,结果TLE了,实在丢人,不说了,开整! 对于例题 789:数的范围,寻找一个数前后第一次与最后一次出现的坐标。我们需要这个模板: 数组定为numb 阅读全文
posted @ 2019-11-03 21:08 liyexin 阅读(2482) 评论(0) 推荐(0)