ImageVerifierCode 换一换
格式:DOC , 页数:124 ,大小:469.50KB ,
资源ID:2319929      下载积分:20 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-2319929.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ACM试题集(免下载卷).doc)为本站会员(dzzj200808)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

ACM试题集(免下载卷).doc

1、1ACM经典试题ACM经典试题ACM经典试题ACM经典试题ACM经典试题ACM经典试题2目录一数论 41.阶乘最后非零位 .42. 模线性方程(组) 43. 素数表 .64. 素数随机判定(miller_rabin) 65. 质因数分解 .76. 最大公约数欧拉函数 .8二图论_匹配 91. 二分图最大匹配(hungary 邻接表形式 )92. 二分图最大匹配(hungary 邻接表形式 ,邻接阵接口) .103. 二分图最大匹配(hungary 邻接阵形式 )104. 二分图最大匹配(hungary 正向表形式 )115. 二分图最佳匹配(kuhn_munkras 邻接阵形式) .116.

2、一般图匹配(邻接表形式) 127. 一般图匹配(邻接表形式,邻接阵接口 ).138. 一般图匹配(邻接阵形式) 149. 一般图匹配(正向表形式) 15三图论_生成树 161. 最小生成树(kruskal 邻接表形式) .162. 最小生成树(kruskal 正向表形式) .173. 最小生成树(prim+binary_heap 邻接表形式) .194. 最小生成树(prim+binary_heap 正向表形式) .205. 最小生成树(prim+mapped_heap 邻接表形式) .216. 最小生成树(prim+mapped_heap 正向表形式) .227. 最小生成树(prim 邻接

3、阵形式) .238. 最小树形图(邻接阵形式) 24四图论_网络流 251. 上下界最大流(邻接表形式 )252. 上下界最大流(邻接阵形式 )263. 上下界最小流(邻接表形式 )274. 上下界最小流(邻接阵形式 )295. 最大流(邻接表形式) 306. 最大流(邻接表形式,邻接阵接 口) .317. 最大流(邻接阵形式) 328. 最大流无流量(邻接阵形式 )329. 最小费用最大流(邻接阵形式 )33五. 图论_最短路径 .341. 最短路径(单源 bellman_ford 邻接阵形式) 342. 最短路径(单源 dijkstra_bfs 邻接表形式) .353. 最短路径(单源 d

4、ijkstra_bfs 正向表形式) .354. 最短路径(单源 dijkstra+binary_heap 邻接表形式) 365. 最短路径(单源 dijkstra+binary_heap 正向表形式) 3736. 最短路径(单源 dijkstra+mapped_heap 邻接表形式) .387. 最短路径(单源 dijkstra+mapped_heap 正向表形式) .398. 最短路径(单源 dijkstra 邻接阵形式) 409. 最短路径(多源 floyd_warshall 邻接阵形式) 40六. 图论_连通性 .411. 无向图关键边(dfs 邻接阵形式 )412. 无向图关键点(d

5、fs 邻接阵形式 )423. 无向图块(bfs 邻接阵形式) 434. 无向图连通分支(bfs 邻接阵形式 )435. 无向图连通分支(dfs 邻接阵形式 )446. 有向图强连通分支(bfs 邻接阵形式 )447. 有向图强连通分支(dfs 邻接阵形式 )458. 有向图最小点基(邻接阵形式 )46七. 图论_应用 .461.欧拉回路(邻接阵形式) 462. 前序表转化 .473. 树的优化算法 .484. 拓扑排序(邻接阵形式). .495. 最佳边割集 .506. 最佳顶点割集 .517. 最小边割集 .528. 最小顶点割集 .539. 最小路径覆盖 .55八. 图论_NP 搜索 55

6、1. 最大团(n 小于 64)(faster) 552. 最大团 .58九. 组合 .591. 排列组合生成 .592. 生成 gray 码 .603. 置换(polya) .614. 字典序全排列 .615. 字典序组合 .626. 组合公式 .62十. 数值计算 .631. 定积分计算(Romberg) .632. 多项式求根(牛顿法) 643. 周期性方程(追赶法) 66十一. 几何 .671. 多边形 .672. 多边形切割 .703. 浮点函数 .714. 几何公式 .765. 面积 .786. 球面 .7947. 三角形 .798. 三维几何 .819. 凸包(graham) 89

7、10. 网格(pick) .9111. 圆 .9212. 整数函数 .9413. 注意 .96十二. 结构 .971. 并查集 .972. 并查集扩展(friend_enemy) 983. 堆(binary) 984. 堆(mapped) .995. 矩形切割 .996. 线段树 .1007. 线段树扩展 .1028. 线段树应用 .1059. 子段和 .10510. 子阵和 .105十三. 其他 .1061. 分数 .1062. 矩阵 .1083. 日期 .1104. 线性方程组(gauss) .1115. 线性相关 .113十四. 应用 .1141. joseph .1142. N 皇后构

