资源预览内容
第1页 / 共93页
第2页 / 共93页
第3页 / 共93页
第4页 / 共93页
第5页 / 共93页
第6页 / 共93页
第7页 / 共93页
第8页 / 共93页
第9页 / 共93页
第10页 / 共93页
亲,该文档总共93页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Zhejiang UniversityICPC TeamRoutine Libraryby WishingBone (Dec. 2002)Last Update (Nov. 2004) by Riveria1、几何251.1注意251.2几何公式251.3多边形271.4多边形切割301.5浮点函数311.6面积361.7球面371.8三角形381.9三维几何401.10凸包471.11网格491.12圆491.13整数函数512、组合542.1 组合公式542.2 排列组合生成542.3 生成gray码562.4 置换(polya)562.5 字典序全排列572.6 字典序组合573、结构583.1 并查集583.2 堆593.3 线段树603.4 子段和653.5 子阵和654、数论664.1 阶乘最后非0位664.2 模线性方程组674.3 素数684.4 欧拉函数695、数值计算705.1 定积分计算(Romberg)705.2 多项式求根(牛顿法)725.3 周期性方程(追赶法)736、图论NP搜索746.1 最大团746.2 最大团(n<64)(faster)757、图论连通性777.1 无向图关键点(dfs邻接阵)777.2 无向图关键边(dfs邻接阵)787.3 无向图的块(bfs邻接阵)797.4 无向图连通分支(dfs/bfs邻接阵)807.5 有向图强连通分支(dfs/bfs邻接阵)817.6 有向图最小点基(邻接阵)828、图论匹配838.1 二分图最大匹配(hungary邻接表)838.2 二分图最大匹配(hungary邻接阵)848.3 二分图最大匹配(hungary正向表)848.4二分图最佳匹配(kuhn_munkras邻接阵)858.5 一般图匹配(邻接表)868.6 一般图匹配(邻接阵)878.7 一般图匹配(正向表)879、图论网络流889.1 最大流(邻接阵)889.2 上下界最大流(邻接阵)899.3 上下界最小流(邻接阵)909.4 最大流无流量(邻接阵)919.5 最小费用最大流(邻接阵)9110、图论应用9210.1 欧拉回路(邻接阵)9210.2 树的前序表转化9310.3 树的优化算法9410.4 拓扑排序(邻接阵)9510.5 最佳边割集9610.6 最佳点割集9710.7 最小边割集9810.8 最小点割集9910.9 最小路径覆盖10111、图论支撑树10111.1 最小生成树(kruskal邻接表)10111.2 最小生成树(kruskal正向表)10311.3 最小生成树(prim+binary_heap邻接表)10411.4 最小生成树(prim+binary_heap正向表)10511.5 最小生成树(prim+mapped_heap邻接表)10611.6 最小生成树(prim+mapped_heap正向表)10811.7 最小生成树(prim邻接阵)10911.8 最小树形图(邻接阵)10912、图论最短路径11112.1 最短路径(单源bellman_ford邻接阵)11112.2 最短路径(单源dijkstra+bfs邻接表)11112.3 最短路径(单源dijkstra+bfs正向表)11212.4 最短路径(单源dijkstra+binary_heap邻接表)11312.5 最短路径(单源dijkstra+binary_heap正向表)11412.6 最短路径(单源dijkstra+mapped_heap邻接表)11512.7 最短路径(单源dijkstra+mapped_heap正向表)11612.8 最短路径(单源dijkstra邻接阵)11712.9 最短路径(多源floyd_warshall邻接阵)11813、应用11813.1 Joseph问题11813.2 N皇后构造解11913.3 布尔母函数12013.4 第k元素12013.5 幻方构造12113.6 模式匹配(kmp)12213.7 逆序对数12313.8 字符串最小表示12313.9 最长公共单调子序列12413.10 最长子序列12513.11 最大子串匹配12613.12 最大子段和12713.13 最大子阵和12714、其它12814.1 大数(只能处理正数)12814.2 分数13414.3 矩阵13614.4 线性方程组13814.5 线性相关14014.6 日期1401、 几何1.1 注意1. 注意舍入方式(0.5的舍入方向);防止输出-0.2. 几何题注意多测试不对称数据.3. 整数几何注意xmult和dmult是否会出界; 符点几何注意eps的使用.4. 避免使用斜率;注意除数是否会为0.5. 公式一定要化简后再代入.6. 判断同一个2*PI域内两角度差应该是 abs(a1-a2)<beta|abs(a1-a2)>pi+pi-beta; 相等应该是 abs(a1-a2)<eps|abs(a1-a2)>pi+pi-eps;7. 需要的话尽量使用atan2,注意:atan2(0,0)=0, atan2(1,0)=pi/2,atan2(-1,0)=-pi/2,atan2(0,1)=0,atan2(0,-1)=pi.8. cross product = |u|*|v|*sin(a) dot product = |u|*|v|*cos(a)9. (P1-P0)x(P2-P0)结果的意义: 正: <P0,P1>在<P0,P2>顺时针(0,pi)内 负: <P0,P1>在<P0,P2>逆时针(0,pi)内 0 : <P0,P1>,<P0,P2>共线,夹角为0或pi10. 误差限缺省使用1e-8!1.2 几何公式三角形:1. 半周长 P=(a+b+c)/22. 面积 S=aHa/2=absin(C)/2=sqrt(P(P-a)(P-b)(P-c)3. 中线 Ma=sqrt(2(b2+c2)-a2)/2=sqrt(b2+c2+2bccos(A)/24. 角平分线 Ta=sqrt(bc(b+c)2-a2)/(b+c)=2bccos(A/2)/(b+c)5. 高线 Ha=bsin(C)=csin(B)=sqrt(b2-(a2+b2-c2)/(2a)2)6. 内切圆半径 r=S/P=asin(B/2)sin(C/2)/sin(B+C)/2) =4Rsin(A/2)sin(B/2)sin(C/2)=sqrt(P-a)(P-b)(P-c)/P) =Ptan(A/2)tan(B/2)tan(C/2)7. 外接圆半径 R=abc/(4S)=a/(2sin(A)=b/(2sin(B)=c/(2sin(C)四边形:D1,D2为对角线,M对角线中点连线,A为对角线夹角1. a2+b2+c2+d2=D12+D22+4M22. S=D1D2sin(A)/2(以下对圆的内接四边形)3. ac+bd=D1D24. S=sqrt(P-a)(P-b)(P-c)(P-d),P为半周长正n边形:R为外接圆半径,r为内切圆半径1. 中心角 A=2PI/n2. 内角 C=(n-2)PI/n3. 边长 a=2sqrt(R2-r2)=2Rsin(A/2)=2rtan(A/2)4. 面积 S=nar/2=nr2tan(A/2)=nR2sin(A)/2=na2/(4tan(A/2)圆:1. 弧长 l=rA2. 弦长 a=2sqrt(2hr-h2)=2rsin(A/2)3. 弓形高 h=r-sqrt(r2-a2/4)=r(1-cos(A/2)=atan(A/4)/24. 扇形面积 S1=rl/2=r2A/25. 弓形面积 S2=(rl-a(r-h)/2=r2(A-sin(A)/2棱柱:1. 体积 V=Ah,A为底面积,h为高2. 侧面积 S=lp,l为棱长,p为直截面周长3. 全面积 T=S+2A棱锥:1. 体积 V=Ah/3,A为底面积,h为高(以下对正棱锥)2. 侧面积 S=lp/2,l为斜高,p为底面周长3. 全面积 T=S+A棱台:1. 体积 V=(A1+A2+sqrt(A1A2)h/3,A1.A2为上下底面积,h为高(以下为正棱台)2. 侧面积 S=(p1+p2)l/2,p1.p2为上下底面周长,l为斜高3. 全面积 T=S+A1+A2圆柱:1. 侧面积 S=2PIrh2. 全面积 T=2PIr(h+r)3. 体积 V=PIr2h圆锥:1. 母线 l=sqrt(h2+r2)2. 侧面积 S=PIrl3. 全面积 T=PIr(l+r)4. 体积 V=PIr2h/3圆台:1. 母线 l=sqrt(h2+(r1-r2)2)2. 侧面积 S=PI(r1+r2)l3. 全面积 T=PIr1(l+r1)+PIr2(l+r2)4. 体积 V=PI(r12+r22+r1r2)h/3球:1. 全面积 T=4PIr22. 体积 V=4PIr3/3球台:1. 侧面积 S=2PIrh2. 全面积 T=PI(2rh+r12+r22)3. 体积 V=PIh(3(r12+r22)+h2)/6球扇形:1. 全面积 T=PIr(2h+r0),h为球冠高,r0为球冠底面半径2. 体积 V=2PIr2h/31.3 多边形#include <stdlib.h>#include <math.h>#define MAXN 1000#define offset 10000#define eps 1e-8#define zero(x) (x)>0?(x):-(x)<eps)#define _sign(x) (x)>eps?1:(x)<-eps?2:0)struct pointdouble x,y;struct linepoint a,b;double xmult(point p1,point p2,point p0)return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);/判定凸多边形,顶点按顺时针或逆时针给出,允许相邻边共线int is_convex(int n,point* p)int i,s3=1,1,1;for (i=0;i<n&&s1|s2;i+)s
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号