随笔分类 -  ACM / 知识整理

摘要:因为这两种算法都是随机化算法且都与数论问题有关,而且还有许多微妙的联系,因此放在一起整理. 素性检验问题 (主要参考资料:【朝夕的ACM笔记】数论-Miller Rabin素数判定 - 知乎 (zhihu.com)) (不完善的)Fermat素性检验: 由Fermat小定理可知,对于素数$p$,所有 阅读全文
posted @ 2023-09-16 11:59 Isakovsky 阅读(193) 评论(0) 推荐(0)
摘要:0,取模与整除 这一部分讨论在c++中取模与整除的特性 取模操作,又称取余,在C++中的符号是% ,和乘除法属于同一运算优先级,模数不允许出现零正数模正数结果是非负数,很好理解,但出现了负数怎么办? #include <iostream> using namespace std; int main( 阅读全文
posted @ 2021-09-26 21:56 Isakovsky 阅读(490) 评论(0) 推荐(0)
摘要:有人说,90%的程序员都手写不出正确的二分查找 没错,我就是那90% c++的标准库里只提供了binary_search(),lower_bound(),upper_bound()三个函数,缺点就是,只能在数组或者vector这样的线性数据结构上二分 所以就需要整理一下二分的用法和代码 1,bina 阅读全文
posted @ 2020-11-30 10:29 Isakovsky 阅读(147) 评论(0) 推荐(0)
摘要:首先定义递推数列: 对于无限的数列$a[i]$,假设存在一个有限的k,且存在函数$f(x_1,x_2...x_k)$使得任意$i>k$,有$a[i]=f(a_{i-1},a_{i-2}...a_{i-k})$,则称数列a为递推数列。 如果取一个模数m,限制数列a的元素必须为小于m的正整数,并将上述定 阅读全文
posted @ 2019-09-08 18:50 Isakovsky 阅读(574) 评论(0) 推荐(1)
摘要:字符串hash唯一用途是快速判断两字符串是否相等,但存在极小概率假阳性(本来不相等,但算法返回相等)。 根本思想是把一个字符串转换为一个整数,要求相同的字符串,对应的这个整数相同,不同的字符串,对应的这个整数不同。 阅读全文
posted @ 2019-08-18 16:23 Isakovsky 阅读(260) 评论(0) 推荐(0)
摘要:众所周知,c++的STL中提供了三个二分查找函数,binary_search(),lower_bound(),upper_bound(),功能分别是找某值是否在数组中出现,找到数组中第一个大于等于某值的元素,找到数组中第一个大于某值的元素。 这三个函数使用十分灵活,可以通过自定义结构体,比较函数,重 阅读全文
posted @ 2019-08-16 16:40 Isakovsky 阅读(224) 评论(0) 推荐(0)
摘要:今天拍脑袋想出来的,不用ceil函数,不用浮点运算,不用取模,兼顾运行常数和代码量的向上取整除方法 在保证a,b>0时 ceil(a/b)=(a-1)/b+1; (完) 阅读全文
posted @ 2019-08-16 13:41 Isakovsky 阅读(489) 评论(0) 推荐(1)
摘要:可持久化线段树,别名主席树。 在我看来这个数据结构绝妙之处在于它把可持久化的概念用于解决区间查询的问题。 一般主席树用于解决区间第k大的问题。 我们建立一棵权值线段树,权值线段树就是线段树上第i个叶子节点储存i出现了多少次(类似于桶排序) 假想,一个数列第i个元素a[i]=p,是在第i个时间节点插入 阅读全文
posted @ 2019-08-06 21:56 Isakovsky 阅读(350) 评论(0) 推荐(0)
摘要:这个板子能够解决任何线性递推式,只要你确定某个数列的某项只与前几项线性相关,那么把它前若干项丢进去,这个板子就能给你返回你要求的某项的值。 原理???(待补充) 阅读全文
posted @ 2019-08-06 15:46 Isakovsky 阅读(375) 评论(0) 推荐(0)
摘要:主要参考资料:3b1b的视频快速傅里叶变换(FFT)——有史以来最巧妙的算法?_哔哩哔哩_bilibili在此一并感谢字幕制作者 FFT只有一个功能:快速计算卷积,它能把朴素卷积的$O(n^2)$时间复杂度降低到$O(nlogn)$。 卷积: 卷积就是把两个离散序列的每一位两两相乘的过程,多项式的乘 阅读全文
posted @ 2019-08-05 00:14 Isakovsky 阅读(115) 评论(0) 推荐(0)
摘要:进入正题前,先介绍一个计算排列的超好用的工具: next_permutation()和prev_permutation() 这两个函数定义在algorithm库中 参数和sort类似,传入三个参数,数组首位,数组末位的后一个,以及比较函数,当比较函数省略时,默认为less 功能是生成当前这个数组里的 阅读全文
posted @ 2019-08-03 11:55 Isakovsky 阅读(618) 评论(0) 推荐(0)
摘要:当模数为素数时可以用费马小定理求逆元。 模数为合数时,费马小定理大部分情况下失效,此时,只有与模数互质的数才有逆元(满足费马小定理的合数叫伪素数,讨论这个问题就需要新开一个博客了)。 (对于一个数n,所有小于它且与它互质的数组成一个模n乘法群) gcd是最大公约数,扩展gcd则是在一对数x,y的gc 阅读全文
posted @ 2019-08-02 22:28 Isakovsky 阅读(441) 评论(0) 推荐(0)
摘要:将一些计算几何常用的板整理一波 tips: 点与凸包的关系,计算凸包每条边与点的叉乘,如果出现0,则在凸包边上,出现两个0,则在凸包顶点上,正负性均相同,则在凸包内,否则在凸包外。 线段与凸包的关系,是两个点与凸包的关系的笛卡尔积。 直线与凸包的关系,可求凸包上每点与直线叉乘的正负性。 两线段的关系 阅读全文
posted @ 2019-08-02 20:22 Isakovsky 阅读(221) 评论(0) 推荐(0)
摘要:因为manacher算法把原来的字符串扩大了两倍,因此在应用时许多二级结论都非常不直观,现场推出来很麻烦,因此笔者在此做个简单整理,如果发现有错误或者有常用的我没有涉及到的,恳请在下方评论区指出,我会非常感谢。 1,rad数组虽然指的是回文半径,但是它的值减一和回文子串长度对应 因此,最长回文子串长 阅读全文
posted @ 2019-07-28 16:04 Isakovsky 阅读(185) 评论(0) 推荐(0)
摘要:标准库中常用的需要定义比较函数的工具: sort 排序 priority_queue 优先队列(或称堆) lower_bound upper_bound 二分查找 nth_element 找数组第n大 set 集合 map 映射表 常用的定义比较函数的方法: 对于普通的数据类型,如int,doubl 阅读全文
posted @ 2019-07-28 12:19 Isakovsky 阅读(874) 评论(1) 推荐(1)