- 博客(90)
- 收藏
- 关注
原创 整数三分模版
ll sanfen(int l,int r){ ll ans=1e18; while(l<r){ int m1=(2*l+r)/3; int m2=(2*r+l+2)/3; if(subans(m1)<subans(m2)){ //求最小值,最大值ans式子和符号都要改 ans=min(ans,subans(m1)); r=m2-1; }else{ ans=min
2020-08-04 22:54:06
764
原创 Prim 算法模版
例题CF 1245D复杂度O(n2)O(n^2)O(n2) , n为节点数int k[maxn];int c[maxn];int x[maxn],y[maxn];int dt[maxn]; //dt[i]表示节点i到起点的距离int n;bool vis[maxn];int fm[maxn];ll ct(int i,int j){ return 1LL*(k[i]+k[j])*(abs(x[i]-x[j])+abs(y[i]-y[j]));}void Prim(int s){
2020-07-12 15:41:51
305
原创 笛卡尔树模版
复杂度O(n)O(n)O(n)原理在这对于节点(k(序号),w(权重)):k 符合二叉搜索树性质,w符合堆性质例题在这int n,ind=0;int sta[maxn],lson[maxn],rson[maxn],w[maxn];void dkertree(){ for(int i=1;i<=n;++i){ int tmp=ind; while(ind&&w[sta[tmp]]>w[i]){ --tmp; } if(tmp) rson[sta
2020-06-11 20:13:26
223
原创 2-SAT模版
复杂度O(n+m)O(n+m)O(n+m)原理证明 侵删爆搜模版在这里 侵删const int maxn = 2e6+1000;vector g[maxn];int low[maxn],dfn[maxn];int scc[maxn];int sta[maxn];bool vis[maxn];int num=0,ind=0;int cnt=0;int n,p,M,m;int tol;int fid(int x){return p+x;}int yid(int x){retur
2020-06-08 10:59:01
189
原创 targan模版
强连通缩点,复杂度O(N+E)O(N+E)O(N+E) 。 ps:N个点,E条边vector<int> g[maxn];int dfn[maxn],vis[maxn],low[maxn]; //vis 是否在栈中int cnt=0;int stk[maxn]; int ind=0,stp=0;int ans[maxn]; //一个强连通块编号,按题目要求自行修改 void tarjan(int u){ dfn[u]=low[u]=++stp; vis[u]=1; //最好
2020-05-24 20:38:09
283
原创 最大团模版
复杂度O(3m3)复杂度O(3^{\frac{m}{3}})复杂度O(33m)int n,m; //m为节点个数int mpp[50][50];int st[50][50];int mans=0;int dp[50]; //dp[i] 表示为i到m的节点中最大团的节点数map<string,int> mp;void dfs(int stp,int num){ if(...
2020-02-29 21:01:56
197
原创 N次剩余模版
公式:xn≡amod px^n \equiv a \mod pxn≡amodplong long quick_mod(long long a,long long b,long long mod){ long long ans=1; while(b){ if(b&1)ans=ans*a%mod; b>>=1; a...
2020-01-15 14:34:07
326
原创 线段树模版
先贴一个内存较大的模版吧int rtl[maxn<<2],rtr[maxn<<2],rtv[maxn<<2],lazy[maxn<<2];long long rtn[maxn<<2],lazy1[maxn<<2];void push_down(int p){ if(lazy[p]>1||lazy1[p]){ ...
2020-01-01 06:30:32
205
原创 Cayley公式
Cayley公式内容一个含有n个节点的完全图的生成树的个数为nn−2n^{n-2}nn−2,即带有标号的n个节点的无根树的个数为nn−2n^{n-2}nn−2证明思路Cayley公式可以根据Prüfer编码来证明。Prüfer编码给定带有标号的无根树,找出标号最小的叶子节点,将该点删掉同时写下与该点相邻节点标号,重复上述步骤直到剩下2个节点。最终写下来的标号序列为Prüfer编码。小...
2019-12-26 07:28:29
2642
原创 z_function模版
z[i]表示以i位置的子串前缀和原字符串前缀最大匹配个数void z_function(){ int l=0,r=0; for(int i=1;i<n;++i){ if(i<=r) z[i]=min(r-i+1,z[i-l]); while(i+z[i]<n&&s[i+z[i]]==s[z[i]]) ++z[i]; if(z[i]+i-1&...
2019-12-07 02:22:11
506
原创 高斯求线性同余方程解模版
int gauss(){ int equ=12,var=12; int i,j,k; int max_r,col; ll ta,tb,lcm; ll tmp; for(k=0,col=0;k<equ && col<var;++k,++col) { max_r=k; for(i=k+...
2019-10-27 03:19:46
424
原创 格雷码构造模版
int cnt=0; ans[cnt]=0; for(int j=0;j<i;++j){ for(int k=cnt;k>=0;--k){ ans[++cnt]=ans[k]^tmp[j]; } } for(int j=0;j<=cnt;++j){ cout<<ans[j]<<" "; } cout<<endl;...
2019-10-09 01:17:40
266
原创 主席树部分模版
const int maxn=1e5+100;int tol=0,rt[maxn*60],lson[maxn*60],rson[maxn*60],lz[maxn*60];ll v[maxn*60];void push_up(int x){ v[x]=max(v[lson[x]],v[rson[x]]);}void push_down(int x,int len){ if(lz[...
2018-12-13 19:39:26
210
原创 最大流Dinic
复杂度O(V2E)O(V^2E)O(V2E)const int maxn=2e3+100;const int INF=0x3f3f3f3f;ll n,m,tol,head[maxn];struct edge{ ll to,next,w;}a[maxn*10];void init(){ memset(head,-1,sizeof head); tol=1;}inl...
2018-12-06 19:46:06
302
原创 字符串hash 模版
const int P=131;const ll mod=1e7+7;char s[maxn],t[maxn];ll pre[maxn],pmod[maxn];void perwork(int len){ pmod[0]=1; pre[0]=0; for(int i=1;i<=len;++i){ pre[i]=(pre[i-1]*P+t[i-1]-'a'+1)%mod;...
2018-12-02 17:17:36
257
原创 Lucas 模版
Lucas 模版Cnmmod&ThinSpace;&ThinSpace;mod(mod是素数)C_n^m \mod mod (mod 是素数)Cnmmodmod(mod是素数)ll Lucas(ll n,ll m){ if(!m) return 1; return C(n%mod,m%mod)*Lucas(n/mod,m/mod)%mod;}exLucas 模版C...
2018-10-23 15:35:57
335
原创 pell 方程
pell方程:x2−d∗y2=1x2−d∗y2=1 x^2-d*y^2=1我们知道它的所有解符合这个式子: xn+yn∗n−−√=(x1+y∗n−−√)nxn+yn∗n=(x1+y∗n)nx_n+y_n*\sqrt n =(x_1+y*\sqrt n)^n 那么以n=2n=2n=2为例: x2+y2∗n−−√=(x1+y∗n−−√)∗(x1+y∗n−−√)=x21+y21∗n+(x1...
2018-08-08 15:33:13
1292
原创 pell 方程求最小解模版
pell 方程 : x2−d∗y2=1x2−d∗y2=1x^{2}-d*y^2=1 最小整数解: x1=p,y1=qx1=p,y1=qx_1=p,y_1=qinline bool solve(ll n,ll &amp;p,ll &amp;q){ ll N, p1, p2, q1, q2, a0, a1, a2, g1, g2, h1, h2; g1 = q2 = p1 ...
2018-08-08 15:11:30
529
原创 连分数
连分数: pkqk=a1+1a2+1a3+1a4+…=[a1,a2,a3,a4…]pkqk=a1+1a2+1a3+1a4+…=[a1,a2,a3,a4…]\frac{p_k}{q_k}=a_1+\frac{1}{a_2+\frac{1}{a_3+\frac{1}{a_4+\dots }}}=[a_1,a_2,a_3,a_4\dots] 可以得到以下关系: ⎧⎩⎨⎪⎪p1p2pk=a1=a...
2018-08-06 15:34:41
2338
原创 无理数sqrt(n)连分数
连分数: a0+1a1+1a2+1a3+…a0+1a1+1a2+1a3+…a_0+\frac{1}{a_1+\frac{1}{a_2+\frac{1}{a_3+\dots }}} 所有2次无理数n−−√n\sqrt{n}都可以表示为循环连分数,并且循环节都是从第一位开始的。这里给出求n−−√n\sqrt{n} 的循环节模版:void init(ll n){ double ...
2018-08-06 15:13:44
1576
原创 数论四大定理
1.威尔逊定理p∣(p−1)!+1p∣(p−1)!+1p \mid(p-1)!+1 即 (p−1)!≡p−1≡−1modpp为质数(p−1)!≡p−1≡−1modpp为质数(p-1)!\equiv p-1 \equiv -1 \mod p \quad p 为质数 2.欧拉定理aϕ(p)≡1modpgcd(a,p)=1(1)(1)aϕ(p)≡1modpgcd(a,p)=1a^{\...
2018-07-29 17:48:07
2850
原创 Lindström–Gessel–Viennot lemma 定理
不相交路径: e(a,b)=∑P:a−&amp;gt;bw(P)e(a,b)=∑P:a−&amp;gt;bw(P) e(a,b)=\sum_{P:a-&gt;b}w(P) M=⎡⎣⎢⎢⎢⎢⎢e(a1,b1)e(a2,b1)⋮e(an,b1)e(a1,b2)e(a2,b2)⋮e(an,b2)⋯⋯⋱⋯e(a1,bn)e(a2,bn)⋮e(an,bn)⎤⎦⎥⎥⎥⎥⎥M=[e(a1,b1)e(a1,b2)⋯e(a1,b...
2018-07-25 16:30:38
722
原创 拉格朗日插值 求等次幂和模版
这个就是拉格朗日插值简化的公式 f(n)=∑i=0k+1(−1)k−i+1f(i)∏i−1j=0(n−j)∏k+1j=i+1(n−j)i!(k+1−i)!f(n)=∑i=0k+1(−1)k−i+1f(i)∏j=0i−1(n−j)∏j=i+1k+1(n−j)i!(k+1−i)!f(n)=\sum_{i=0}^{k+1}(-1)^{k-i+1}f(i)\frac{\prod_{j=0}^{i-1}(...
2018-07-24 11:52:36
344
原创 伯努利求幂和模版
∑ni=1ik∑i=1nik\sum_{i=1}^n{i^k}=(n+B)k+1−Bk+1k+1(n+B)k+1−Bk+1k+1\frac{{(n+B)}^{k+1}-B^{k+1}}{k+1}
2018-07-20 17:15:49
367
原创 高斯求线性基模版
void cal() { for (int i = 0; i < n; ++i) for (int j = MAX_BASE; j >= 0; --j) if (a[i] >> j & 1) { if (b[j]) a[i] ^= b[j]; else {
2017-09-26 21:16:58
404
原创 字符串模拟乘法
string multi(string num1, string num2){ string res=""; int m = num1.size(), n = num2.size(); vector<long long> tmp(m + n - 1); for (int i = 0; i < m; i++){ int a = nu...
2017-09-04 16:51:52
1645
原创 计算几何模版
const double eps=1e-8;int dcmp(double x){ if (fabs(x)&amp;amp;lt;eps) { return 0; } else return x&amp;amp;lt;0?-1:1;}struct Point{ double x,y; Point(double x=0,double y=0):x(x),y(y) {}};typedef
2017-08-22 19:34:31
438
原创 Dijkstra模版
struct Edge{ int from,to,dist; Edge(int u,int v,int d):from(u),to(v),dist(d){}};struct Dijkstra{ int n,m; vector<Edge> edges; vector<int> G[maxn]; bool done[maxn]; int d[ma
2017-08-20 20:38:41
381
原创 欧拉函数模版
ll phi(ll n) { ll i,rea=n; for(i=2;i*i<=n;++i) { if(n%i==0) { rea=rea-rea/i; while(n%i==0) n/=i; }
2017-08-19 19:58:26
392
原创 中国剩余定理模版
typedef long long LL;const int N = 1005;LL a[N], m[N];LL gcd(LL a,LL b){ return b? gcd(b, a % b) : a;}void exgcd(LL a, LL b, LL &x, LL &y){ if(b == 0) { x = 1; y = 0;
2017-08-16 19:41:13
352
原创 Manacher模版
char s[(int)1e5+100];char s_new[(int)2e5+100];int p[(int)2e5+100];int Init(){ int len = strlen(s); s_new[0] = '$'; s_new[1] = '#'; int j = 2; for (int i = 0; i < len; i++) {
2017-08-14 15:51:30
290
原创 圆的反演模版
Point inverse_Point(Point P,Point A,double r)//求A关于P反演{ Point O(0,0); Point PA=A-P; double len=r*r/dist(PA,O); Point A1=P+PA*(len/dist(PA,O)); return A1;}Circle inverse_Circle(Poi
2017-08-12 10:09:26
606
原创 fwt模版
fwt模版void FWT(int a[],int n,int _k){ for(int m=2;m<=n;m<<=1) for(int i=0;i<=n-1;i+=m) for(int j=0;j<=m/2-1;j++){ int t0=a[i+j], t1=a[i+j+m/2]; if
2017-08-07 13:21:06
356
原创 圆与多边形求交面积
const int N=2000+10;const double eps=1e-10;const double PI=acos(-1.0);int rnd;int dcmp(double x){ if(fabs(x)<eps)return 0; return x<0?-1:1;}struct Point{ double x,y; Point(){}
2017-07-31 16:41:54
640
原创 莫比乌斯函数模版
const int maxn=1e6;const int mod=1e9+7;bool Mark[MAXSIZE];int prime[maxn];bool vis[maxn];int cnt = 0;int mu[maxn];int sum[maxn];int g[maxn];void Init(){ memset(vis,0,sizeof(vis)); mu
2017-07-29 20:48:48
386
原创 整数拆分 生成函数 模版
int n=1e5+5,m;ll a[maxn],b[maxn];ll ans[maxn],tmp[maxn];void Init(){ int t=1000; for(int i=-1000;i<=1000;i++) tmp[i+t]=i*(3*i-1)/2; ans[0]=1; for(int i=1;i<n;i++) {
2017-07-28 18:17:07
948
原创 FFT 模版 和 INT128模版
#include #include #include using namespace std;typedef long long ll;const int maxn=15000+100;const ll M=131073ll,MOD=1000000007ll,P[3]={998244353ll,1005060097ll,950009857ll},G[3]={3ll,5ll,7ll},I
2017-07-04 16:11:32
732
原创 HDU 5484 Monitor the Alpacas 凸包+Dijkstra
题意 给你n个点 m个点 问m个点中最少几个 可以把 n个点围起来思路:先凸包一下,然后 把凸包的线存起来,枚举m个点可组成的线段是否在凸包外面,然后 枚举m个点 最短环用Dijkstra就可以了代码:#include #include #include #include #include #include #include using namespace std;
2017-07-01 20:44:06
518
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人