模板
cqsh3vj2
这个作者很懒,什么都没留下…
展开
-
朱刘算法模板
/*最小树形图图模版-朱刘算法模版说明:点标号必须0-(N-1) 必须去除到自身的点(到自身的边的边权赋无限大)NV表示总点数,NE表示总边数*/#define M 109#define type intconst type inf=(1)<<30;struct Node{ int u , v; type cost;}E[M*M+5];int pre[M],ID[M]转载 2013-07-13 21:35:40 · 659 阅读 · 0 评论 -
快速幂取模
int quickpow(int m,int n,int k) { int b =1; while (n >0) { if (n &1) b = (b*m)%k; n = n >>1 ; m = (m*m)%k; } return b; }原创 2014-04-13 09:25:48 · 365 阅读 · 0 评论 -
矩阵快速幂求Fibonacci
const long long MOD=1e9+7;//c++对于long long 有优化, struct Matrix{ long long mat[2][2]; Matrix operator *(const Matrix &b)const { Matrix ret; for(int i = 0;i < 2;i++)原创 2014-06-10 11:03:16 · 558 阅读 · 0 评论 -
用getchar()快速输入
int input(){ char ch=' '; while(ch'9')ch=getchar(); int x=0; while(ch='0')x=x*10+ch-'0',ch=getchar(); return x;}原创 2014-07-21 21:23:36 · 507 阅读 · 0 评论 -
大型质因数分解(long long)
注意1.....#include#include#include#include#include#includeusing namespace std;//****************************************************************// Miller_Rabin 算法进行素数测试//速度快,而且可以判断 <2^63的数转载 2014-07-29 11:55:32 · 744 阅读 · 0 评论 -
hdu 5050 java大数进制转换
import java.io.*;import java.math.BigInteger;import java.util.StringTokenizer;class Scan { BufferedReader buffer; StringTokenizer tok; Scan() { buffer = new BufferedReader(ne原创 2014-09-28 11:01:50 · 897 阅读 · 0 评论 -
hdu 4873 ZCC Loves Intersection 概率推导 java大整数
首先考虑没两对线,由于所有线都平行于不同的坐标轴,所以这两对线原创 2014-07-24 20:00:21 · 441 阅读 · 0 评论 -
hdu 5047 java快速输入输出
import java.io.*;import java.math.BigInteger;import java.util.StringTokenizer;class Scan { BufferedReader buffer; StringTokenizer tok; Scan() { buffer = new BufferedReader(ne原创 2014-09-28 10:10:47 · 517 阅读 · 0 评论 -
素数打表与素数单个判断
bool primeVis[10100000]; //i是不是素数,从primeVis[2]开始有效int prime[1000000]; //prime[1]=2,prime[2]=3...int primeNum = 0; //N以内素数个数(1.2...primeNum)void init_prim(int N) { memset(primeVis, true, s原创 2014-09-29 15:13:56 · 614 阅读 · 0 评论 -
后缀数组模板(求最长公共子串,hdu1403)
#include #include #include #include #include using namespace std;const int N = 200010;int r[N], tx[N], ty[N], rs[N], ranks[N], sa[N], height[N], rmq[N][20]; //rs基数排序char s[N];bool cmp(int转载 2014-02-10 15:43:59 · 611 阅读 · 0 评论 -
用位运算快速求解全部组合数
这个函数用来求C(n, k),其中comb就是二进制形式表示的子集,例如000111表示由后三个元素构成的组合或子集,并且该迭代过程可生成字典序递增的组合,这一特性非常有用。转载 2014-04-13 09:28:58 · 774 阅读 · 0 评论 -
无向图的桥 双连通分量
/* *无向图的桥及边的双连通分量,Tarjan算法O(E) */#include #include using namespace std;#define MAXN 10000#define MAXM 1000000struct node { int v, w, pre; //id:边的编号(处理重边情况)} edge[MAXM];int pos[MAXN], n转载 2014-10-14 22:47:50 · 385 阅读 · 0 评论 -
求无向图的割点(重边不重边神马的无所谓)
#include#include#include#includeusing namespace std;#define N 103vector g[N];int n, low[N], dfn[N], f[N];bool vis[N];void dfs(int u, int depth, const int &root) { //root为连通图的树根 dfn[u] =转载 2014-10-14 22:36:48 · 734 阅读 · 0 评论 -
hdu 4578 线段树模板
lazy不为-1表示统一段为一个值#include#include#include#include#include#include#include#include#includeusing namespace std;#define ll __int64#define inf 0x3f3f3f3f#define maxNode 100010#define mod 10原创 2015-02-25 11:19:41 · 398 阅读 · 0 评论 -
优先队列stl在竞赛中的应用
一、定义定义主要有两种方式:方式一:把比较函数定义在结构中:struct Dian{ int x; bool operator < (const Dian &a) const { return x>a.x;//最小值优先 } };priority_queuepq; 方式二:定义比较结构,尤其适用于对同一结构有多种不同的优先原创 2015-03-02 21:47:54 · 512 阅读 · 0 评论 -
map在竞赛中的应用
一、定义map中的key值和value取值种类很多,但是key必须是可比较的,例如自定义的结构需要加上比较函数:struct Dian{ int x; int y; bool operator < (const struct Dian &a) const { if(x==a.x)return y>a.y; return x>a.x;//最小值优先 }}原创 2015-03-02 22:15:07 · 478 阅读 · 0 评论 -
最小费用最大流模板
const int N = 1010;//点const int M = 2 * 10010;//边const int inf = 1000000000;struct Node{//边,点f到点t,流量为c,费用为w int f, t, c, w;}e[M];int next1[M], point[N], dis[N], q[N], pre[N], ne;//ne为已添加的边数,next转载 2014-02-16 15:01:36 · 567 阅读 · 0 评论 -
最大公约数与最小公倍数
int LCM(int a,int b)//最小公倍数{ int x=a,y=b; int r=x%y; while(r>0) { x=y; y=r; r=x%y; } return a*b/y;}int GCD(int x,int y) //求最大公约数{ if(!x||!y) re转载 2013-07-13 19:45:34 · 401 阅读 · 0 评论 -
前缀数组Trie刘汝佳模板
//sigma_size=26 maxnode为节点最大数:字符串数*每个字符串最大长度+xstruct trie{ int ch[maxnode][sigma_size];//ch[a][3]=c表示第a个节点有一个子节点为'd'并且节点序列号为c int val[maxnode];//存各个字符串权值,题目不涉及权值时,可以存1 int sz; int idx(char c) {原创 2013-08-31 11:12:10 · 1295 阅读 · 0 评论 -
ACM 三角形模板
#include struct point{double x,y;}; struct line{point a,b;}; double distance(point p1,point p2){ return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y)); } point intersection(line u,line转载 2013-10-05 15:37:26 · 563 阅读 · 0 评论 -
高精度幂取模
/* * FZU1759.cpp * * Created on: 2011-10-11 * Author: bjfuwangzhu * 格式为: * cha^chb%c * cha、chb均为字符串 */#include#include#include#include#define LL long long#define nnum 1000005#defi转载 2013-10-05 15:34:35 · 581 阅读 · 0 评论 -
sort与qsort使用细则
/*qsort与sort调用细则*/#include#include#include//qsort//普通数组 a[1000]; int comp(const void *a,const void *b) { return *(int *)a - *(int *)b;//(int *)表示把(const coid * a)强制准换成int型指针 外边的*是取内容 }原创 2013-10-20 22:21:10 · 1125 阅读 · 0 评论 -
对整数的二分查找
//二分查找--在l-r范围内查找值v//返回下标,失败返回-1//假设a数组已经按照从小到大排序int bs(int a[],int left,int right,int v){ int mid; while(left<right) { mid=(left+right)>>1; if(a[mid]==v)return mid; if(a[mid]<v)left=mid原创 2013-11-12 18:02:58 · 569 阅读 · 0 评论 -
并查集
//要int parent【】,并初始化为-1//注意同一个等价类之间的元素再次merge会傻逼int root(int p){ if(parent[p]==-1) return p; else return parent[p]=root(parent[p]);}void merge(int a,int b){ a=root(a); b=root(b); parent[a]=原创 2013-11-12 23:36:52 · 505 阅读 · 0 评论 -
位图法
#define SHIFT 5 #define MASK 0x1F#define DIGITS 32int map[31500]={0};//6位数31250+ 7位数312500+ 8位数3125000+(12.5MB)void map_set(int n) //将逻辑位置为n的二进制位置为1 { map[n>>SHIFT] |=原创 2013-11-30 10:48:29 · 431 阅读 · 0 评论 -
判断日期的小模板
int leap_year( int year ) // 判断闰年或平年{ return ( (year%4==0 && year%100!=0) || year%400==0 ) ? 1 : 0;}int year_days(int year) // 计算一整年的天数{ return leap_year( year ) ? 366 : 365;}int days( int ye原创 2014-01-03 10:17:39 · 400 阅读 · 0 评论 -
树状数组
1.改点(+/-)求区间void add(int x,int v){ for(;x<=n;x+=x&(-x)) C[x]+=v;}void sub(int x,int v){ for(;x<=n;x+=x&(-x)) C[x]-=v;}int getsum(int x)//求1-x的和{ int sum=0; for(;x>0;x-=x&(-x)) sum原创 2013-11-23 21:46:46 · 515 阅读 · 0 评论 -
最大流dinic模板
const int maxnode = 1000 + 5;const int maxedge = 1000 + 5;const int oo = 1000000000;int node, src, dest, nedge;int head[maxnode], point[maxedge], next1[maxedge], flow[maxedge], capa[maxedge];//poi转载 2014-02-13 21:58:26 · 606 阅读 · 0 评论 -
字符串hash
最接近XXX的素数:100:971000:99710000:9973100000:999911000000:999983// BKDR Hash Functionunsigned int BKDRHash(char *str){ unsigned int seed = 131; // 31 131 1313 13131 131313 etc.. unsi原创 2014-03-17 21:37:23 · 491 阅读 · 0 评论 -
spfa模板
#include #include #include #include #include #include using namespace std;const int inf =0x7ffffff;const int maxn=300001;//点数struct edge{ int from,to,w,next;}e[1000001];//边数int head[ma转载 2014-05-06 08:36:16 · 394 阅读 · 0 评论 -
tarjan 求强连通分量模板
#include #include #include #include #include #include #include using namespace std;const int inf =0x3ffffff;const int maxn=300001;//点数struct edge{ int from,to,w,next;}e[1000001];//边数s原创 2014-05-06 11:04:08 · 479 阅读 · 0 评论 -
求逆元模板
一、正常求逆元(扩栈欧几里得)//a对b求逆元ll exgcd(ll a,ll b,ll &x,ll &y){ ll t,gcd; if(b==0) { x=1,y=0; return a; } gcd=exgcd(b,a%b,x,y); t=x,x=y,y=t-a/b*y; return gcd;}原创 2015-03-04 09:30:02 · 537 阅读 · 0 评论