没有合适的资源?快使用搜索试试~ 我知道了~
首页上海交大ACM模板 (文件有问题 请注意下载 似乎foxit reader1.3可以打开,版本高的阅读器反而打不开)
资源详情
资源评论
资源推荐

Standard Code Library
Hao Yuan
Department of Computer Science and Engineering
Shanghai Jiaotong University
October 23, 2003

Contents
1 Algorithms and Datastructures 3
1.1 High Precision in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 High Precision in C Plus Plus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 High Precision Floating-p oint Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4 Fraction Class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5 Binary Heap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.6 Winner Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.7 Digital Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.8 Segment Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.9 Segment Tree in IOI’2001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.10 Union-Find Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.11 Quick Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.12 Merge Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.13 Radix Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.14 Select K
th
Smallest Element . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.15 KMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.16 Suffix Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2 Graph Theory and Network Algorithms 14
2.1 SSSP — Dijkstra + Binary Heap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2 SSSP — Bellman Ford + Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3 MST — Kruskal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4 Minimum Directed Spanning Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.5 Maximum Matching on Bipartite Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.6 Maximum Cost Perfect Matching on Bipartite Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.7 Maximum Matching on General Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.8 Maximum Flow — Ford Fulkson in Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.9 Maximum Flow — Ford Fulkson in Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.10 Minimum Cost Maximum Flow in Matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.11 Minimum Cost Maximum Flow in Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.12 Recognizing Chordal Graph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.13 DFS — Bridge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.14 DFS — Cutvertex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.15 DFS — Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.16 DFS — Topological Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.17 Strongly Connected Component . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3 Number Theory 25
3.1 Greatest Common Divisor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2 Chinese Remainder Theorem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.3 Prime Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.4 φ Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.5 Discrete Logarithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.6 Square Roots in Z
p
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4 Algebraic Algorithms 29
4.1 Linear Equations in Z
2
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
4.2 Linear Equations in Z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.3 Linear Equations in Q . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.4 Linear Equations in R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.5 Roots of Polynomial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1

4.6 Roots of Cubic and Quartic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.7 Fast Fourier Transform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.8 FFT - Polynomial Multiplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.9 FFT - Convolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.10 FFT - Reverse Bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.11 Linear Programming - Primal Simplex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5 Computational Geometry 38
5.1 Basic Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2 Extended Op erations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.3 Convex Hull . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.4 Point Set Diameter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.5 Closest Pair . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.6 Circles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.7 Largest Empty Convex Polygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.8 Triangle Centers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.9 Polyhedron Volume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.10 Planar Graph Contour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.11 Rectangles Area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.12 Rectangles Perimeter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.13 Smallest Enclosing Circle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.14 Smallest Enclosing Ball . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6 Classic Problems 57
6.1 Bernoulli Number Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.2 Baltic OI’99 Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.3 Bead Coloring — P´olya Theory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.4 Binary Stirling Number . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.5 Box Surface Distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.6 Calculate Expression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
6.7 Cartesian Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.8 Catalan Number Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.9 Coloring Regular Polygon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.10 Counting Inverse Pairs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.11 Counting Trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
6.12 Eight Puzzle Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
6.13 Extended Honai Tower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
6.14 High Precision Square Root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
6.15 Largest Empty Rectangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.16 Last Non-Zero Digit of N! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.17 Least Common Ancestor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
6.18 Longest Common Substring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
6.19 Longest Non Descending Sub Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
6.20 Join and Disjoin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
6.21 Magic Square . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.22 Optimal Binary Search Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.23 Pack Rectangles — Cut Rectangles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
6.24 Pack Rectangles — O(N
2
) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.25 Parliament . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.26 π Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
6.27 Plant Trees — Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.28 Plant Trees — Segment Tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
6.29 Range Maximum Query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
6.30 Travelling Salesman Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
6.31 Tree Heights . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
6.32 Minimum Cyclic Presentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
6.33 Maximum Clique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
6.34 Maximal Non-Forbidden Submatrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.35 Maximum Two Chain Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.36 N Queens Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.37 de Bruijn Sequence Generator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.38 ZOJ 1482 Partition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
2

