笔记
sjzezwzy
这个作者很懒,什么都没留下…
展开
-
浅谈对拍(windows c++)
对拍对于Oier可是个好东西,在比赛时,可验证程序是否正确,平时,在下载不了测试点,可查处错误。定义原创 2018-05-20 15:59:58 · 697 阅读 · 0 评论 -
【模板】缩点
题目链接 对于这道题,可将其分为tarjan和记忆化搜索,tarjan负责缩点,记搜负责求最大值。 对于缩点(实际上感觉是搜索),其实是求有向图的强连通分量对此有一个结论:在x回溯前,若low[x]=dfn[x],则从x到栈顶的所有节点构成强连通分量,对于缩完点后的点值,用缩点前的点值相加即可 对于求最大值,实际上就是一个简单记搜,不再说了 时间:60ms。#include<...原创 2018-07-09 11:26:08 · 1145 阅读 · 0 评论 -
STL之vector
vector可理解为一个长度可变的数组,当其内存接近于满时,便会申请内存,当其删减内容时,则会释放内存,vector的内存是动态的。vector支持随机访问,可像数组一样进行访问,但一般只在末尾进行插入。 vector的声明#include&lt;vector&gt; 头文件vector&lt;int&gt; a 长度变化的int数组vector&lt;int&gt; ...原创 2018-07-09 21:01:30 · 149 阅读 · 0 评论 -
Pollard’s Rho算法
对于质因数分解,我们一般有试除法,欧拉筛等,但对于大于1e13的数来说,内存显然是不够的,所以这就让人很是苦恼,还好,有一个随机算法:Pollard’s Rho算法 解释:,要分解n,对于两个整数x,y来说,是n约数的几率很小,但是他们的差是n约数的几率还是有的,并且x,y还是一直在变得,所以只要计算的多了,有很大几率得到n的约数,对于x,y,一般令x1=y1,然后xn=(x(n-1)+c)%m...原创 2018-07-04 11:49:02 · 1593 阅读 · 1 评论 -
乘法逆元总结
部分内容参考李煜东《算法竞赛进阶指南》。定义:若已知a,b,若a*c%b=1,则称c是a关于b的逆元。应用范围:有理数取余,中国剩余定理,解同余方程等。求法:1.硬算 通过枚举来寻找逆元神一般的做法,一般没什么人用。 具体代码int py(int a,int b){ int c=1; while(1){ if(...原创 2018-07-11 21:41:43 · 209 阅读 · 0 评论 -
中国剩余定理
什么是中国剩余定理中国剩余定理是中国古代求解一次同余式组的方法。是数论中一个重要定理。又称孙子定理。一元线性同余方程组问题最早可见于中国南北朝时期(公元5世纪)的数学著作《孙子算经》卷下第二十六题,叫做“物不知数”问题,原文如下: 有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?即,一个整数除以三余二,除以五余三,除以七余二,求这个整数。《孙子算经》中首次提到了同余方程组问...原创 2018-07-11 22:37:07 · 815 阅读 · 0 评论 -
二进制与bitset
一.基础位运算(以代码中的符号为准)运算符与(&)(and):1&1=1 0&1=0 1&0=0 0&0=0 或(|)(or):1|1=1 0|1=1 1|0=1 0|0=0 异或(^)(xor):1^1=0 0^1=1 1^0=1 0^0=0 非(!)(not): !1=0 !0=1逻辑移位...原创 2018-07-17 22:41:11 · 220 阅读 · 0 评论 -
LCA的几种常见求法
LCA算是OI中比较有用的算法了,下面来介绍LCA的三种大众求法。暴力寻找法这种是将一个点到根节点上所有的点都标记上,然后,有另一个点想根节点找,第一个有标记的便是LCA。这种的时间复杂度为O(n^2),算是比较慢的了。 上代码#include&amp;amp;lt;bits/stdc++.h&amp;amp;gt;using namespace std;int n,m,s,ver[1000001],hed...原创 2018-07-06 23:23:34 · 1951 阅读 · 0 评论 -
c++中的取整函数
对含有小数点的数进行四舍五入是比较普遍的一种需求。在C++中也有类似的取整函数。在C++的头文件中有floor()和ceil()函数。在STL中还有round()函数。这三个函数的作用如下: 在运算时我们经常碰到取整问题,下面来说一下c++中的用的比较多三个取整函数。 函数 用途 1.1 1.9 -1.1 -1.9 floor() 向下取整(及最大...原创 2018-07-19 15:52:32 · 6547 阅读 · 0 评论 -
硬核优化
%:pragma GCC optimize(3)%:pragma GCC optimize("Ofast")%:pragma GCC optimize("inline")%:pragma GCC optimize("-fgcse")%:pragma GCC optimize("-fgcse-lm")%:pragma GCC optimize(&qu原创 2018-07-15 15:45:22 · 2712 阅读 · 0 评论 -
高精(加减乘除)
高精,实际上使用数组模拟我们小学时列竖式的过程,所以当不会写时用python,列竖式的来想怎么解决。 高精加#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int main(){ int a2[...原创 2018-07-09 11:09:14 · 376 阅读 · 0 评论 -
【模板】割点(割顶)
题目链接 用tarjan的裸题,对于一个点,设其子节点中一个节点y,当且仅当dfn[x]≤low[y]时为割点,特别的,对于根节点,要有两个y满足要求。 时间:100ms。#include<bits/stdc++.h>using namespace std;int ans=0,cut[1000010],hed[1000010],nxt[2000010],ver[1000...原创 2018-07-09 09:42:32 · 156 阅读 · 0 评论 -
int、long、long long取值范围
这就当做是一个备忘录了。unsigned int 0~4294967295 int 2147483648~2147483647 unsigned long 0~4294967295 long 2147483648~2147483647 long long:-9223372036854775808~9223372036854775807 unsigned long lo...原创 2018-05-14 23:26:58 · 274 阅读 · 0 评论 -
随机化贪心
在说随机化贪心前先说一下随机数据生成。随机数据生成头文件ctime,cstdlib。 调用函数 rand(),srand(),其中注意windows中RAND_MAX=32767。 rand()返回0~RAND_MAX之间随机整数。 srand()初始化rand()种子。 srand((unsigned)time(0)); (long long)rand()\RAN...原创 2018-05-24 21:02:49 · 1768 阅读 · 0 评论 -
关于codeforces比赛规则介绍(转载)
Codeforces 简称: cf(所以谈论cf的时候经常被误会成TX的那款游戏). 网址: codeforces.com 这是一个俄国的算法竞赛网站,由来自萨拉托夫州立大学、由Mike Mirzayanov领导的一个团队创立和维护,是一个举办比赛、做题和交流的平台.举办比赛和做题就不说了,“交流”指的是自带blog功能,可以求助/发布题解之类.官方语言是俄语和英语,因此可能有些偏僻的题...转载 2018-05-19 21:42:56 · 6460 阅读 · 0 评论 -
基数排序
概念基数排序属于“分配式排序”,又称“桶子法”,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的稳定性排序法 ————————来自《百度百科》。 用人话说就是加强版的桶排,可分为LSD和MSD两种。手动...原创 2018-05-31 16:17:39 · 151 阅读 · 0 评论 -
莫队算法
莫涛大神发明的似乎可解一切区间问题的算法,本蒟蒻觉得似乎其本质是分块优化再加上多关键字排序。分块大法好 拿题说事袜子这是道很好拿来理解莫队的题题目大意进行区间询问[l,r],输出该区间内随机抽两次抽到相同颜色袜子的概率。分析当你确定区间[l,r]的答案时(分子为各种颜色的平方和,分母为(l-r)^2),可借其进行分析,当区间变为[l-1,r]时,设l块颜色为co(...原创 2018-05-31 21:56:35 · 177 阅读 · 0 评论 -
离散化的实现
离散化,顾名思义,就是将比较大的数离散成比较小的数,若一共有1e4的数字,大小在0~1e9,这时你可将其离散化,在离散的过程中注意有相同的数字,这时它们的大小应该是一样的,否则会GG,在离散过程中,可先将其排序,运用lower_bound寻找第一个大于等于它的数即可int al[10010], bl[10010],n;scanf(&quot;%d&quot;,&amp;amp;n);for(int i=1; i&amp;...原创 2018-07-08 11:05:39 · 356 阅读 · 0 评论 -
【模板】并查集
题目链接 时间:850ms。#include&amp;lt;bits/stdc++.h&amp;gt;using namespace std;int a,b,c,i,n,m;int f[10010];int find(int a){ if(f[a]==a) return a; return f[a]=find(f[a]);}int main(){ sc...原创 2018-07-08 09:03:55 · 146 阅读 · 0 评论 -
【模板】负环
模板链接 时间:4148ms。#include&amp;lt;bits/stdc++.h&amp;gt;using namespace std;int T,ver[60001],nxt[6001],hed[6001],tot,bian[6001],dian[2001],bj[2001],jl[2001],n,m;void add(int x,int y,int z){ ver[++tot]=y...原创 2018-07-08 09:00:10 · 256 阅读 · 0 评论 -
【模板】树链剖分
题目 时间:1200ms。#include&amp;lt;bits/stdc++.h&amp;gt;using namespace std;long long n,m,p,r,ver[200001],nxt[200001],hed[100001],tot=0,al[200001],f[100001],d[100001],rk[200001],id[200001],size[100001],top[1...原创 2018-07-08 16:49:32 · 137 阅读 · 0 评论 -
【模板】st表
题目 ST表经典题——静态区间最大值 方法是设f[i,j]表示从i开始2^j个数中的最大值,在读入数据后可先处理出来,方便以后O(1)查询,转移方程f[j][i]=max(f[j][i-1],f[j+(1<<(i-1))][i-1]); 时间:1200ms。#include<bits/stdc++.h>using namespace std;int f[1...原创 2018-07-08 17:08:25 · 967 阅读 · 1 评论 -
Miller–Rabin素数检测法
感觉这就是一个多次随机的算法……算法嗯,随机大法好,在一般判断素数中主要有这几种:暴力枚举判断法(判断一个:O(√n)),杜氏筛(O(nloglogn),欧拉筛(n)等,这里说一个随机筛法:Miller–Rabin,这玩意主要靠两条定理,一是费马小定理,二是二次探测定理,以下说一下算法流程: 对于一个p来说, 1.随即去一个a。 2.若a^(p-1)%p!=1,则这是一个合数,退出 ...原创 2018-07-01 22:38:01 · 633 阅读 · 0 评论 -
【模板】线性基
感觉这玩意和暴力差不多,就是优化优化而已……线性基我们实际在读入时就对其进行处理,我们定义f数组表示第i位是1的数中最先出现的且最高为是i的数字,若是,对f判断,若f[i]是0,则f[i]=n,否则将其^,然后继续找。 上代码,感觉这玩意自己打一遍就会了#include<bits/stdc++.h>#define ll long longusing namespa...原创 2018-09-13 19:31:24 · 159 阅读 · 0 评论