ACM模板(浙大版).pdf
《ACM模板(浙大版).pdf》由会员分享,可在线阅读,更多相关《ACM模板(浙大版).pdf(121页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、目 录.几 何.41.1 注 意.41.2 几 何 公 式.41.3 多 边 形.61.4 多 边 形 切 割.91.5 浮 点 函 数.101.6 面 积.151.7 球 面.161.8 三 角 形.171.9 三 维 几 何.191.10 凸 包.271.11 网 格.281.12 圆.281.13 整 数 函 数.30,组 合.332.1 组 合 公 式.332.2 排 列 组 合 生 成.332.3 生 成 GRAY 码.352.4 置 换(PO LYA).352.5 字 典 序 全 排 列.362.6 字 典 序 组 合.36三.结 构.373.1 并 查 集.373.2 堆.383
2、.3 线 段 树.393.4 子 段 和.443.5 子 阵 和.45四.数 论.454.1 阶 乘 最 后 非。位.454.2 模 线 性 方 程 组.464.3 素 数.474.4 欧 拉 函 数.494.5 定 积 分 计 算(ROMBERG).494.6 多 项 式 求 根(牛 顿 法).514.7 周 期 性 方 程(追 赶 法).52五.图 论.535.1 NP 搜 索.5315.1.1 最 大 团.535.1.2 最 大 团(n6G(faster).545.2 连 通 性.565.2.1 无 向 图 关 键 点(d fs邻 接 阵).565.2.2 无 向 图 关 键 边(d f
3、s邻 接 阵).575.2.3 无 向 图 的 块(b fs邻 接 阵).585.2.4 无 向 图 连 通 分 支(dfs/bfs邻 接 阵).595.2.5 有 向 图 强 连 通 分 支(dfs/bfs邻 接 阵).605.2.6 有 向 图 最 小 点 基(邻 接 阵).625.3 匹 酉 己.625.3.1 二 分 图 最 大 匹 配(hungary令|5 接 表).625.3.2 二 分 图 最 大 匹 配(hungary邻 接 阵).635.3.3 二 分 图 最 大 匹 配(hungary正 向 表).635.3.4 二 分 图 最 佳 匹 配(kuhn_munkras邻 接
4、阵).645.3.5 一 般 图 匹 配(邻 接 表).655.3.6 一 般 图 匹 配(邻 接 阵).665.3.7 一 般 图 匹 配(正 向 表).675.4 网 络 流.685.4.1 最 大 流(邻 接 阵).685.4.2 上 下 界 最 大 流(邻 接 阵).695.4.3 上 下 界 最 小 流(邻 接 阵).695.4.4 最 大 流 无 流 量(邻 接 阵).705.4.5 最 小 费 用 最 大 流(邻 接 阵).715.5 应 用.725.5.1 欧 拉 回 路(邻 接 阵).725.5.2 树 的 前 序 表 转 化.725.5.3 树 的 优 化 算 法.735.
5、5.4 拓 扑 排 序(邻 接 阵).755.5.5 最 佳 边 割 集.755.5.6 最 佳 点 割 集.765.5.7 最 小 边 割 集.785.5.8 最 小 点 割 集.795.5.9 最 小 路 径 覆 盖.805.6 支 撑 树.815.6.1 最 小 生 成 树(kruskal邻 接 表).815.6.2 最 小 生 成 树(kruskal正 向 表).825.6.3 最 小 生 成 树(prim+binary_heap 邻 接 表).835.6.4 最 小 生 成 树(prim+binary_heap 正 向 表).855.6.5 最 小 生 成 树(prim+mapped
6、_heap 邻 接 表).865.6.6 最 小 生 成 树(prim+mapped_heap 正 向 表).875.6.7 最 小 生 成 树(prim邻 接 阵).885.6.8 最 小 树 形 图(邻 接 阵).895.7 最 短 路 径.905.7.1 最 短 路 径(单 源 bellman_ford邻 接 阵).9025.7.2 最 短 路 径(单 源 dijkstra+bfs邻 接 表).915.7.3 最 短 路 径(单 源 dijkstra+bfs正 向 表).915.7.4 最 短 路 径(单 源 dijkstra+binary_heap 邻 接 表).925.7.5 最 短
7、 路 径(单 源 dijkstra+binary_heap 正 向 表).935.7.6 最 短 路 径(单 源 dijkstra+m叩 ped_heap邻 接 表).945.7.7 最 短 路 径(单 源 dijkstra+mapped_heap正 向 表).955.7.8 最 短 路 径(单 源 dijkstra邻 接 阵).965.7.9 最 短 路 径(多 源 floyd_warshall邻 接 阵).97六.应 用.986.1 Joseph 问 题.986.2 N 皇 后 构 造 解.986.3 布 尔 母 函 数.996.4 第 k 元 素.1006.5 幻 方 构 造.1006.
8、6 模 式 匹 配(kmp).1016.7 逆 序 对 数.1026.8 字 符 串 最 小 表 示.1026.9 最 长 公 共 单 调 子 序 列.1036.1 0 最 长 子 序 列.1046.1 1 最 大 子 串 匹 配.1056.1 2 最 大 子 段 和.1066.1 3 最 大 子 阵 和.107七.其 它.1087.1 大 数(只 能 处 理 正 数).1087.2 分 数.1137.3 矩 阵.1157.4 线 性 方 程 组.1177.5 线 性 相 关.1197.6 日 期.1203几 何 1.1注 意 1.注 意 舍 入 方 式(0.5的 舍 入 方 向);防 止 输
9、 出-0.2.儿 何 题 注 意 多 测 试 不 对 称 数 据.3.整 数 儿 何 注 意 xm ult和 dm ult是 否 会 出 界;符 点 几 何 注 意 e p s的 使 用.4.避 免 使 用 斜 率;注 意 除 数 是 否 会 为 0.5.公 式 一 定 要 化 简 后 再 代 入.6.判 断 同 一 个 2*PI域 内 两 角 度 差 应 该 是 abs(a 1-a2)pi+pi-beta;相 等 应 该 是 abs(a l-a2)pi+pi-eps;7.需 要 的 话 尽 量 使 用 atan2,注 意:atan2(0,0)=0,atan2(1,0)=pi/2,atan2(
10、-1,0)=-pi/2,atan2(0,1)=0,atan2(0,-1)=pi.8.cross product=lul*lvl*sin(a)dot product=lul*lvl*cos(a)9.(Pl-P0)x(P2-P0)结 果 的 意 义:正:在 60,12顺 时 针(0疝)内 负:在 逆 时 针(0,pi)内 0:,共 线,夹 角 为 0 或 pi10.误 差 限 缺 省 使 用 le-8!1.2几 何 公 式 三 角 形:I.半 周 长 P=(a+b+c)/22.面 积 S=aHa/2=absin(C)/2=sqrt(P(P-a)(P-b)(P-c)3.中 线 Ma=sqrt(2(b
11、A2+cA2)-aA2)/2=sqrt(bA2+cA2+2bccos(A)/24.角 平 分 线 Ta=sqrt(bc(b+c)A2-aA2)/(b+c)=2bccos(A/2)/(b+c)5.高 线 Ha=bsin(C)=csin(B)=sqrt(bA2-(aA2+bA2-cA2)/(2a)A2)46.内 切 圆 半 径 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/(
12、2sin(A)=b/(2sin(B)=c/(2sin(C)四 边 形:D1,D2为 对 角 线,M 对 角 线 中 点 连 线,A 为 对 角 线 夹 角 1.aA2+bA2+cA2+dA2=D 1A2+D2A2+4MA22.S=DlD2sin(A)/2(以 卜 对 圆 的 内 接 四 边 形)3.ac+bd=D 1D24.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(RA2-rA2)=2Rsin(A/2
13、)=2rtan(A/2)4.面 积 S=nar/2=nrA2tan(A/2)=nRA2sin(A)/2=naA2/(4tan(A/2)圆:1.弧 长 l=rA2.弦 长 a=2sqrt(2hr-hA2)=2rsin(A/2)3.弓 形 高 h=r-sqrtr2-aA2/4)=r(l-cos(A)=atan(A/4)/24.扇 形 面 积 Sl=rl/2=rA2A/25.弓 形 面 积 S2=(rl-a(r-h)/2=rA2(A-sin(A)/2棱 柱:1.体 积 V=Ah,A为 底 面 积,h 为 高 2.侧 面 积 S=lp,l为 棱 长,p 为 直 截 面 周 长 3.全 面 积 T=S+
14、2A棱 锥:1.体 积 V=Ah/3,A为 底 面 积,h 为 高(以 下 对 正 棱 锥)2.侧 面 积 S=lp/2,1为 斜 高,p 为 底 面 周 长 3.全 面 积 T=S+A棱 台:1.体 积 V=(Al+A2+sqrt(AlA2)h/3,Al.A2 为 上 下 底 面 积,h 为 高(以 下 为 正 棱 台)2.侧 面 积 S=(pl+p2)l/2,pl.p2为 上 下 底 面 周 长,1为 斜 高 3.全 面 积 T=S+A1+A25圆 柱:1.侧 面 积 S=2PIrh2.全 面 积 T=2PIr(h+r)3.体 积 V=PIrA2h圆 锥:1.母 线 l=sqrt(hA2+
15、rA2)2.侧 面 积 S=PIrl3.全 面 积 T=PIr(l+r)4.体 积 V=P1rA2h/3圆 台:1.母 线 l=sqrt(hA2+(rl-r2)A2)2.侧 面 积 S=PI(rl+r2)l3.全 面 积 T=PIrl(l+rl)+PIr2(l+r2)4.体 积 V=PI(r 1 A2+r2A2+r 1 r2)h/3球:L 全 面 积 T=4PIrA22.体 积 V=4PIrA3/3球 台:1.侧 面 积 S=2PIrh2.全 面 积 T=PI(2rh+rl 八 2+r2A2)3.体 积 V=PIh(3(rl A2+r2A2)+hA2)/6球 扇 形:1.全 面 积 T=PIr
16、(2h+rO),h为 球 冠 高,rt)为 球 冠 底 面 半 径 2.体 积 V=2PIrh/31.3多 边 形#include#inciude#define MAXN 1 000#define offset 10000#define eps le-8#define zero(x)(x)0?(x):-(x)eps?1:(x)-eps?2:0)struct point double x,y;struct line point a,b;double xmult(point pinpoint p2,point p0)return(pl.x-pO.x)*(p2.y-pO.y)-(p2.x-pO.x)
17、*(pl.y-p0.y);6 判 定 凸 多 边 形,顶 点 按 顺 时 针 或 逆 时 针 给 出,允 许 相 邻 边 共 线 int is_convex(int n,point*p)int i,s3=M J;for(i=0;in&slls2;i+)s_sign(xmult(p(i+l)%n,p(i+2)%n,pi)=0;return slls2;)判 定 凸 多 边 形,顶 点 按 顺 时 针 或 逆 时 针 给 出,不 允 许 相 邻 边 共 线 int is_convex_v2(int n,point*p)int i,s3=1,1,1);for(i=0;in&s0&slls2;i+)s
18、Lsign(xmult(p(i+l)%n,p(i+2)%n,pi)=0;return s0&slls2;判 点 在 凸 多 边 形 内 或 多 边 形 边 上,顶 点 按 顺 时 针 或 逆 时 针 给 出 int inside_convex(point q,int n,point*p)int i,s3=M J;for(i=0;in&slls2;i+)sLsign(xmult(p(i+1)%n,q,pi)=0;return slls2;)判 点 在 凸 多 边 形 内,顶 点 按 顺 时 针 或 逆 时 针 给 出,在 多 边 形 边 上 返 回 0int inside_convex_v2(p
19、oint q,int n,point*p)inti,s3=U,l;for(i=0;in&s0&slls2;i+)s_sign(xmult(p(i+1)%n,q,pi)J=0;return s0&slls2;判 点 在 任 意 多 边 形 内,顶 点 按 顺 时 针 或 逆 时 针 给 出/on_edge表 示 点 在 多 边 形 边 上 时 的 返 回 值,offset为 多 边 形 坐 标 上 限 int inside_polygon(point q,int n,point*p,int on_edge=l)point q2;int i=0,count;while(in)for(count=i
20、=0,q2.x=rand()4-offset,q2.y=rand()+offset;in;i+)if(zero(xmult(q,pi,p(i+1)%n)&(pi.x-q.x)*(p(i+l)%n.x-q.x)eps&(pi.y-q.y)*(p(i+l)%n.y-q.y)eps)7return on_edge;else if(zero(xmult(q,q2,pi)break;else if(xmult(q,pi,q2)*xmult(q,p(i+l)%n,q2)-eps&xmult(pi,q,p(i+l)%n)*xmult(pi,q2,p(i+l)%n)-eps)count+;return cou
21、nt&l;)inline int opposite_side(point pl,point p2,point 11,point 12)return xmult(ll,pl,12)*xmult(ll,p2,12)-eps;)inline int dot_online_in(point p,point 11,point 12)return zero(xmult(p,ll,12)&(11.x-p.x)*(12.x-p.x)eps&(!1.y-p.y)*(12.y-p.y)eps;)判 线 段 在 任 意 多 边 形 内,顶 点 按 顺 时 针 或 逆 时 针 给 出,与 边 界 相 交 返 回 1i
22、nt inside_polygon(point 11,point 12,int n,point*p)point tMAXN,tt;int i,j,k=O;if(!inside_polygon(ll,n,p)ll!inside_polygon(12,n,p)return 0;for(i=0;in;i+)if(opposite_side(ll,12,pi,p(i4-l)%n)&opposite_side(pi,p(i+l)%n,ll,12)return 0;else if(dot_online_in(l 1,pi,p(i+1)%n)tk+=ll;else if(dot_online_in(12,p
23、i,p(i+l)%n)tk+=12;else if(dot_online_in(pi,ll,12)tk+=pi;for(i=0;ik;i+)for(j=i+l;jk;j+)tt.x=(ti.x+tj.x)/2;tt.y=(ti.y+t|jJ.y)/2;if(!inside_polygon(tt,n,p)return 0;)return 1;point intersection(line u,line v)8point ret=u.a;double t=(u.a.x-v.a,x)*(v.a.y-v.b.y)-(u.a.y-v.a,y)*(v.a.x-v.b.x)/(u.a.x-u.b.x)*(v
24、.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;itb=c;v.a.x=(a.x+c.x)/2;v.a.y=(a.y+c.y)/2;v.b=b;return intersection(u,v);多 边 形 重 心 point barycenter(int n,point*p)po
25、int ret,t;double tl=0,t2;int i;ret.x=ret.y=O;for(i=l;ieps)t=barycenter(pO,pi,pi+l);ret.x+=t.x*t2;ret.y+=t.y*t2;tl+=t2;if(fabs(tl)eps)ret.x/=tl,ret.y/=tl;return ret;1.4多 边 形 切 割 多 边 形 切 割 可 用 于 半 平 面 交#define MAXN 100#define eps le-8#define zero(x)(x)0?(x):-(x)eps)9struct point double x,y;double xmul
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ACM 模板 浙大
限制150内