while ( c . s [ i ] ) { c . s [ i +1]=c . s [ i ] / 1 0 ; c . s [ i ]%=10; i ++; }
while ( i >1 && ! c . s [ i ] ) i −−; c . l e n=i ;
return c ;
}
HP HP : : operator+(const HP &b)
{
in t i ; HP c ; c . s [ 1 ] = 0 ;
fo r ( i =1; i<=l e n | | i<=b . l e n | | c . s [ i ] ; i ++) {
i f ( i<=l e n ) c . s [ i ]+=s [ i ] ;
i f ( i<=b . l e n ) c . s [ i ]+=b . s [ i ] ;
c . s [ i +1]=c . s [ i ] / 1 0 ; c . s [ i ]%=10;
}
c . l e n=i −1; i f ( c . l e n ==0 ) c . l e n =1;
return c ;
}
HP HP : : operator−(const HP &b)
{
in t i , j ; HP c ;
fo r ( i =1, j =0; i<=le n ; i ++) {
c . s [ i ]= s [ i ]−j ; i f ( i<=b . l e n ) c . s [ i ]−=b . s [ i ] ;
i f ( c . s [ i ] < 0){ j = 1 ; c . s [ i ]+=10 ; } el s e j =0;
}
c . l e n=l e n ; while ( c . le n >1 && ! c . s [ c . l e n ] ) c . len −−;
return c ;
}
in t HP : : Compare ( const HP &y )
{
i f ( len >y . l e n ) return 1 ;
i f ( len <y . l e n ) return −1;
in t i=l e n ;
while ( ( i >1)&&(s [ i ]==y . s [ i ] ) ) i −−;
return s [ i ]−y . s [ i ] ;
}
HP HP : : operator /( const HP &b )
{
in t i , j ; HP d ( 0 ) , c ;
fo r ( i=l e n ; i >0; i −−) {
i f ( ! ( d . l e n ==1 && d . s [1]==0 ))
{ fo r ( j=d . l e n ; j >0; j −−) d . s [ j +1]=d . s [ j ]; ++d . l e n ; }
d . s [ 1 ]= s [ i ] ; c . s [ i ]= 0 ;
while ( ( j=d . Compare( b)) >=0 )
{ d=d−b ; c . s [ i ]++; i f ( j ==0) break ; }
}
c . l e n=l e n ; while ( ( c . le n >1)&&(c . s [ c . l e n ]==0)) c . len −−;
return c ;
}
HP HP : : operator%(const HP &b)
{
in t i , j ; HP d ( 0 ) ;
fo r ( i=l e n ; i >0; i −−) {
i f ( ! ( d . l e n ==1 && d . s [1]==0 ))
{ fo r ( j=d . l e n ; j >0; j −−) d . s [ j +1]=d . s [ j ]; ++d . l e n ; }
d . s [ 1 ]= s [ i ] ;
while ( ( j=d . Compare( b)) > =0 ){ d=d−b ; i f ( j ==0) break ; }
}
return d ;
}
5

Chapter 1
Algorithms and Datastructures
1.1 High Precision in C
#define maxlen 10 0 0
str uct HP { int len , s [ maxlen ] ; };
void PrintHP (HP x ) { for ( i nt i=x . l e n ; i >=1;i −−) cout<<x . s [ i ] ; }
void Str2HP ( const char ∗s ,HP &x )
{
x . l e n=s t r l e n ( s ) ;
fo r ( int i =1; i<=x . l e n ; i ++) x . s [ i ]= s [ x . len −i ]− ’ 0 ’ ;
}
void Int2HP ( i n t in t e ,HP &x )
{
i f ( i n t e ==0) { x . l e n =1; x . s [ 1 ] = 0 ; return ; };
fo r ( x . l e n =0; i nt e > 0 ; ) { x . s[++x . l e n ]= i n t e %10; i n t e /=1 0 ;};
}
void Multi ( const HP a , const HP b ,HP &c )
{
in t i , j ; c . l e n=a . l e n+b . l e n ;
fo r ( i =1; i<=c . l e n ; i ++) c . s [ i ]=0;
fo r ( i =1; i<=a . l e n ; i ++) f or ( j =1; j<=b . l e n ; j ++) c . s [ i+j −1]+=a . s [ i ] ∗b . s [ j ] ;
fo r ( i =1; i <c . l e n ; i ++) { c . s [ i +1]+=c . s [ i ] / 1 0 ; c . s [ i ]%=10; }
while ( c . s [ i ] ) { c . s [ i +1]=c . s [ i ] / 1 0 ; c . s [ i ]%=10; i ++; }
while ( i >1 && ! c . s [ i ] ) i −−; c . l e n=i ;
}
void Plus ( const HP a , const HP b ,HP & c )
{
in t i ; c . s [ 1 ] = 0 ;
fo r ( i =1; i<=a . l e n | | i<=b . l e n | | c . s [ i ] ; i ++) {
i f ( i<=a . l e n ) c . s [ i ]+=a . s [ i ] ;
i f ( i<=b . l e n ) c . s [ i ]+=b . s [ i ] ;
c . s [ i +1]=c . s [ i ] / 1 0 ; c . s [ i ]%=10;
}
c . l e n=i −1; i f ( c . l e n ==0 ) c . l e n =1;
}
void Su b tra c t ( const HP a , const HP b ,HP &c )
{
fo r ( int i =1, j =0; i<=a . l e n ; i ++) {
c . s [ i ]=a . s [ i ]−j ; i f ( i<=b . l e n ) c . s [ i ]−=b . s [ i ] ;
i f ( c . s [ i ] < 0){ j = 1 ; c . s [ i ]+=10 ; } el s e j =0;
}
3
剩余86页未读,继续阅读













安全验证
文档复制为VIP权益,开通VIP直接复制

评论5