8、造解 1153. 布尔母函数 .1154. 第 k 元素 .1165. 幻方构造 .1166. 模式匹配(kmp) .1187. 逆序对数 .1188. 字符串最小表示 .1199. 最长公共单调子序列 .11910. 最长子序列 .12011. 最大子串匹配 .12112. 最大子段和 .12213. 最大子阵和 .123一数论1.阶乘最后非零位5/求阶乘最后非零位,复杂度 O(nlogn)/返回该位,n 以字符串方式传入#include #define MAXN 10000int lastdigit(char* buf)const int mod20=1,1,2,6,4,2,2,4,2,8

9、,4,4,8,4,6,8,8,6,8,2;int len=strlen(buf),aMAXN,i,c,ret=1;if (len=1)return modbuf0-0;for (i=0;i=0;i-)c=c*10+ai,ai=c/5,c%=5;return ret+ret%2*5;2. 模线性方程(组)#ifdef WIN32typedef _int64 i64;#elsetypedef long long i64;#endif/扩展 Euclid 求解 gcd(a,b)=ax+byint ext_gcd(int a,int b,intif (!b)x=1,y=0;return a;ret=e

10、xt_gcd(b,a%b,x,y);t=x,x=y,y=t-a/b*y;return ret;/计算 ma, O(loga), 本身没什么用 , 注意这个按位处理的方法 :-Pint exponent(int m,int a)int ret=1;for (;a;a=1,m*=m)if (a6return ret;/计算幂取模 ab mod n, O(logb)int modular_exponent(int a,int b,int n) /ab mod nint ret=1;for (;b;b=1,a=(int)(i64)a)*a%n)if (breturn ret;/求解模线性方程 ax=b

11、 (mod n)/返回解的个数,解保存在 sol中/要求 n0,解的范围 0n-1int modular_linear(int a,int b,int n,int* sol)int d,e,x,y,i;d=ext_gcd(a,n,x,y);if (b%d)return 0;e=(x*(b/d)%n+n)%n;for (i=0;i0,wi与 wj互质,解的范围 1n,n=w0*w1*.*wk-1int modular_linear_system(int b,int w,int k)int d,x,y,a=0,m,n=1,i;for (i=0;i1;void initprime()int i;fo

12、r (plistpcount+=2,i=3;i#ifdef WIN32typedef _int64 i64;#elsetypedef long long i64;#endifint modular_exponent(int a,int b,int n) /ab mod nint ret;for (;b;b=1,a=(int)(i64)a)*a%n)if (breturn ret;/ Carmicheal number: 561,41041,825265,321197185int miller_rabin(int n,int time=10)if (n=1|(n!=28while (time-)

13、if (modular_exponent(rand()#define MAXN 2001000#define PSIZE 100000int plistPSIZE, pcount=0;int prime(int n)int i;if (n!=2for (i=0;plisti*plisti1;void initprime()int i;for (plistpcount+=2,i=3;i 1 return cnt;9/*/产生 MAXN 以内的所有素数/note:2863311530 就是 10101010101010101010101010101010/给所有 2 的倍数赋初值#include

14、#include using namespace std;#define MAXN 100000000unsigned int plist6000000,pcount;unsigned int isprime(MAXN5)+1;#define setbitzero(a) (isprime(a)5for(i=0;i1)ret*=n-1;return ret;二图论_匹配1. 二分图最大匹配(hungary 邻接表形式)/二分图最大匹配,hungary 算法,邻接表形式,复杂度 O(m*e)/返回最大匹配数,传入二分图大小 m,n 和邻接表 list(只需一边)/match1,match2 返回一

15、个最大匹配,未匹配顶点 match 值为-1#include #define MAXN 310#define _clr(x) memset(x,0xff,sizeof(int)*MAXN)struct edge_tint from,to;edge_t* next;int hungary(int m,int n,edge_t* list,int* match1,int* match2)int sMAXN,tMAXN,p,q,ret=0,i,j,k;edge_t* e;for (_clr(match1),_clr(match2),i=0;i=0)for (_clr(t),sp=q=0=i;pnex

16、t)if (tj=e-to=0;j=p)match2j=k=tj,p=match1k,match1k=j;return ret;2. 二分图最大匹配(hungary 邻接表形式,邻接阵接口)/二分图最大匹配,hungary 算法,邻接表形式,邻接阵接口,复杂度 O(m*e)s/返回最大匹配数,传入二分图大小 m,n 和邻接阵/match1,match2 返回一个最大匹配,未匹配顶点 match 值为-111#include #include #define MAXN 310#define _clr(x) memset(x,0xff,sizeof(int)*MAXN)int hungary(in

17、t m,int n,int matMAXN,int* match1,int* match2)int sMAXN,tMAXN,p,q,ret=0,i,j,k,r;vector eMAXN;/生成邻接表(只需一边)for(i=0;i=0)for (_clr(t),sp=q=0=i;p=0;j=p)match2j=k=tj,p=match1k,match1k=j;return ret;3. 二分图最大匹配(hungary 邻接阵形式)/二分图最大匹配,hungary 算法,邻接阵形式,复杂度 O(m*m*n)/返回最大匹配数,传入二分图大小 m,n 和邻接阵 mat,非零元素表示有边/match1,

18、match2 返回一个最大匹配,未匹配顶点 match 值为-1#include #define MAXN 310#define _clr(x) memset(x,0xff,sizeof(int)*MAXN)int hungary(int m,int n,int matMAXN,int* match1,int* match2)int sMAXN,tMAXN,p,q,ret=0,i,j,k;for (_clr(match1),_clr(match2),i=0;i=0)for (_clr(t),sp=q=0=i;p=0;j=p)match2j=k=tj,p=match1k,match1k=j;re

19、turn ret;124. 二分图最大匹配(hungary 正向表形式)/二分图最大匹配,hungary 算法,正向表形式,复杂度 O(m*e)/返回最大匹配数,传入二分图大小 m,n 和正向表 list,buf(只需一边)/match1,match2 返回一个最大匹配,未匹配顶点 match 值为-1#include #define MAXN 310#define _clr(x) memset(x,0xff,sizeof(int)*MAXN)int hungary(int m,int n,int* list,int* buf,int* match1,int* match2)int sMAXN

20、,tMAXN,p,q,ret=0,i,j,k,l;for (_clr(match1),_clr(match2),i=0;i=0)for (_clr(t),sp=q=0=i;p=0;j=p)match2j=k=tj,p=match1k,match1k=j;return ret;5. 二分图最佳匹配 (kuhn_munkras 邻接阵形式)/二分图最佳匹配,kuhn munkras 算法,邻接阵形式,复杂度 O(m*m*n)/返回最佳匹配值,传入二分图大小 m,n 和邻接阵 mat,表示权值/match1,match2 返回一个最佳匹配,未匹配顶点 match 值为-1/一定注意 m#define

21、 MAXN 310#define inf 1000000000#define _clr(x) memset(x,0xff,sizeof(int)*n)int kuhn_munkras(int m,int n,int matMAXN,int* match1,int* match2)int sMAXN,tMAXN,l1MAXN,l2MAXN,p,q,ret=0,i,j,k;for (i=0;il1i?matij:l1i;for (i=0;i=0;j=p)match2j=k=tj,p=match1k,match1k=j;if (match1inext)if (!vt=e-to)if (matcht=

22、2;)if (matchi=0);return j/2;7. 一般图匹配(邻接表形式,邻接阵接口)/一般图最大匹配,邻接表形式,复杂度 O(n*e)/返回匹配顶点对数,match 返回匹配,未匹配顶点 match 值为-1/传入图的顶点数 n 和邻接表 list#include #define MAXN 100int aug(int n,vector list,int* match,int* v,int now)int t,ret=0,r;vnow=1;/ for (e=listnow;e;e=e-next)for (r=0;r listMAXN;for (i=0;i=2;)if (match

23、i=0);return j/2;8. 一般图匹配(邻接阵形式)/一般图最大匹配,邻接阵形式,复杂度 O(n3)/返回匹配顶点对数,match 返回匹配,未匹配顶点 match 值为-1/传入图的顶点数 n 和邻接阵 mat#define MAXN 100int aug(int n,int matMAXN,int* match,int* v,int now)int i,ret=0;vnow=1;for (i=0;i=2;)if (matchi=0);return j/2;9. 一般图匹配(正向表形式)/一般图最大匹配,正向表形式,复杂度 O(n*e)/返回匹配顶点对数,match 返回匹配,未匹

24、配顶点 match 值为-1/传入图的顶点数 n 和正向表 list,buf#define MAXN 100int aug(int n,int* list,int* buf,int* match,int* v,int now)int i,t,ret=0;vnow=1;for (i=listnow;i=2;)if (matchi=0);return j/2;三图论_生成树1. 最小生成树(kruskal 邻接表形式)/无向图最小生成树,kruskal 算法,邻接表形式,复杂度 O(mlogm)/返回最小生成树的长度,传入图的大小 n 和邻接表 list/可更改边权的类型,edge2 返回树的构造

25、,用边集表示/如果图不连通,则对各连通分支构造最小生成树,返回总长度#include #define MAXN 200#define inf 1000000000typedef double elem_t;struct edge_tint from,to;elem_t len;edge_t* next;#define _ufind_run(x) for(;pt=x;x=px,pt=(px?px:x)#define _run_both _ufind_run(i);_ufind_run(j)struct ufindint pMAXN,t;void init()memset(p,0,sizeof(p

26、);void set_friend(int i,int j)_run_both;pi=(i=j?0:j);int is_friend(int i,int j)_run_both;return i=j;#define _cp(a,b) (a).len1hp=hp1,p=1);hp=e;int del(heap_tfor (e=hp=1,c=2;cnext)if (ito)e.a=i,e.b=t-to,e.len=t-len,h.ins(e);while (m#define MAXN 200#define inf 1000000000typedef double elem_t;struct edg

27、e_tint to;elem_t len;19#define _ufind_run(x) for(;pt=x;x=px,pt=(px?px:x)#define _run_both _ufind_run(i);_ufind_run(j)struct ufindint pMAXN,t;void init()memset(p,0,sizeof(p);void set_friend(int i,int j)_run_both;pi=(i=j?0:j);int is_friend(int i,int j)_run_both;return i=j;#define _cp(a,b) (a).len1hp=h

28、p1,p=1);hp=e;int del(heap_tfor (e=hp=1,c=2;c1hp=hp1,p=1);hp=e;int del(heap_tfor (e=hp=1,c=2;cnext)if (!vt-toreturn ret;214. 最小生成树(prim+binary_heap 正向表形式)/无向图最小生成树,prim 算法+二分堆,正向表形式,复杂度 O(mlogm)/返回最小生成树的长度,传入图的大小 n 和正向表 list,buf/可更改边权的类型,pre返回树的构造,用父结点表示,根节点(第一个)pre 值为-1/必须保证图的连通的!#define MAXN 200#de

29、fine inf 1000000000typedef double elem_t;struct edge_tint to;elem_t len;#define _cp(a,b) (a).d1hp=hp1,p=1);hp=e;int del(heap_tfor (e=hp=1,c=2;c1hmapindp=indp1=p=hp1,p=1);hmapindp=i=p=e;int del(int i,elem_tif (in) return 0;for (e=hp=i;p1;hmapindp=indp1=p=hp1,p=1);for (c=2;cnext)if (!vt-toreturn ret;6

30、. 最小生成树(prim+mapped_heap 正向表形式)/无向图最小生成树,prim 算法+映射二分堆,正向表形式,复杂度 O(mlogn)/返回最小生成树的长度,传入图的大小 n 和正向表 list,buf/可更改边权的类型,pre返回树的构造,用父结点表示,根节点(第一个)pre 值为-1/必须保证图的连通的!#define MAXN 200#define inf 1000000000typedef double elem_t;struct edge_tint to;elem_t len;#define _cp(a,b) (a)1hmapindp=indp1=p=hp1,p=1);h

31、mapindp=i=p=e;int del(int i,elem_tif (in) return 0;for (e=hp=i;p1;hmapindp=indp1=p=hp1,p=1);for (c=2;c#define MAXN 120#define inf 1000000000typedef int elem_t;elem_t edmonds(int n,elem_t matMAXN*2,int* pre)elem_t ret=0;int cMAXN*2MAXN*2,lMAXN*2,pMAXN*2,m=n,t,i,j,k;for (i=0;in;prek=prem)for (i=0;i eM

32、AXN;for (i=0;i0)flowprei-1i+=dsink,i=prei-1;else27flowi-prei-1-=dsink,i=-prei-1;for (j=i=0;i0)flowprei-1i+=dsink,i=prei-1;elseflowi-prei-1-=dsink,i=-prei-1;int limit_max_flow(int n,int matMAXN,int bfMAXN,int source,int sink,int flowMAXN)int i,j,sk,ks;if (source=sink) return inf;for (matnn+1=matn+1n=

33、matnn=matn+1n+1=i=0;i eMAXN;29for (i=0;i0)flowprei-1i+=dsink,i=prei-1;elseflowi-prei-1-=dsink,i=-prei-1;for (j=i=0;i0)flowprei-1i+=dsink,i=prei-1;elseflowi-prei-1-=dsink,i=-prei-1;int limit_min_flow(int n,int matMAXN,int bfMAXN,int source,int sink,int flowMAXN)int i,j,sk,ks;if (source=sink) return i

34、nf;for (matnn+1=matn+1n=matnn=matn+1n+1=i=0;in;i+)for (matni=matin=matn+1i=matin+1=j=0;jn;j+)matij-=bfij,matni+=bfji,matin+1+=bfij;sk=matsourcesink,ks=matsinksource,matsourcesink=matsinksource=inf;for (i=0;in+2;i+)for (j=0;jn+2;flowij+=0);_max_flow(n+2,mat,n,n+1,flow);for (i=0;in;i+)if (flownimatni) return -1;flowsourcesink=flowsinksource=0,matsourcesink=sk,matsinksource=ks;_max_flow(n,mat,sink,source,flow);for (i=0;in;i+)

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报