- 博客(20)
- 收藏
- 关注
原创 树的最小路径覆盖
树的最小路径覆盖:以SPOJ UOFTCG为例//============================================================================// Name : tree.cpp// Author : Qihan// Version :// Copyright : Your copyright n
2017-03-08 13:23:22
1374
原创 字符匹配
KMPchar a[maxn];char b[maxn];int Next[maxn];void getNext(int m) { int j = 0, k = -1; Next[0] = -1; while(j < m) { if(k == -1 || b[j] == b[k]) { j ++,k ++;
2017-03-04 14:41:36
349
原创 生成树
const int inf = 0x3f3f3f;const int maxn = (300 + 10);bool vis[maxn];int lowc[maxn];int cost[maxn][maxn];int Prim(int n){ int ans = 0; memset(vis,false,sizeof(vis)); vis[0] = true; fo
2017-02-03 15:37:11
313
原创 Dijkstra + 堆优化
const int maxn = (30000 + 10);const int inf = 0x3f3f3f3f;struct qnode{ int v,c; qnode(int _v = 0,int _c = 0) : v(_v),c(_c){} bool operator<(const qnode &r)const{ return c > r.c;
2017-02-03 13:01:41
323
原创 最长上升子序列
最长上升子序列int LIS(int n){ int idx = 0; dp[idx ++] = arr[0]; for(int i = 1;i < n;i ++){ if(arr[i] > dp[idx - 1]) dp[idx ++] = arr[i]; else{ int where
2016-09-04 13:03:20
195
原创 点到线段的最大最小距离
点到线段的最大最小距离//点到线段的最大最小距离//注意判断垂足是否在线段上double Distance(Point a,Point b,Point c) { if(a.x == b.x) { if(c.y >= min(a.y,b.y) && c.y <= max(a.y,b.y)) return fabs(a.x -
2016-09-04 13:00:17
1433
原创 多边形面积
多边形面积//任意多边形面积(凸or凹)//也可以不存,一边输入一边求面积,前提是有序的double Area(Point op[],int n) { double area = 0; for(int i = 0; i < n - 1; i ++) { area = area + op[i].x * op[i + 1].y;
2016-09-04 12:56:02
356
原创 求重心
求重心1.精确求重心(点的顺序可顺时针可逆时针,但必须有序)double Area(Point p0,Point p1,Point p2) { double area = p0.x * p1.y + p1.x * p2.y + p2.x * p0.y; area = area - p1.x * p0.y - p2.x * p1.y - p0.x * p2.y;
2016-09-04 12:52:49
1243
原创 叉积
叉积//求叉积(线段交,判断点的位置)struct Point { double x; double y; Point() {} Point(double xx,double yy) { x = xx,y = yy; } Point operator-(const Point &b)const {
2016-09-04 12:50:04
257
原创 凸包-极角序-水平序
凸包-极角序-水平序// Graham算法, 极角序,复杂度O(nLog(n))Point List[maxn];int aStack[maxn],top;bool cmp(Point p1,Point p2) {//极角序的排序规则 double temp = Xmult(List[0],p1,p2); if(temp > 0) return
2016-09-04 12:47:14
451
原创 快速乘/快速幂/矩阵快速幂
快速乘/快速幂/矩阵快速幂//快速乘LLI Quick_mul(LLI a,LLI b,LLI mol){ a %= mol; LLI re = 0; while(b){ if(b & 1) re = (re + a) % mol; b >>= 1; a = (a << 1) % mol;
2016-09-04 12:41:33
500
原创 组合数/Lucas定理
组合数/Lucas定理//组合数公式LLI Combination(LLI n, LLI m) { //求(n,m) LLI a = 1, b = 1; for (LLI i = n; i > n - m; i--) a = a * i; for (LLI i = m; i > 0; i--) b = b * i; retur
2016-09-04 12:23:09
326
原创 欧拉函数
欧拉定理如果两个正整数a和n互质,则n的欧拉函数 φ(n) 可以让下面的等式成立:aφ(n)=1(modn);如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。这时,b就叫做a的“模反元素”。a的 φ(n)-1 次方,就是a的模反元素欧拉函数 //求单个数字的欧拉函数,复杂度为O(√n
2016-09-04 12:16:02
450
原创 素数判断及筛法
单个素数判断//素数判断(小数据)int prime(int n) { if (n == 0 || n == 1) return 0; if (n == 2) return 1; if (n % 2 == 0) return 0; for (int i = 3; i * i <= n; i = i + 2) if (n
2016-09-04 11:54:57
372
原创 GCD/扩展欧几里得
GCDLLI gcd(LLI a, LLI b) { return b == 0 ? a : gcd(b, a % b);}LCM关于最小公倍数的结论:如果lcm(a,b) == n其中n=p1e1* p2e2 * p3e3…… * pnexa=p1a1* p2a2 * p3a3…… * pnaxb=p1b1 *
2016-09-04 11:51:49
269
原创 Baby_Step_Giant_Step
Baby_Step_Giant_Step//求解的是a^x = b(mod c)的最小x解 struct node { int num; int val;} baby[maxn];bool cmp(node a, node b) { if (a.val != b.val) return a.val < b.val; return a.num < b.num
2016-09-04 11:35:48
368
原创 佩尔方程
佩尔方程佩尔方程:形如x2-D*y2=1(D是一个固定的正整数且D不是完全平方数)的方程称为佩尔方程佩尔方程定理:佩尔方程总有正整数解,若(x1,y1)是使x1最小的解,则每个解(xk,yk)都可以通过取幂得到:xk + yk * sqrt(D) = (x1 + y1 *sqrt(D))kxn+1 = x0xn +Dy0yn , yn+1 = y0xn+ x0y
2016-09-04 11:28:01
1065
原创 一些公式
1+2+3+……+n=(n*(n+1))/21^2+2^2+3^2+……+n^2=(n*(n+1)*(2n+1))/61^3+2^3+3^3+……+n^3=(((n*(n+1))/2))^21^4+2^4+3^4+……+n^4=(n*(n+1)*(2n+1)*(3n^2+3n-1))/30对于某一个p,有一种通法可以求1p+2p+3p+……+np首先写出这个和式的前(p+1)项
2016-09-04 11:06:03
198
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人