欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    ACM常用模板.docx

    • 资源ID:10081624       资源大小:65.53KB        全文页数:187页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    ACM常用模板.docx

    1、ACM常用模板ACM常用模板(浙大模板扩展)信息工程学院ACM集训队2010/3/211、 几何1.1 注意 51.2 几何公式 51.3 多边形 71.4 多边形切割 101.5 浮点函数 111.6 面积 161.7 球面 171.8 三角形 181.9 三维几何 201.10 凸包 271.11 网格 291.12 圆 291.13 整数函数 312、 组合 2.1 组合公式 342.2 排列组合生成 342.3 生成gray码 362.4 置换(polya) 362.5 字典序全排列 372.6 字典序组合 373、 结构3.1 并查集 383.2 堆 393.3 线段树 403.4

    2、子段和 453.5 子阵和 454、 数论 4.1 阶乘最后非0位 464.2 模线性方程组 474.3 素数 484.4 欧拉函数 495、 数值计算 5.1 定积分计算(Romberg) 505.2 多项式求根(牛顿法) 525.3 周期性方程(追赶法) 536、 图论NP搜索 6.1 最大团 546.2 最大团(n64)(faster) 557、 图论连通性 7.1 无向图关键点(dfs邻接阵) 577.2 无向图关键边(dfs邻接阵) 587.3 无向图的块(bfs邻接阵) 597.4 无向图连通分支(dfs/bfs邻接阵) 607.5 有向图强连通分支(dfs/bfs邻接阵) 617

    3、.6 有向图最小点基(邻接阵) 628、 图论匹配 8.1 二分图最大匹配(hungary邻接表) 638.2 二分图最大匹配(hungary邻接阵) 648.3 二分图最大匹配(hungary正向表) 648.4二分图最佳匹配(kuhn_munkras邻接阵) 658.5 一般图匹配(邻接表) 668.6 一般图匹配(邻接阵) 678.7 一般图匹配(正向表) 679、 图论网络流 9.1 最大流(邻接阵) 689.2 上下界最大流(邻接阵) 699.3 上下界最小流(邻接阵) 709.4 最大流无流量(邻接阵) 719.5 最小费用最大流(邻接阵) 7110、 图论应用 10.1 欧拉回路

    4、(邻接阵) 7210.2 树的前序表转化 7310.3 树的优化算法 7410.4 拓扑排序(邻接阵) 7510.5 最佳边割集 7610.6 最佳点割集 7710.7 最小边割集 7810.8 最小点割集 7910.9 最小路径覆盖 8111、 图论支撑树 11.1 最小生成树(kruskal邻接表) 8111.2 最小生成树(kruskal正向表) 8311.3 最小生成树(prim+binary_heap邻接表) 8411.4 最小生成树(prim+binary_heap正向表) 8511.5 最小生成树(prim+mapped_heap邻接表) 8611.6 最小生成树(prim+ma

    5、pped_heap正向表) 8811.7 最小生成树(prim邻接阵) 8911.8 最小树形图(邻接阵) 8912、 图论最短路径 12.1 最短路径(单源bellman_ford邻接阵) 9112.2 最短路径(单源dijkstra+bfs邻接表) 9112.3 最短路径(单源dijkstra+bfs正向表) 9212.4 最短路径(单源dijkstra+binary_heap邻接表) 9312.5 最短路径(单源dijkstra+binary_heap正向表) 9412.6 最短路径(单源dijkstra+mapped_heap邻接表) 9512.7 最短路径(单源dijkstra+ma

    6、pped_heap正向表) 9612.8 最短路径(单源dijkstra邻接阵) 9712.9 最短路径(多源floyd_warshall邻接阵) 9813、 应用 13.1 Joseph问题 9813.2 N皇后构造解 9913.3 布尔母函数 10013.4 第k元素 10013.5 幻方构造 10113.6 模式匹配(kmp) 10213.7 逆序对数 10313.8 字符串最小表示 10313.9 最长公共单调子序列 10413.10 最长子序列 10513.11 最大子串匹配 10613.12 最大子段和 10713.13 最大子阵和 10714、 其它 14.1 大数(只能处理正数

    7、) 10814.2 分数 11414.3 矩阵 11614.4 线性方程组 11814.5 线性相关 12014.6 日期 12015、 扩展 1211、 几何1.1 注意1. 注意舍入方式(0.5的舍入方向);防止输出-0.2. 几何题注意多测试不对称数据.3. 整数几何注意xmult和dmult是否会出界; 符点几何注意eps的使用.4. 避免使用斜率;注意除数是否会为0.5. 公式一定要化简后再代入.6. 判断同一个2*PI域内两角度差应该是 abs(a1-a2)pi+pi-beta; 相等应该是 abs(a1-a2)pi+pi-eps;7. 需要的话尽量使用atan2,注意:atan2

    8、(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)结果的意义: 正: 在顺时针(0,pi)内 负: 在逆时针(0,pi)内 0 : ,共线,夹角为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. 中线

    9、 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)

    10、=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)

    11、圆: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+s

    12、qrt(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+

    13、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球部分体积v=PI/3*(h*h)*(3.*R-h);球扇形:1. 全面积 T=PIr(2h+r0),h为球冠高,r0为球冠底面半径2. 体积 V=2PIr2h/31.3 多边形#include #include #define MAXN 1000#define offset 10000#define eps 1e-8#define zero(x) (x)0?(x):-(x)eps

    14、?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;in&s1|s2;i+) s_sign(xmult(p(i+1)%n,p(i+2)%n,pi)=0; return s1|s

    15、2;/判定凸多边形,顶点按顺时针或逆时针给出,不允许相邻边共线int is_convex_v2(int n,point* p) int i,s3=1,1,1; for (i=0;in&s0&s1|s2;i+) s_sign(xmult(p(i+1)%n,p(i+2)%n,pi)=0; return s0&s1|s2;/判点在凸多边形内或多边形边上,顶点按顺时针或逆时针给出int inside_convex(point q,int n,point* p) int i,s3=1,1,1; for (i=0;in&s1|s2;i+) s_sign(xmult(p(i+1)%n,q,pi)=0; re

    16、turn s1|s2;/判点在凸多边形内,顶点按顺时针或逆时针给出,在多边形边上返回0int inside_convex_v2(point q,int n,point* p) int i,s3=1,1,1; for (i=0;in&s0&s1|s2;i+) s_sign(xmult(p(i+1)%n,q,pi)=0; return s0&s1|s2;/判点在任意多边形内,顶点按顺时针或逆时针给出/on_edge表示点在多边形边上时的返回值,offset为多边形坐标上限int inside_polygon(point q,int n,point* p,int on_edge=1) point q

    17、2; int i=0,count; while (in) for (count=i=0,q2.x=rand()+offset,q2.y=rand()+offset;in;i+) if (zero(xmult(q,pi,p(i+1)%n)&(pi.x-q.x)*(p(i+1)%n.x-q.x)eps&(pi.y-q.y)*(p(i+1)%n.y-q.y)eps) return on_edge; else if (zero(xmult(q,q2,pi) break; else if (xmult(q,pi,q2)*xmult(q,p(i+1)%n,q2)-eps&xmult(pi,q,p(i+1)

    18、%n)*xmult(pi,q2,p(i+1)%n)-eps) count+; return count&1;inline int opposite_side(point p1,point p2,point l1,point l2) return xmult(l1,p1,l2)*xmult(l1,p2,l2)-eps;inline int dot_online_in(point p,point l1,point l2) return zero(xmult(p,l1,l2)&(l1.x-p.x)*(l2.x-p.x)eps&(l1.y-p.y)*(l2.y-p.y)eps;/判线段在任意多边形内,

    19、顶点按顺时针或逆时针给出,与边界相交返回1int inside_polygon(point l1,point l2,int n,point* p) point tMAXN,tt; int i,j,k=0; if (!inside_polygon(l1,n,p)|!inside_polygon(l2,n,p) return 0; for (i=0;in;i+) if (opposite_side(l1,l2,pi,p(i+1)%n)&opposite_side(pi,p(i+1)%n,l1,l2) return 0; else if (dot_online_in(l1,pi,p(i+1)%n)

    20、tk+=l1; else if (dot_online_in(l2,pi,p(i+1)%n) tk+=l2; else if (dot_online_in(pi,l1,l2) tk+=pi; for (i=0;ik;i+) for (j=i+1;jk;j+) tt.x=(ti.x+tj.x)/2; tt.y=(ti.y+tj.y)/2; if (!inside_polygon(tt,n,p) return 0; return 1;point intersection(line u,line v) point ret=u.a; double t=(u.a.x-v.a.x)*(v.a.y-v.b.

    21、y)-(u.a.y-v.a.y)*(v.a.x-v.b.x) /(u.a.x-u.b.x)*(v.a.y-v.b.y)-(u.a.y-u.b.y)*(v.a.x-v.b.x); ret.x+=(u.b.x-u.a.x)*t; ret.y+=(u.b.y-u.a.y)*t; return ret;point barycenter(point a,point b,point c) line u,v; u.a.x=(a.x+b.x)/2; u.a.y=(a.y+b.y)/2; u.b=c; v.a.x=(a.x+c.x)/2; v.a.y=(a.y+c.y)/2; v.b=b; return int

    22、ersection(u,v);/多边形重心point barycenter(int n,point* p) point ret,t; double t1=0,t2; int i; ret.x=ret.y=0; for (i=1;ieps) t=barycenter(p0,pi,pi+1); ret.x+=t.x*t2; ret.y+=t.y*t2; t1+=t2; if (fabs(t1)eps) ret.x/=t1,ret.y/=t1; return ret;1.4 多边形切割/多边形切割/可用于半平面交#define MAXN 100#define eps 1e-8#define zero

    23、(x) (x)0?(x):-(x)eps;point intersection(point u1,point u2,point v1,point v2) point ret=u1; double t=(u1.x-v1.x)*(v1.y-v2.y)-(u1.y-v1.y)*(v1.x-v2.x) /(u1.x-u2.x)*(v1.y-v2.y)-(u1.y-u2.y)*(v1.x-v2.x); ret.x+=(u2.x-u1.x)*t; ret.y+=(u2.y-u1.y)*t; return ret;/将多边形沿l1,l2确定的直线切割在side侧切割,保证l1,l2,side不共线void

    24、polygon_cut(int& n,point* p,point l1,point l2,point side) point pp100; int m=0,i; for (i=0;in;i+) if (same_side(pi,side,l1,l2) ppm+=pi; if (!same_side(pi,p(i+1)%n,l1,l2)&!(zero(xmult(pi,l1,l2)&zero(xmult(p(i+1)%n,l1,l2) ppm+=intersection(pi,p(i+1)%n,l1,l2); for (n=i=0;im;i+) if (!i|!zero(ppi.x-ppi-1

    25、.x)|!zero(ppi.y-ppi-1.y) pn+=ppi; if (zero(pn-1.x-p0.x)&zero(pn-1.y-p0.y) n-; if (n3) n=0;1.5 浮点函数/浮点几何函数库#include #define eps 1e-8#define zero(x) (x)0?(x):-(x)eps)struct pointdouble x,y;struct linepoint a,b;/计算cross product (P1-P0)x(P2-P0)double xmult(point p1,point p2,point p0) return (p1.x-p0.x)*

    26、(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y);double xmult(double x1,double y1,double x2,double y2,double x0,double y0) return (x1-x0)*(y2-y0)-(x2-x0)*(y1-y0);/计算dot product (P1-P0).(P2-P0)double dmult(point p1,point p2,point p0) return (p1.x-p0.x)*(p2.x-p0.x)+(p1.y-p0.y)*(p2.y-p0.y);double dmult(double x1,do

    27、uble y1,double x2,double y2,double x0,double y0) return (x1-x0)*(x2-x0)+(y1-y0)*(y2-y0);/两点距离double distance(point p1,point p2) return sqrt(p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y);double distance(double x1,double y1,double x2,double y2) return sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);/判三点共线int dots_inline(point p1,point p2,point p3) return zero(xmult(p1,p2,p3);int dots_inline(double x1,double y1,double x2,double y2,double x3,double y3)


    注意事项

    本文(ACM常用模板.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开