模板
文章平均质量分 57
overload1997
努力 努力 再努力
展开
-
扩展欧几里得模板
long long exgcd(long long a, long long b, long long &x, long long &y){//x为最后的乘法逆元if (a == 0){x = 0;y = 1;return b;}else{long long tx, ty;long long d = exgcd(b%a, a, tx, ty);x = ty -原创 2016-07-22 16:39:22 · 235 阅读 · 0 评论 -
大素数判断和素因子分解(miller-rabin,Pollard_rho算法)
转载自:http://www.cnblogs.com/kuangbin/archive/2012/08/19/2646396.html传说中的随机算法。效率极高。可以对一个2^63的素数进行判断。可以分解比较大的数的因子。素数判定的时间是O(log(n))Pollard_rho算法的时间复杂度是O(n^1/4)--->用于求一个大数的其中一个质因子#includ转载 2017-08-04 22:36:17 · 391 阅读 · 0 评论 -
字符串hash模板
const int seed = 31;ull h[maxn];ull base[maxn];ull string_hash(int l, int r){ return h[r] - h[l-1]*base[r-l+1];}void init(){ for(int i = 1; i <= len; ++i) base[i] = base[i-1]*seed; h原创 2017-08-05 16:14:52 · 255 阅读 · 0 评论 -
SW算法求全局最小割
//O(n^3)实现#include using namespace std;#define sfi(a) scanf("%d",&a)#define sfd(a) scanf("%lf",&a)#define sfl(a) scanf("%lld",&a)#define sfs(a) scanf("%s",a)#define rep(i,a,b) for(int i=int(原创 2017-08-07 14:12:26 · 575 阅读 · 0 评论 -
点双联通分量模板
#include #define MAXN 10005using namespace std;struct Tarjan{struct edge{int u,v;edge(int uu=0,int vv=0):u(uu),v(vv){}bool operator ==(const edge &p)const{return (u==原创 2017-08-07 14:23:24 · 295 阅读 · 0 评论 -
边双连通分量模板
#include #define MAXN 10005using namespace std;struct Tarjan{ struct edge { int u,v; edge(int uu=0,int vv=0):u(uu),v(vv){} }; int n; //µãµÄ¸öÊý vector e[MAXN]; //ͼ int DFN[MAXN原创 2017-08-07 14:44:58 · 487 阅读 · 0 评论 -
高斯消元模板
#includeusing namespace std;#define eps 1e-9const int MAXN=220;const int N=3;double a[MAXN][MAXN],x[MAXN];//方程的左边的矩阵和等式右边的值,求解之后x存的就是结果int equ,var;//方程数和未知数个数/**返回0表示无解,1表示有解*/int Gauss()//高转载 2017-08-25 00:05:53 · 250 阅读 · 0 评论 -
后缀数组模板
来源:http://blog.csdn.net/yxuanwkeith/article/details/50636898。详情看上面,下面只写上我需要的部分。Str :需要处理的字符串(长度为Len) Suffix[i] :Str下标为i ~ Len的连续子串(即后缀) Rank[i] : Suffix[i]在所有后缀中的排名 SA[i] : 满足Suffix[SA[1]]转载 2017-09-15 15:56:04 · 289 阅读 · 0 评论 -
51nod1228 序列求和 (伯努利数)
1228 序列求和题目来源: HackerRank基准时间限制:3 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注T(n) = n^k,S(n) = T(1) + T(2) + ...... T(n)。给出n和k,求S(n)。例如k = 2,n = 5,S(n) = 1^2 + 2^2 +原创 2017-10-05 15:48:47 · 430 阅读 · 0 评论 -
倍增LCA模板
const int M = 20;struct node{ int v, value, next;}p[maxn << 1];int len, head[maxn], dis[maxn], depth[maxn], n, m, father[maxn][25];void addedge(int u, int v, int value){ p[len].v = v; p[len].va原创 2017-06-03 16:42:25 · 211 阅读 · 0 评论 -
最大团模板
int N=60;//1~n的节点bool G[N][N];//邻接矩阵int n,Max[N],Alt[N][N],ans;bool DFS(int cur,int tot){ if(!cur){ if(tot>ans){ans=tot;return 1;} return 0; } for(int i=1;i<=cur;i++){原创 2017-07-20 12:00:45 · 199 阅读 · 0 评论 -
【模板】斯坦纳树
又是图论里的一个可怕的数据结构。。【斯坦纳树的定义】给定个无向图和图上的一些点组成的点集,那么能使这些点集连通的该图的子树就是该图对于该点集的一颗斯坦纳树。那么最小斯坦纳树就是所有斯坦纳树中边权值和最小的一颗。其实就是最小生成树问题的一个衍伸,当这个点集包含图中所有的点的时候那么问题便转换为最小生成树。【斯坦纳树的求法】用dp来求就行了。具体的dp写法也是参考了这个博客才知原创 2017-03-16 20:37:13 · 1028 阅读 · 0 评论 -
莫比乌斯反演模板
void getmu(){ int tot=0; mu[1]=1; for(int i=2;imaxn;i++) { if(!vis[i]) { prime[++tot]=i; mu[i]=-1; } for(int j=1;prime[j]*imaxn;j++) { vis[prime[j]*i]=1; if(i%prime[j]==0)原创 2016-05-07 21:06:48 · 507 阅读 · 0 评论 -
2016多校联赛4E (hdu5768) Lucky7
Lucky7Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 318 Accepted Submission(s): 127Problem DescriptionWhen ?? was born, sev原创 2016-07-28 22:22:12 · 903 阅读 · 8 评论 -
求大组合数取模的模板(lucas定理)
LL fac[N];void init(){ int i; fac[0] =1; for(i =1; i fac[i] = fac[i-1]*i%p;}LL pow(LL a, LL b){ LL tmp = a % p, ans =1; while(b) { if(b &1)原创 2016-08-05 17:14:09 · 543 阅读 · 0 评论 -
O(n)欧拉函数+素数筛选
用最小的素因子筛掉每个数 int prime[N],phi[N],cnt;// prime:记录质数,phi记录欧拉函数 int Min_factor[N];// i的最小素因子 bool vis[N]; void Init() { cnt=0; phi[1]=1; int x; for(int i=2;i<N;i++)转载 2016-10-01 17:42:32 · 336 阅读 · 0 评论 -
POJ2135 Farm Tour(最小费用最大流裸题)
Source Code#include#include#include#include#include#includeusing namespace std;const int MAXN = 100000;const int MAXM = 100000;const int INF = 1999999999;struct Edge{ int to,next,cap,flow原创 2016-10-03 23:52:59 · 852 阅读 · 0 评论 -
FFT模板
const double pi=acos(-1);struct cplx{ double r,i; cplx(double r=0,double i=0):r(r),i(i){} cplx operator +(const cplx &a)const {return cplx(r+a.r,i+a.i);} cplx operator -(const cpl原创 2016-12-03 18:16:29 · 277 阅读 · 0 评论 -
浮点二分模板
while (Max - Min >= esp) { double r1 = (Min + Max) / 2.0; double tmp = get_ans(l, r0, r1); //这里是相关的计算函数 if (tmp<val) Min = r1 + esp; else { Max = r1 - esp; ans = Max;原创 2016-11-22 14:00:50 · 270 阅读 · 0 评论 -
Codeforces Round #406 (Div. 2) ABCDE
题目链接大都是经典的套路题,下面我没做太多详细的叙述,不懂的留言就可以。A:暴力跑一遍就可以了#includeusing namespace std;const int maxn=1e4+10;int neg[maxn],pos[maxn];int main(){ int n,k,t; while(cin>>n>>k) { bool a原创 2017-04-09 22:36:30 · 193 阅读 · 0 评论 -
c++的输入优化
入队快1年了,看过各种各样的博客,经常看到有人在输入的时候弄得很麻烦,今天我算是弄懂了原来这是优化,getchar的输入速度比scanf要快所以有大量输入数据的时候,想要节省时间,优化输入是个不错的做法。下面给模板const int read() { char ch = getchar(); while (ch'9') ch = getchar(); i原创 2016-08-15 13:11:54 · 530 阅读 · 0 评论