没有合适的资源?快使用搜索试试~ 我知道了~
ACM常用模板及北大ACM-题型分类代码
需积分: 10 14 下载量 75 浏览量
2010-08-08
20:52:25
上传
评论 1
收藏 665KB PDF 举报
温馨提示
试读
61页
ACM常用模板及北大ACM-题型分类代码 北大ACM soj中详细的题目分类
资源推荐
资源详情
资源评论
1
求欧拉回路或欧拉路,邻接阵形式,复杂度 .......................................................................... 2
大数(整数类封装) ............................................................................................................. 3
二分堆(binary) ................................................................................................................ 11
多边形 ........................................................................................................................... 11
多边形切割--可用于半平面交 ......................................................................................... 15
多项式求根(牛顿法) ....................................................................................................... 16
分数............................................................................................................................... 17
浮点几何函数库 ............................................................................................................. 19
矩形切割........................................................................................................................ 24
矩阵............................................................................................................................... 25
将用边表示的树转化为前序表示的树.............................................................................. 27
三角形 ........................................................................................................................... 28
拓扑排序,邻接阵形式,复杂度 O(n^2) ............................................................................... 30
网格(pick) ....................................................................................................................... 31
线性方程组(gauss) .......................................................................................................... 31
圆 .................................................................................................................................. 33
质因数分解 .................................................................................................................... 35
求置换的循环节,polya 原理............................................................................................. 37
周期性方程(追赶法) ....................................................................................................... 37
子段和--求 sum{[0..n-1]} .................................................................................................. 38
子阵和--求 sum{a[0..m-1][0..n-1]} ..................................................................................... 38
字典序全排列与序号的转换............................................................................................ 39
最长公共单调子序列 ...................................................................................................... 40
最大公约数欧拉函数 ...................................................................................................... 41
最大流(邻接阵形式)-- 求网络最大流,邻接阵形式 ............................................................ 42
最大团 ........................................................................................................................... 42
最大子串匹配,复杂度 O(mn) ........................................................................................... 43
求最大子段和,复杂度 O(n) .............................................................................................. 44
最大子阵和--求最大子阵和,复杂度 O(n^3) ....................................................................... 45
最小顶点割集................................................................................................................. 46
最小生成树(prim 邻接阵形式) ......................................................................................... 47
北大 ACM-题型分类的代码 ............................................................................................. 48
1、排序 ............................................................................................. 48
2、搜索、回溯、遍历 ........................................................................ 49
3、历法 ............................................................................................. 49
4、枚举 ............................................................................................. 49
5、数据结构的典型算法 ..................................................................... 49
6、 动态规划..................................................................................... 50
7、贪心 ............................................................................................. 50
8、模拟 ............................................................................................. 51
9、递归 ............................................................................................. 51
10、字符串处理 ................................................................................. 51
11、数论............................................................................................ 51
12、几何有关的题目 .......................................................................... 51
2
13、任意精度运算、数字游戏、高精度计算 ....................................... 52
14、概率统计..................................................................................... 52
15、小费用最大流、最大流................................................................ 52
16、压缩存储的 DP ............................................................................ 52
17、最长公共子串(LCS).................................................................. 52
18、图论及组合数学 .......................................................................... 53
19、博弈类 ........................................................................................ 55
20、简单、模拟题.............................................................................. 55
22、匹配............................................................................................ 59
经典............................................................................................ 59
趣味............................................................................................ 60
很繁的题..................................................................................... 60
难题............................................................................................ 60
多解题 ........................................................................................ 61
求欧拉回路或欧拉路,邻接阵形式,复杂度
//求欧拉回路或欧拉路,邻接阵形式,复杂度 O(n^2)
//返回路径长度,path 返回路径(有向图时得到的是反向路径)
//传入图的大小 n 和邻接阵 mat,不相邻点边权 0
//可以有自环与重边,分为无向图和有向图
#define MAXN 100
void find_path_u(int n,int mat[][MAXN],int now,int& step,int* path){
int i;
for (i=n-1;i>=0;i--)
while (mat[now][i]){
mat[now][i]--,mat[i][now]--;
find_path_u(n,mat,i,step,path);
}
path[step++]=now;
}
void find_path_d(int n,int mat[][MAXN],int now,int& step,int* path){
int i;
for (i=n-1;i>=0;i--)
while (mat[now][i]){
mat[now][i]--;
find_path_d(n,mat,i,step,path);
}
path[step++]=now;
}
3
int euclid_path(int n,int mat[][MAXN],int start,int* path){
int ret=0;
find_path_u(n,mat,start,ret,path);
// find_path_d(n,mat,start,ret,path);
return ret;
}
大数(整数类封装)
#include <iostream.h>
#include <string.h>
#define DIGIT 4
#define DEPTH 10000
#define MAX 100
typedef int bignum_t[MAX+1];
int read(bignum_t a,istream& is=cin){
char buf[MAX*DIGIT+1],ch;
int i,j;
memset((void*)a,0,sizeof(bignum_t));
if (!(is>>buf)) return 0;
for (a[0]=strlen(buf),i=a[0]/2-1;i>=0;i--)
ch=buf[i],buf[i]=buf[a[0]-1-i],buf[a[0]-1-i]=ch;
for (a[0]=(a[0]+DIGIT-1)/DIGIT,j=strlen(buf);j<a[0]*DIGIT;buf[j++]='0');
for (i=1;i<=a[0];i++)
for (a[i]=0,j=0;j<DIGIT;j++)
a[i]=a[i]*10+buf[i*DIGIT-1-j]-'0';
for (;!a[a[0]]&&a[0]>1;a[0]--);
return 1;
}
void write(const bignum_t a,ostream& os=cout){
int i,j;
for (os<<a[i=a[0]],i--;i;i--)
for (j=DEPTH/10;j;j/=10)
os<<a[i]/j%10;
}
int comp(const bignum_t a,const bignum_t b){
int i;
if (a[0]!=b[0])
4
return a[0]-b[0];
for (i=a[0];i;i--)
if (a[i]!=b[i])
return a[i]-b[i];
return 0;
}
int comp(const bignum_t a,const int b){
int c[12]={1};
for (c[1]=b;c[c[0]]>=DEPTH;c[c[0]+1]=c[c[0]]/DEPTH,c[c[0]]%=DEPTH,c[0]++);
return comp(a,c);
}
int comp(const bignum_t a,const int c,const int d,const bignum_t b){
int i,t=0,O=-DEPTH*2;
if (b[0]-a[0]<d&&c)
return 1;
for (i=b[0];i>d;i--){
t=t*DEPTH+a[i-d]*c-b[i];
if (t>0) return 1;
if (t<O) return 0;
}
for (i=d;i;i--){
t=t*DEPTH-b[i];
if (t>0) return 1;
if (t<O) return 0;
}
return t>0;
}
void add(bignum_t a,const bignum_t b){
int i;
for (i=1;i<=b[0];i++)
if ((a[i]+=b[i])>=DEPTH)
a[i]-=DEPTH,a[i+1]++;
if (b[0]>=a[0])
a[0]=b[0];
else
for (;a[i]>=DEPTH&&i<a[0];a[i]-=DEPTH,i++,a[i]++);
a[0]+=(a[a[0]+1]>0);
}
void add(bignum_t a,const int b){
int i=1;
5
for (a[1]+=b;a[i]>=DEPTH&&i<a[0];a[i+1]+=a[i]/DEPTH,a[i]%=DEPTH,i++);
for (;a[a[0]]>=DEPTH;a[a[0]+1]=a[a[0]]/DEPTH,a[a[0]]%=DEPTH,a[0]++);
}
void sub(bignum_t a,const bignum_t b){
int i;
for (i=1;i<=b[0];i++)
if ((a[i]-=b[i])<0)
a[i+1]--,a[i]+=DEPTH;
for (;a[i]<0;a[i]+=DEPTH,i++,a[i]--);
for (;!a[a[0]]&&a[0]>1;a[0]--);
}
void sub(bignum_t a,const int b){
int i=1;
for (a[1]-=b;a[i]<0;a[i+1]+=(a[i]-DEPTH+1)/DEPTH,a[i]-=(a[i]-DEPTH+1)/DEPTH*DEPTH,i++);
for (;!a[a[0]]&&a[0]>1;a[0]--);
}
void sub(bignum_t a,const bignum_t b,const int c,const int d){
int i,O=b[0]+d;
for (i=1+d;i<=O;i++)
if ((a[i]-=b[i-d]*c)<0)
a[i+1]+=(a[i]-DEPTH+1)/DEPTH,a[i]-=(a[i]-DEPTH+1)/DEPTH*DEPTH;
for (;a[i]<0;a[i+1]+=(a[i]-DEPTH+1)/DEPTH,a[i]-=(a[i]-DEPTH+1)/DEPTH*DEPTH,i++);
for (;!a[a[0]]&&a[0]>1;a[0]--);
}
void mul(bignum_t c,const bignum_t a,const bignum_t b){
int i,j;
memset((void*)c,0,sizeof(bignum_t));
for (c[0]=a[0]+b[0]-1,i=1;i<=a[0];i++)
for (j=1;j<=b[0];j++)
if ((c[i+j-1]+=a[i]*b[j])>=DEPTH)
c[i+j]+=c[i+j-1]/DEPTH,c[i+j-1]%=DEPTH;
for (c[0]+=(c[c[0]+1]>0);!c[c[0]]&&c[0]>1;c[0]--);
}
void mul(bignum_t a,const int b){
int i;
for (a[1]*=b,i=2;i<=a[0];i++){
a[i]*=b;
if (a[i-1]>=DEPTH)
a[i]+=a[i-1]/DEPTH,a[i-1]%=DEPTH;
剩余60页未读,继续阅读
资源评论
蓝风
- 粉丝: 3
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功