OI常用模板
oi/acm竞赛模板库
r2ywwg
Write the code, change the world.
展开
-
(6)归并排序
int a[M],t[M];//t是辅助数组 void merge(int *a,int l,int r) { if(l==r) return; int m=l+r>>1; merge(a,l,m); merge(a,m+1,r); int i=l,k=l,j=m+1; while(i<=m and j<=r) { if(a[i]<=a[j]) t[k++]=a[i++]; else t[k++]=a[j++]; } while(i<.原创 2020-11-27 16:19:56 · 172 阅读 · 0 评论 -
(5)高精度算法
Ⅰ.高精度加法 string add(string p,string q) { string ans; reverse(p.begin(),p.end()); reverse(q.begin(),q.end()); if(p.size()<q.size()) swap(p,q); while(q.size()<p.size()) q+='0'; int f=0,n; for(int i=0; i<p原创 2020-09-03 22:09:03 · 134 阅读 · 0 评论 -
(4)单源最短路径
题目描述 给定一个N个点,M 条有向边的带非负权图,请你计算从S出发,到每个点的距离。 数据保证你能从 S 出发到任意点。(1≤N≤100000,1≤M≤200000,S=1 ) 算法:dijkstra+堆优化+链式前向星 struct edge { int to,w,nxt; } e[M]; struct node { int id,dis; friend bool operator<(const node& a,const node& b)..原创 2020-09-03 22:06:53 · 297 阅读 · 1 评论 -
(3)快速读入
原理:getchar()的速度最快. 注意:本代码不适用于double型. template<class T> inline void qcin(T& x) { int f=1;//f是正负标记,默认为正 x=0; char c=getchar(); while(!isdigit(c)) { if(c eq '-') f=-1; c=getchar();//跳过空白 } wh原创 2020-09-03 22:04:17 · 114 阅读 · 0 评论 -
(2)矩阵快速幂
算法:矩阵乘法+快速幂改进 1. 声明矩阵结构体 struct matrix { int m,n;//记录行与列,以后会用到 long long mat[][];//实际矩阵,尽量开小 void clear() { m=n=0; memset(mat,0,sizeof mat); } } 2.矩阵乘法 matrix mul(const matrix& a,const matrix& b) { .原创 2020-09-03 22:01:54 · 143 阅读 · 0 评论 -
(1)快速幂
原理:将指数转化为二进制表示,指数不断右移,base不断倍增,如果这一位是1则ans乘以base,否则不乘。 e.g. 代码: template<class T> //模板化,方便代码重用 T qpow(T a,int b) { T ans=1,base=a; while(b) { if(b&1) { if(b&1) ans*=base; ...原创 2020-09-03 21:53:18 · 101 阅读 · 0 评论