一些模板
laziercs
这个作者很懒,什么都没留下…
展开
-
hdu-4344-Mark the Rope-大数分解质因子模板
#include#include#include#include#include__int64 prime[]={2,3,5,7,11,13,17,19,23,29};#define TIME 15 //Miller测试次数__int64 gcd(__int64 a,__int64 b){return b==0?a:gcd(b,a%b);}原创 2012-08-29 13:06:22 · 739 阅读 · 0 评论 -
左偏树的讲解
//本文转自:这里2.1.2 可并堆的定义可并堆(Mergeable Heap)也是一种抽象数据类型,它除了支持优先队列的三个基本操作(Insert, Minimum, Delete-Min),还支持一个额外的操作——合并操作:H ← Merge(H1,H2)Merge( ) 构造并返回一个包含H1和H2所有元素的新堆H。 O(n),用它来实现可转载 2013-03-27 17:20:05 · 1220 阅读 · 0 评论 -
hdu 3487 Play with Chain(splay)
/*这是我第一次做splay树的题,看了一天的有关splay博客和很多有关大牛的解题报告,终于把它拿下了;有关splay树的实现可以看这个博客,讲解可以看这个博客,讲的不错,做题看这个博客;这题要在splay树上执行两个操作第一个是区间的转移: 这里又分两小步,第一小步是把区间摘下来,第二小步是把摘下的区间放到指定的位置; 要实现第一小步原创 2013-01-01 17:25:31 · 476 阅读 · 0 评论 -
DLX 模板
//以hust1017为例#include#include#define N 1100#define M 1100#define V N*M#define INF 100000000int D[V+1],U[V+1],L[V+1],R[V+1],C[V+1],mark[V+1];int S[M+1],H[N+1];void remove(int c){ int i,j原创 2013-04-18 21:52:40 · 787 阅读 · 0 评论 -
划分树and主席树
//hdu 2665 这里就做为划分树模板了;#include#includeusing namespace std;#define N 100100int data[N];struct node{ int v[N]; int num[N];}td[31];void build(int l,int r,int dep){ if(l>=r)retur原创 2012-08-29 13:17:04 · 1906 阅读 · 0 评论 -
hdu 4622(后缀自动机|后缀数组)
//昨天晚上一直用后缀数组来写,怎么写都超时,今天看了多校3的官方解题,然来是卡常数;//今天上午就去学习了缀自动机(以前没有主动去学后缀自动机,以为后缀自动机能解的,后缀数组都能解,这次尝到了苦头);//这题官方解题说可以O(n^2)+O(1),可是我写的后缀自动机时间复杂度还是O(n*q),因为每次计算字串的个数的还是把所有的step遍历了的一遍,但是没事重新建树,建树的常数小了一些;原创 2013-07-31 16:37:03 · 1897 阅读 · 4 评论 -
自己实现用FFT加速多项式计算
/* * FFT之所以能加速DFT的计算,得益于n次单位复数根的几个性质: * 1.消去引理 w(d*n,d*k)=w(n,k); * 1.折半引理 w(n,k)^2=w(n/2,k); * 2.求和引理,即:sum{w(n,k)^j}=0 (0 * 详见:算法导论第30章,p527~p535*/#include#include#include#include原创 2013-08-12 14:45:42 · 1636 阅读 · 0 评论 -
hdu-4280
//最大流优化,sap模板 //代码如下: #include#include#include#define M 410000#define N 110000 using namespace std;#define INF 0x3f3f3f3fstruct edge{ int from,to,c,next;}edge[M];int ant,head[N],原创 2012-09-16 20:41:46 · 565 阅读 · 0 评论 -
自己写的splay模板
#include#include#includeusing namespace std;#define N 300010const int INF=1<<30;int tree[N][2],pa[N],cnt[N],rev[N],val[N];int Max(int a,int b){ return a>b?a:b; }class splaytree{ public: i原创 2013-04-28 09:26:05 · 823 阅读 · 0 评论 -
几何代码总结
struct Point{ int x,y; Point(int a=0,int b=0):x(a),y(b){}};Point operator-(Point a,Point b){ return Point(a.x-b.x,a.y-b.y); }Point operator+(Point a,Point b){ return Point(a.x+b.x,a.y+b.y)原创 2013-07-12 20:21:26 · 996 阅读 · 0 评论 -
矩阵快速幂
void mult(int a[2][2],int b[2][2]){ int i,j,k,c[2][2]={0,0,0,0}; for(i=0;i<2;i++) for(j=0;j<2;j++) for(k=0;k<2;k++) c[i][j]=(c[i][j]+(a[i][k]*b[k][j])%mod)%mod; for(i=0;i<2;i++)for(j=0;j<原创 2013-03-23 23:03:41 · 672 阅读 · 0 评论 -
KM算法 详解+模板
//原文地址:http://blog.sina.com.cn/s/blog_691ce2b701016reh.html【KM算法及其具体过程】(1)可行点标:每个点有一个标号,记lx[i]为X方点i的标号,ly[j]为Y方点j的标号。如果对于图中的任意边(i, j,W)都有lx[i]+ly[j]>=W,则这一组点标是可行的。特别地,对于lx[i]+ly[j]=W的边(i, j,W),称转载 2013-03-01 15:58:32 · 1070 阅读 · 0 评论 -
求多边形的重心-hdu 1115
//先把所有的坐标按一个方向排序,比如逆时针,这里可以用极坐标排序;//排好序后,以原点为基点,用n边形的n个点中的每相邻的两个点和基点组成一个三角形,这样就构成了n-1个三角形,并求出相应三角形的重心ci和叉积面积ai(这里保留方向性);(这里为什么用原点作为基点,因为用原点作为基点时,求叉积时简单),设A=A1+A2....Ai,最后的n多边形重心C=∑(ci×Ai)/A;//上面的公原创 2012-09-12 10:45:51 · 574 阅读 · 0 评论 -
hdu 3781 Aronson
//用了大神的阿拉伯数字转英文,很强大;后面就直接一个bfs模拟就ok了;#include #include #include #include using namespace std;string num[1001] = {"", "first", "second", "third", "fourth", "fifth", "sixth", "sev原创 2012-10-02 17:21:05 · 781 阅读 · 0 评论 -
2012 ACM/ICPC Asia Regional Chengdu Online-hdu-4289
//拆点后就是一个最小割问题,直接用最大流来做; //第一次写,代码效率不高没有任何优化,dinic版代码如下: #include#include#includeusing namespace std;int Map[410][410],n;int pre[410],vis[410];int dinic(int start,int end){ int sum=0原创 2012-09-16 20:24:18 · 916 阅读 · 0 评论 -
hdu 1255 线段树的面积覆盖问题
/*以前没想到线段树还能这样用,阅读了胡浩大牛的解题报告,这个线段重叠的思想很巧妙,先把一个矩形拆成两条线段,记录每条线段的两个端点及它的高度,并标记此线段是在矩形的上边还是下边,在利用cnt[]数组记录这个x轴的区间段被这样的线段覆盖了几次,那么在这一题来说,覆盖两次以上既是我们要求的解,所以我们在节点上只要保存覆盖一次,和覆盖两次及两次以上的x长度就可以了,最后用所有x轴被覆盖的长度也就是原创 2012-10-17 13:01:17 · 693 阅读 · 0 评论 -
hdu 4419线段树覆盖面积
/*和胡浩大牛写的hdu 1255题的大体思路差不多,先把矩形线段化,在一个数轴上覆盖,再枚举另一个数轴求面积(再枚举之前先排好序),只不过这题的状态比较多,要把Pushup函数改一下,这里不仅仅是处理覆盖一次和多次的问题了,还要考虑颜色的重叠问题,处理的时候有点像容斥,用二进制的1,2,4表示r,g,b这样便于处理,最后覆盖过程就大体差不多了;代码如下:*/#include#原创 2012-10-18 13:07:00 · 627 阅读 · 0 评论 -
自己写的高斯消元,也不知道对不对
#includedouble argu_matrix[300][300],x[300];//arguement matrix and x matrixint main(void){ int n,i,j,k; double sum; scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<n+1;j++) scanf("%lf",&argu_ma原创 2012-08-29 13:20:55 · 1841 阅读 · 0 评论 -
aho-corasick 自动机模板(来源于刘汝佳老师的白书)
/*以杭电的2222题为例,代码如下*/ #include#include#includeusing namespace std;#define N 241000int ch[N][26],cnt,f[N],last[N],val[N];struct aho_corasick{ aho_corasick(){ cnt=0; mems原创 2013-02-22 10:44:39 · 924 阅读 · 0 评论 -
hdu 3518后缀数组
/*枚举字串的长度1~n/2;通过height来判断两个字串相同的长度,在符合要求的长度里记录距离最远的两个字串的起始位置l,r最后通过l+len-1 代码如下:*/ #include#include#includeusing namespace std;const int maxn = 1100;char s[maxn];int sa[maxn],t原创 2013-02-24 14:31:36 · 600 阅读 · 0 评论 -
数值积分-(自适应辛普森法)
#include#includedouble F(double x){return log10(x);}//三点辛普森公式double simpson(double width,double fa,double fb,double fc) { return (fb+fa+4*fc)*width/6;}//自适应simpson公式递归过程double asr(double a原创 2013-02-22 16:31:22 · 4009 阅读 · 1 评论 -
hdu 1402-傅里叶_大数相乘
#include#include#include#includetypedef struct vir{ double re,im; vir(){} vir(double a,double b){re=a;im=b;} vir operator +(const vir &b){ return vir(re+b.re,im+b.im);} vir operator原创 2012-08-29 12:57:57 · 1578 阅读 · 0 评论