ACM—算法模板
随心丶而遇
lz太懒,所以没有介绍。
展开
-
欧几里德算法
欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。基本算法:设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r),即gcd(a,b)=gcd(b,a%b)。第一种证明: a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb转载 2015-09-03 23:12:29 · 2155 阅读 · 0 评论 -
SG函数模板
///s[]:可以取走的石子个数///sg[]:0~n的SG函数值///hash[]:mex{}///N位求解范围int s[N],sg[N],Hash[N];void getSG(int n)///n为s的长度{ int i,j; memset(sg,0,sizeof(sg)); for(i=1;i<=n;i++) {原创 2016-07-20 16:24:37 · 1544 阅读 · 0 评论 -
求多边形的核(模板)
Poj 3335 #include#include #include #define eps 1e-8using namespace std;const int MAXN=105;int m;double r;int cCnt,curCnt;//此时cCnt为最终切割得到的多边形的顶点数、暂存顶点个数struct point{ do原创 2016-07-30 16:20:18 · 452 阅读 · 0 评论 -
RMQ (Range Minimum/Maximum Query)算法
1. 概述RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j当然,该问题也可以用线段树(也叫区间树)解决,算法复杂度为:O(N)~O(logN),这里我们暂不介绍。2.RMQ算法对于该问题,最容易想到的解决方案是遍历,复杂度是O(n)。但当数据量非常大转载 2016-05-18 15:31:25 · 393 阅读 · 0 评论 -
几何模板
struct Point { double x,y; friend Point operator - (Point a,Point b) { Point temp; temp.x = a.x - b.x; temp.y = a.y - b.y; return temp; } };转载 2015-07-21 16:46:53 · 540 阅读 · 0 评论 -
树状数组学习(转)
引用请注明出处:http://blog.csdn.net/int64ago/article/details/7429868 写下这个标题,其实心里还是没底的,与其说是写博帖,不如说是做总结。第一个接触树状数组还是两年前,用什么语言来形容当时的感觉呢?……太神奇了!真的,无法表达出那种感觉,她是那么的优雅,10行不到的代码,却把事情干的如此出色!没有了解她原理的前提下即使把转载 2016-02-29 13:35:13 · 466 阅读 · 0 评论 -
Manacher算法
O(n)回文子串算法注:转载的这篇文章,我发现下面那个源代码有点bug。。。在下一篇博客中改正了。。这里,我介绍一下O(n)回文串处理的一种方法。Manacher算法.原文地址:http://zhuhongcheng.wordpress.com/2009/08/02/a-simple-linear-time-algorithm-for-finding-longest-palin转载 2015-08-11 17:48:19 · 484 阅读 · 0 评论 -
中国剩余定理(详解)
中国剩余定理中国剩余定理可以描述为:若某数x分别被d1、、…、dn除得的余数为r1、r2、…、rn,则可表示为下式:x=R1r1+R2r2+…+Rnrn+RD其中R1是d2、d3、…、dn的公倍数,而且被d1除,余数为1;(称为R1相对于d1的数论倒数)R1 、R2 、… 、Rn是d1、d2、…、dn-1的公倍数,而且被dn除,余数为1;D是d1、d2、…、的转载 2015-09-15 14:15:31 · 18634 阅读 · 2 评论 -
Lucas定理(大组合数的取模)
首先给出这个Lucas定理:A、B是非负整数,p是质数。AB写成p进制:A=a[n]a[n-1]...a[0],B=b[n]b[n-1]...b[0]。则组合数C(A,B)与C(a[n],b[n])*C(a[n-1],b[n-1])*...*C(a[0],b[0]) mod p同余即:Lucas(n,m,p)=c(n%p,m%p)*Lucas(n/p,m/p,p) 这个定理的转载 2015-09-15 16:53:58 · 1943 阅读 · 0 评论 -
数学模板
给两条直线顶点坐标 求两条直线是否相交[cpp] view plaincopy//叉积 double mult(Point a, Point b, Point c) { return (a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y); } //aa, bb为一条线段转载 2015-06-10 20:46:58 · 445 阅读 · 0 评论 -
动态规划——最优三角形
动态规划——最优三角形最近在做dp练习的时候遇到了一题需要用最优三角形算法的题,一开始完全不知道怎么解,然后去百度了一下“最优三角形”算法,看了看,好像也不是很难。就发表一下自己的理解和看法吧:最优三角形,也就是把一个凸n多边形用不相交的对角线割成n-2个三角形,要求所割的权值最小(也就是对角线长度和最小)。然后就开始割了,首先,选定两个相邻的点,定为V0和Vn(我把它称为原点)吧,然后遍原创 2015-09-08 15:25:46 · 1527 阅读 · 0 评论 -
组合数模板
const int mod=1e9+7;typedef long long ll;//返回d=gcd(a,b);和对应于等式ax+by=d中的x,yll extend_gcd(ll a,ll b,ll &x,ll &y){ if(a==0&&b==0) return -1;//无最大公约数 if(b==0){x=1;y=0;return a;} ll d=exten原创 2016-03-26 20:48:19 · 605 阅读 · 0 评论