Code Library
Total Page:16
File Type:pdf, Size:1020Kb
Code Library Himemiya Nanao @ Perfect Freeze September 13, 2013 Contents 1 Data Structure 1 1.1 atlantis .......................................... 1 1.2 binary indexed tree ................................... 3 1.3 COT ............................................ 4 1.4 hose ........................................... 7 1.5 Leist tree ........................................ 8 1.6 Network ......................................... 10 1.7 OTOCI ........................................... 16 1.8 picture .......................................... 19 1.9 Size Blanced Tree .................................... 22 1.10 sparse table - rectangle ................................. 27 1.11 sparse table - square ................................... 28 1.12 sparse table ....................................... 29 1.13 treap ........................................... 29 2 Geometry 32 2.1 3D ............................................. 32 2.2 3DCH ........................................... 36 2.3 circle's area ....................................... 40 2.4 circle ........................................... 44 2.5 closest point pair .................................... 45 2.6 half-plane intersection ................................. 49 2.7 intersection of circle and poly .............................. 52 2.8 k-d tree .......................................... 53 2.9 Manhattan MST ..................................... 56 2.10 rotating caliper ...................................... 60 2.11 shit ............................................ 63 2.12 other ........................................... 66 2.12.1 Pick's theorem ................................... 66 2.12.2 Triangle ....................................... 66 2.12.3 Ellipse ........................................ 67 2.12.4 about double .................................... 68 2.12.5 trigonometric functions .............................. 69 2.12.6 round ........................................ 69 2.12.7 rotation matrix ................................... 69 3 Geometry/tmp 70 3.1 test ............................................ 70 3.2 tmp ............................................ 98 4 Graph 125 4.1 2SAT ........................................... 125 4.2 Articulation ........................................ 127 4.3 Augmenting Path Algorithm for Maximum Cardinality Bipartite Matching . 128 4.4 Biconnected Component - Edge ............................ 128 4.5 Biconnected Component ................................ 131 4.6 Blossom algorithm .................................... 133 4.7 Bridge .......................................... 135 4.8 Chu–Liu:Edmonds' Algorithm .............................. 136 4.9 Count MST ........................................ 137 1 4.10 Covering problems .................................... 140 4.11 difference constraints .................................. 142 4.12 Dinitz's algorithm .................................... 142 4.13 Flow network ....................................... 144 4.14 Hamiltonian circuit ................................... 147 4.15 Hopcro-Karp algorithm ................................ 149 4.16 Improved Shortest Augmenting Path Algorithm . 150 4.17 k Shortest Path ...................................... 152 4.18 Kariv-Hakimi Algorithm ................................. 155 4.19 Kuhn-Munkres algorithm ................................ 157 4.20 LCA - DA ......................................... 160 4.21 LCA - tarjan - minmax .................................. 161 4.22 Minimum Ratio Spanning Tree ............................. 163 4.23 Minimum Steiner Tree .................................. 165 4.24 Minimum-cost flow problem .............................. 168 4.25 Second-best MST .................................... 169 4.26 Spanning tree ...................................... 171 4.27 Stable Marriage ..................................... 172 4.28 Stoer-Wagner Algorithm ................................. 173 4.29 Strongly Connected Component ............................ 174 4.30 ZKW's Minimum-cost flow ................................ 175 5 Math 178 5.1 cantor .......................................... 178 5.2 discrete logarithms - BSGS ............................... 179 5.3 extended euclidean algorithm ............................. 181 5.4 Fast Fourier Transform ................................. 181 5.5 Gaussian elimination .................................. 183 5.6 Integration ........................................ 186 5.7 inverse element ..................................... 189 5.8 Linear programming ................................... 190 5.9 Lucas' theorem(2) .................................... 196 5.10 Lucas' theorem ..................................... 198 5.11 matrix .......................................... 199 5.12 Pell's equation ...................................... 201 5.13 Pollard's rho algorithm ................................. 202 5.14 Combinatorics ...................................... 205 5.14.1 Subfactorial .................................... 205 5.14.2 Ménage numbers .................................. 205 5.14.3 Multiset ....................................... 205 5.14.4 Distributing Balls into Boxes ............................ 206 5.14.5 Combinatorial Game Theory . 206 5.14.6 Catalan number .................................. 208 5.14.7 Stirling number ................................... 209 5.14.8 Delannoy number ................................. 209 5.14.9 Schröder number ................................. 209 5.14.10 Bell number .................................... 210 5.14.11 Eulerian number .................................. 210 5.14.12 Motzkin number .................................. 210 5.14.13 Narayana number ................................. 211 5.15 Number theory ...................................... 211 2 5.15.1 Divisor Fuction ................................... 211 5.15.2 Reduced Residue System ............................. 211 5.15.3 Prime ........................................ 213 5.15.4 Euler–Mascheroni constant ............................ 214 5.15.5 Fibonacci ...................................... 214 5.16 System of linear congruences .............................. 214 6 String 215 6.1 Aho-Corasick Algorithm ................................. 215 6.2 Gusfield's Z Algorithm .................................. 218 6.3 Manacher's Algorithm .................................. 219 6.4 Morris-Pratt Algorithm .................................. 220 6.5 smallest representation ................................. 221 6.6 Suffix Array - DC3 Algorithm ............................... 221 6.7 Suffix Array - Prefix-doubling Algorithm . 224 6.8 Suffix Automaton .................................... 225 7 Dynamic Programming 226 7.1 knapsack problem .................................... 226 7.2 LCIS ............................................ 226 7.3 LCS ............................................ 228 7.4 sequence partitioning .................................. 229 8 Search 230 8.1 dlx ............................................ 230 8.2 dlx - exact cover ..................................... 230 8.3 dlx - repeat cover ..................................... 235 8.4 fibonacci knapsack ................................... 237 9 Others 239 9.1 .vimrc ........................................... 239 9.2 bigint ........................................... 239 9.3 Binary Search ...................................... 243 9.4 java ............................................ 246 9.5 others ........................................... 249 3 1 Data Structure 1.1 atlantis 1 #include<cstdio> 2 #include<algorithm> 3 #include<map> 4 5 #define MAXX 111 6 #define inf 333 7 #define MAX inf*5 8 9 int mid[MAX],cnt[MAX]; 10 double len[MAX]; 11 12 int n,i,cas; 13 double x1,x2,y1,y2; 14 double ans; 15 std::map<double,int>map; 16 std::map<double,int>::iterator it; 17 double rmap[inf]; 18 19 void make(int id,int l,int r) 20 { 21 mid[id]=(l+r)>>1; 22 if(l!=r) 23 { 24 make(id<<1,l,mid[id]); 25 make(id<<1|1,mid[id]+1,r); 26 } 27 } 28 29 void update(int id,int ll,int rr,int l,int r,int val) 30 { 31 if(ll==l && rr==r) 32 { 33 cnt[id]+=val; 34 if(cnt[id]) 35 len[id]=rmap[r]−rmap[l−1]; 36 else 37 if(l!=r) 38 len[id]=len[id<<1]+len[id<<1|1]; 39 else 40 len[id]=0; 41 return; 42 } 43 if(mid[id]>=r) 44 update(id<<1,ll,mid[id],l,r,val); 45 else 46 if(mid[id]<l) 47 update(id<<1|1,mid[id]+1,rr,l,r,val); 48 else 1 49 { 50 update(id<<1,ll,mid[id],l,mid[id],val); 51 update(id<<1|1,mid[id]+1,rr,mid[id]+1,r,val); 52 } 53 if(!cnt[id]) 54 len[id]=len[id<<1]+len[id<<1|1]; 55 } 56 57 struct node 58 { 59 double l,r,h; 60 char f; 61 inline bool operator<(const node &a)const 62 { 63 return h<a.h; 64 } 65 inline void print() 66 { 67 printf("%lf␣%lf␣%lf␣%d\n",l,r,h,f); 68 } 69 }ln[inf]; 70 71 int main() 72 { 73 make(1,1,inf); 74 while(scanf("%d",&n),n) 75 { 76 n<<=1; 77 map.clear(); 78 for(i=0;i<n;++i) 79 { 80 scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2); 81 if(x1>x2) 82 std::swap(x1,x2); 83 if(y1>y2) 84 std::swap(y1,y2); 85 ln[i].l=x1; 86 ln[i].r=x2; 87 ln[i].h=y1; 88 ln[i].f=1; 89 ln[++i].l=x1; 90 ln[i].r=x2; 91 ln[i].h=y2; 92 ln[i].f=−1; 93 map[x1]=1; 94 map[x2]=1; 95 } 96 i=1; 97 for(it=map.begin();it!=map.end();++it,++i) 98 { 99 it−>second=i; 2 100 rmap[i]=it−>first; 101 } 102 std::sort(ln,ln+n); 103 ans=0; 104 update(1,1,inf,map[ln[0].l]+1,map[ln[0].r],ln[0].f); 105 for(i=1;i<n;++i) 106 { 107 ans+=len[1]*(ln[i].h−ln[i−1].h); 108 update(1,1,inf,map[ln[i].l]+1,map[ln[i].r],ln[i].f); 109 } 110 printf("Test␣case␣#%d\nTotal␣explored␣area:␣%.2lf\n\n",++ cas,ans); 111 } 112