05 2022 档案
二维凸包
摘要:本文由于方便理解,代码中变量名称较长 什么是凸包? 简单来说,可以想象在平面中有一些点,这些点的集合为 ,我们拿一个橡皮圈撑到最大,尝试套住所有的点,待橡皮圈绷紧后,它会成为一个多边形,这个多边形所有顶点组成的集合便为集合 的凸包。如图: Gift wrapping 算法 这是
Min_25 筛
摘要:简介 Min_25 可以快速解决一类积性函数的前缀和问题。 概述 求积性函数 的前缀和。当然,在《从掌握到精通》中也有提到,其实可以拓展到部分非积性函数。 总的来说,算法第一步,求出质数 对应的 的前缀和。第二步,求出 的前缀和。从某
two-pointer 算法
摘要:介绍 双指针算法是一种通过设置两个指针不断进行单向移动来解决问题的算法。 它包含两种形式: 两个指针分别指向不同的序列。比如:归并排序的合并过程。 两个指针指向同一个序列。比如:快速排序的划分过程。 一般更多使用、也更难想到的是第2种情况。 双指针算法最核心的用途就是优化时间复杂度。 【核心思想】:
三分算法
摘要:简介 三分法的原理也很简单,和二分法几乎一模一样,只不过我们分隔区间的时候,不是将区间一分为二,而是一分为三。之后,我们同样通过缩小区间的方法来确定要查找的值所在。 看到这里,我相信你们应该都能理解算法原理,但是肯定会有一个问题要问:既然分成两份就能解决问题,我们为什么要分成三份呢? 在回答这个问题
Lyndon 分解
摘要:介绍 【模板】Lyndon 分解 #include<cstdio> #include<cstring> char s[5000005]; int main(){ scanf("%s",s+1); int len=strlen(s+1); int i,j,k,ans=0; i=1; while(i<=
Meissel–Lehmer 算法
摘要:前言 推荐先行阅读我的blog文章————Min_25 筛 什么是Meissel–Lehmer 算法 Meissel-Lehmer 算法是一种基于 函数的的快速计算前缀质数个数(当然也可以推广到前缀和质数幂次)的算法。 【模板例题】Meissel–Lehmer 算法 给定整数