摘要:
建树状空间或者线段表时,可能会出现占用空间过大的问题,这时可以考虑离散化的方法。 比如说我们只需要关注数之间的大小关系,而不必在意数具体的值时,就可以采用离散化的方法来进行处理。这种情况下,只需要将原数列中每个数替换为这个数在数列中的大小排名就可以。但是离散化只是一种思想,可以根据实际情况采用合适的 阅读全文
posted @ 2020-10-09 14:50
太山多桢
阅读(178)
评论(0)
推荐(0)
摘要:
割点:对于一个连通图,删去某些点得到的图将不再连通,而删去该点集的任意子点集得到的图还连通,则该点集为原图的点割集。相似的,割边的定义也是一样。 暴力做法是枚举去掉的点/边,对剩余图的连通块计数。而tarjan算法借助深搜可以在线性时间内完成。tarjan算法核心的两个辅助数组,dfn[i]为节点i 阅读全文
posted @ 2020-10-09 13:02
太山多桢
阅读(267)
评论(0)
推荐(0)
摘要:
简单情况下可以手摸规律,找到规律后一般可以O(1)解决问题。例题:洛谷P4018、P4860。或者找出一定规律后进行递推,并不是非要找出规律的表达式。 但是有的问题的规律比较复杂,涉及到数学推导过程......在此对见到的复杂博弈论问题进行整理 (1)nim游戏 基本模型:有若干堆石子,每堆石子的数 阅读全文
posted @ 2020-10-09 12:41
太山多桢
阅读(562)
评论(0)
推荐(0)
摘要:
一个基础的概念:a|b表示a能整除b,b是a的一个因子 裴蜀定理:对任何整数a、b和它们的最大公约数g,a*x+by=m有解时,g|m。借助拓展欧几里得算法,可以求出解。(求逆元常转化为这个式子)。不只是x和y,当有z1、z2等多个元素时该定理可以进行扩展 同余和剩余 x≡a(mod m),x和a关 阅读全文
posted @ 2020-10-09 12:35
太山多桢
阅读(348)
评论(0)
推荐(0)
摘要:
首先是一些基础的数学问题: (1)排列,P(n,r)=n!/(n-r)! (2)组合,C(n,r)=C(n,n-r)=n!/(n-r)!r!;C(n,r)=C(n-1,r)+C(n-1,r-1),也可通过递推进行计算,尤其适合需要多次访问组合数的情况,可以预先处理完毕直接调用。 (3)圆排列,P(n 阅读全文
posted @ 2020-10-09 11:51
太山多桢
阅读(680)
评论(0)
推荐(0)
摘要:
首先强调:0、1不是素数。 当求较大范围内符合特殊要求的素数时,若预处理时间太长,可以打表。先把答案跑出来,放入表中直接读取即可。洛谷P1218 判断一个数是不是素数,可以用O(sqrt(n))的复杂度来实现 bool judge(int x) { int y=sqrt(x)+1; for(int 阅读全文
posted @ 2020-10-09 11:39
太山多桢
阅读(455)
评论(0)
推荐(0)
摘要:
首先对%的特点做一个整理。 1)a%b,a和b都必须为整形变量而不能为浮点数;b不能为0,否则RE 2)a%b=r,r的符号与a一致而与b无关,与数学意义上标准的模运算有区别。具体处理过程是|a|%|b|=|r|,再给r的符号进行处理。为了排除r为负的影响,不妨再加一步:r=(r+b)%b 3)(a 阅读全文
posted @ 2020-10-09 11:33
太山多桢
阅读(413)
评论(0)
推荐(0)
摘要:
借助欧几里得算法(辗转相除法),可以使GCD问题的求解大大简化。a、b全0则最大公约数不存在;有一个为0,最大公约数为另一个;否则就模运算并交换值,一直处理。C++STL库中内置__gcd(a,b)可直接求出gcd。 //递归 int getGCD(int a,int b){ if(b==0){ r 阅读全文
posted @ 2020-10-09 11:18
太山多桢
阅读(992)
评论(0)
推荐(0)


浙公网安备 33010602011771号