
模版
自ran而然
这个作者很懒,什么都没留下…
展开
-
整数三分模版
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 · 769 阅读 · 0 评论 -
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 · 315 阅读 · 0 评论 -
笛卡尔树模版
复杂度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 · 234 阅读 · 0 评论 -
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 · 193 阅读 · 0 评论 -
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 · 285 阅读 · 0 评论 -
最大团模版
复杂度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 · 202 阅读 · 0 评论 -
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 · 329 阅读 · 0 评论 -
线段树模版
先贴一个内存较大的模版吧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 · 212 阅读 · 0 评论 -
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 · 512 阅读 · 0 评论 -
高斯求线性同余方程解模版
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 · 428 阅读 · 0 评论 -
格雷码构造模版
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 · 269 阅读 · 0 评论 -
并查集模版
int fa[maxn];int fin(int f){ return f==fa[f]?f:fa[f]=fin(fa[f]);}原创 2019-09-26 03:25:26 · 149 阅读 · 0 评论 -
最大流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 · 307 阅读 · 0 评论 -
主席树部分模版
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 · 214 阅读 · 0 评论 -
字符串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 · 263 阅读 · 0 评论 -
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 · 340 阅读 · 0 评论 -
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 · 536 阅读 · 0 评论 -
无理数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 · 1597 阅读 · 0 评论 -
伯努利求幂和模版
∑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 · 375 阅读 · 0 评论 -
拉格朗日插值 求等次幂和模版
这个就是拉格朗日插值简化的公式 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 · 346 阅读 · 0 评论 -
计算几何模版
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 · 443 阅读 · 0 评论 -
树状数组求逆序数 模版
#include #include using namespace std;const int N=1010;int c[N];int n;int lowbit(int i){ return i&(-i);}int insert(int i,int x){ while(i<=n) { c[i]+=x; i+=lowbit(原创 2016-11-07 08:45:50 · 439 阅读 · 0 评论 -
逆元 模版
第一种 :用ex_gcdvoid ex_gcd(ll a,ll b,ll &x,ll &y){ if(!b) x=1,y=0; else { ll x1,y1; ex_gcd(b,a%b,x1,y1); x=y1,y=x1-(a/b)*y1; }}第二种 :利用快速幂ll quickmo原创 2016-12-18 10:44:51 · 432 阅读 · 0 评论 -
凸包和旋转卡壳 模版
#include #include #include #include #include #include #include #include #include #include #include using namespace std;const int MAXN=1005;const double eps=1e-10;int dcmp(double x){原创 2017-03-27 21:52:52 · 331 阅读 · 0 评论 -
HDU 4449 Building Design 三维凸包+空间坐标转换+二维凸包
题意:求点到面的最短距离的同时求出投影面积的最小 套一下模版 就好了代码:#include #include #include #include #define eps 1e-7using namespace std;const double inf=0x3f3f3f3f;const int MAXV=80;const double EPS = 1e-9;const原创 2017-05-03 10:07:03 · 810 阅读 · 0 评论 -
矩阵快速幂 模版
typedef long long ll;const int MAX = 5;const ll mod=1e9+7;typedef struct{ ll m[MAX][MAX];}Matrix;Matrix P= {};//构造矩阵Matrix I= {};//原始矩阵Matrix matrixmul(Matrix a,Matrix b){ int i,j原创 2017-05-08 10:13:04 · 346 阅读 · 0 评论 -
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 · 738 阅读 · 0 评论 -
圆与多边形求交面积
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 · 643 阅读 · 0 评论 -
中国剩余定理模版
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 · 360 阅读 · 0 评论 -
欧拉函数模版
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 · 394 阅读 · 0 评论 -
莫比乌斯函数模版
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 · 388 阅读 · 0 评论 -
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 · 385 阅读 · 0 评论 -
整数拆分 生成函数 模版
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 · 952 阅读 · 0 评论 -
圆的反演模版
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 · 620 阅读 · 0 评论 -
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 · 293 阅读 · 0 评论 -
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 · 360 阅读 · 0 评论 -
字符串模拟乘法
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 · 1655 阅读 · 0 评论 -
高斯求线性基模版
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 · 408 阅读 · 0 评论 -
快速幂 模版
const int mod=10007; int quickmod(int a,ll b) { int ans=1; while(b) { if(b&1) ans=(ans*a)%mod; b/=2; a=a*a%mod; } return a原创 2016-11-04 18:56:40 · 323 阅读 · 0 评论