随笔分类 -  ACM--常用模板库

摘要:poj3528参照#include #include #include #include using namespace std;#define inf 0x7fffffff#define max(a,b) (a>b?a:b)#define min(a,b) (a eps) ... 阅读全文
posted @ 2014-08-16 21:34 _雨 阅读(389) 评论(0) 推荐(0)
摘要:导论书上几何部分有讲 二分递归算法 将p数组分为左右两部分 分别递归求出两部分的最小距离 然后再求出左右之间的最小距离 取其最小。因为左右的最小距离minz已经求出,在求它俩部分之间的最小距离时就有了限制,fabs(x1-x2)>1; int i,j,g = l,o = mid+1; f... 阅读全文
posted @ 2014-07-30 12:43 _雨 阅读(246) 评论(0) 推荐(0)
摘要:凸包直径旋转卡壳凸包直径详解//计算凸包直径,输入凸包ch,顶点个数为n,按逆时针排列,输出直径的平方int rotating_calipers(int n){ int q = 1; int ans = 0; ch[n] = ch[0]; for(int i = 0 ; i ... 阅读全文
posted @ 2014-07-28 21:13 _雨 阅读(226) 评论(0) 推荐(0)
摘要:LL getInv(LL x) { LL ret = 1; x %= mod; for (int a = mod - 2; a; a /= 2, x = x * x % mod) if (a % 2 == 1) ret = ret * x % m... 阅读全文
posted @ 2014-07-23 20:29 _雨 阅读(230) 评论(0) 推荐(0)
摘要:double dis(Point a){ return a.x*a.x+a.y*a.y;}struct Circle Circumcircle(){ Circle tmp; double a,b,c,c1,c2; double xa,ya,xb,yb,xc,yc; a ... 阅读全文
posted @ 2014-07-04 22:34 _雨 阅读(253) 评论(0) 推荐(0)
摘要:摘自http://blog.csdn.net/accry/article/details/6070621首先解决问题:什么是半平面?顾名思义,半平面就是指平面的一半,我们知道,一条直线可以将平面分为两个部分,那么这两个部分就叫做两个半平面。然后,半平面怎么表示呢?二维坐标系下,直线可以表示为ax +... 阅读全文
posted @ 2014-07-03 16:31 _雨 阅读(292) 评论(0) 推荐(0)
摘要:double cross(Point a,Point b){ return a.x*b.y-a.y*b.x;}double mul(Point p0,Point p1,Point p2){ return cross(p1-p0,p2-p0);}double dis(Point a){ ... 阅读全文
posted @ 2014-07-02 21:30 _雨 阅读(189) 评论(0) 推荐(0)
摘要:先贴一份不怎么完善的模板,等刷一些题目熟悉之后再来完善。代码参考自kuangbin及cxlove两位大神。splay的基本功能题目:维护一个数列,支持以下几种操作:1. 插入:在当前数列第posi 个数字后面插入tot 个数字;若在数列首位插入,则posi 为0。2. 删除:从当前数列第posi 个... 阅读全文
posted @ 2014-06-15 17:00 _雨 阅读(317) 评论(0) 推荐(0)
摘要:功能:求出某个数的左边或者右边第一个比它大或者小的元素,总时间复杂度O(N)。求一个以某个值为最小值的区间。 阅读全文
posted @ 2014-06-08 00:32 _雨 阅读(230) 评论(0) 推荐(0)
摘要:double solve(){ double M,RM; double L = 0.0; double R = INF; while (L + eps < R) { M = (L + R) / 2; RM = (M + R) / 2; ... 阅读全文
posted @ 2014-06-05 15:58 _雨 阅读(171) 评论(0) 推荐(0)
摘要:贴份模板胡大神和崔大神的组合模板#include #include#include#include#include#include#include#include#includeusing namespace std;#define N 1000010#define LL long long#def... 阅读全文
posted @ 2014-05-14 13:22 _雨 阅读(279) 评论(0) 推荐(0)
摘要:就是把树上的路径拆成几段,然后大多按照线段树的解法解就可以了讲解http://blog.sina.com.cn/s/blog_7a1746820100wp67.html模板 1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #... 阅读全文
posted @ 2014-05-06 00:11 _雨 阅读(284) 评论(0) 推荐(0)
摘要:二分图模板匈牙利算法 时间复杂度O(n^3)int n1,n2,k;//n1,n2为二分图的顶点集,其中x∈n1,y∈n2int map[N][N],vis[N],link[N];//link记录n2中的点y在n1中所匹配的x点的编号int find(int x){ int i; for... 阅读全文
posted @ 2014-04-26 19:58 _雨 阅读(245) 评论(0) 推荐(0)
摘要:通常的数位dp写法int dfs(int i, int s, bool e) { if (i==-1) return s==target_s; if (!e && ~f[i][s]) return f[i][s]; int res = 0; int u = e?num[i]:... 阅读全文
posted @ 2014-04-20 21:42 _雨 阅读(269) 评论(0) 推荐(0)
摘要:1 int euler(int x) 2 { 3 int s = x; 4 for(int i= 2 ; i*i <= x ; i++) 5 { 6 if(x%i==0) 7 { 8 s-=s/i; 9 ... 阅读全文
posted @ 2014-04-20 19:42 _雨 阅读(126) 评论(0) 推荐(0)
摘要:利用快速幂的思想 根据矩阵的结合律 可以递归二分求解 struct Mat{ int mat[N][N];};int n;Mat operator * (Mat a,Mat b){ Mat c; memset(c.mat,0,sizeof(c.mat)); int i,j,k; for(k =0 ; k >= 1) { if(k&1) c = c*a; a = a*a; } return c;} 阅读全文
posted @ 2014-03-24 14:36 _雨 阅读(433) 评论(0) 推荐(0)
摘要:GCD模板__int64 gcd(__int64 a,__int64 b){ return b==0? a:gcd(b,a%b);}欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: gcd函数就是用来求(a,b)的最大公约数的。 gcd函数的基... 阅读全文
posted @ 2012-08-02 19:56 _雨 阅读(403) 评论(0) 推荐(0)
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2544稍微补充了下 求任意两点间的最短距离DijkstraView Code 1 #include 2 #include 3 #define INF 0x3f3f3f3f 4 int d[101],w[101][101],f[101]; 5 int Dijkstra(int st,int en,int n) 6 { 7 int i,j,min,k; 8 d[st] = 0; 9 memset(f,0,sizeof(f));10 for(i = 1 ;i =d[j])18 ... 阅读全文
posted @ 2012-07-18 20:07 _雨 阅读(285) 评论(0) 推荐(0)