二分
文章平均质量分 56
m0_51303687
取乎其上,得乎其中;取乎其中,得乎其下;取乎其下,则无所得矣。
展开
-
2021-09-13 POJ2785四数之和
题目链接 最朴素的方法是O(n4)O(n^4)O(n4)地枚举四个数组的所有元素(注意每个数组都从0开始),不过很显然会TLE(尽管此题时限长)。如果对最后一个数组进行排序,将第四层循环改成二分查找,时间复杂度为O(n3logn)O(n^3logn)O(n3logn),虽然明显改进但仍不是好的算法。 正确思路:将后两个数组每两个元素的和计算出来并存放在新数组sum[]中。求出前两个和subsum后,计算sum[]中有多少个元素为-subsum。复杂度O(n2logn)O(n^2logn)O(n2logn)原创 2021-09-13 15:00:25 · 171 阅读 · 0 评论 -
做题记录2021.8.28 二分答案
今天注意学习二分答案 二分查找是一种在有序序列中高效的查找方式。同样的,我们可以把二分的思路运用到某些答案只有一个值的问题中,这些问题包括: 1.假定一个解并判定是否可行(尤其是答案为浮点数的题目中) 如果答案为浮点数,并且找不到离散化思路的话,那么可能无法直接搜索或使用其他方法求出答案。此时可以采取二分答案。 例: 这题可以用二分答案,不过由于浮点数的误差问题,不能像一般的二分那样将边界设为l<r或l<=r。可以采取固定的、足够多(不能太多)的循环次数(如100)或r-l小于一个足够小(不能原创 2021-08-28 15:48:33 · 82 阅读 · 0 评论 -
做题记录2021.7.20
本题数据量大,使用O(n2)O(n^2)O(n2)的传统解法必然会超时。因而需要改变策略。 1.std::multiset计数 根据题意,可以先将元素排序后计算。 利用multiset的有序、允许元素重复的特性,代码如下: #include <cstdio> #include <algorithm> #include <set> using namespace std; multiset<int> a; int main(){ int n,c,cnt.原创 2021-07-20 16:23:46 · 57 阅读 · 0 评论