zoukankan      html  css  js  c++  java
  • CSP-S2020/NOIP2020模板总结(Updating)

    CSP-S2020/NOIP2020模板总结

    一、算法

    二分写法

    while(l<=r)
    {
    	int mid=(l+r)>>1;
    	if(check(mid))
    	{
    		l=mid+1;
    		ans=mid;
    	}
    	else
    		r=mid-1;
    }
    

    洛谷2884

    离散化

    
    

    UVA10587

    归并排序

    void merge_sort(int l,int r)
    {
    	if(l==r)
    		return;
    	int mid=(l+r)>>1;
    	merge_sort(l,mid);
    	merge_sort(mid+1,r);
    	int i=l,j=mid+1,k=l;
    	while(i<=mid && j<=r)
    	{
    		if(a[i]<=a[j])
    			b[k++]=a[i++];
    		else
    		{
    			b[k++]=a[j++];
    			ans+=mid-i+1;
    		}
    	}
    	while(i<=mid)
    		b[k++]=a[i++];
    	while(j<=r)
    		b[k++]=a[j++];
    	for(int p=l;p<=r;p++)
    		a[p]=b[p],b[p]=0;
    }
    

    JDOJ1927


    二、数学

    判断素数

    bool isprime(int x)
    {
    	for(int i=2;i<=sqrt(x);i++)
    		if(x%i==0)
    			return 0;
    	return 1;
    }
    

    欧拉筛素数

    void euler(int x)
    {
    	cnt=0;
    	memset(v,0,sizeof(v));
    	for(int i=2;i<=x;i++)
    	{
    		if(!v[i])
    			prime[++cnt]=i;
    		for(int j=1;j<=cnt && i*prime[j]<=x;j++)
    		{
    			v[i*prime[j]]=1;
    			if(i%prime[j]==0)
    				break;
    		}
    	}
    }
    

    GCD

    int gcd(int a,int b)
    {
    	return !b?a:gcd(b,a%b);
    }
    

    EX-GCD

    int exgcd(int a,int b)
    {
    	if(!b)
    	{
    		x=1;
    		y=0;
    		return a;
    	}
    	int d=ecgcd(b,a%b);
    	int k=x;
    	x=y;
    	y=x-a/b*y;
    	return d;
    }
    

    洛谷1082

    二项式系数、杨辉三角

    
    

    洛谷1313

    线性求逆元

    void ny(int n)
    {
    	for(int i=1;i<=n;i++)
    		inv[i]=((mod-mod/i)*inv[mod%i])%mod;
    }
    

    洛谷3811

    快速幂

    int qpow(int a,int b)
    {
    	int ret=1;
    	while(b)
    	{
    		if(b&1)
    			ret=(ret*a)%mod;
    		a=(a*a)%mod;
    		b>>=1;
    	}
    	return ret;
    }
    

    矩阵快速幂

    
    

    高斯消元

    
    

    洛谷3389


    三、树与图

    链式前向星

    void add(int x,int y)
    {
    	to[++tot]=y;
    	nxt[tot]=head[x];
    	head[x]=tot;
    }
    

    Dijkstra

    
    

    Dijkstra+堆优化

    priority_queue<pair<int,int> >q;
    void dijkstra(int s)
    {
    	memset(dist,127,sizeof(dist));
    	memset(v,0,sizeof(v));
    	dist[s]=0;
    	q.push(make_pair(0,s));
    	while(!q.empty())
    	{
    		int x=q.top().second;
    		q.pop();
    		if(v[x])
    			continue;
    		v[x]=1;
    		for(int i=head[x];i;i=nxt[i])
    		{
    			int y=to[i];
    			if(dist[y]>dist[x]+val[i])
    			{
    				dist[y]=dist[x]+val[i];
    				q.push(make_pair(-dist[y],y));
    			}
    		}
    	}
    }
    

    SPFA

    void spfa(int s)
    {
    	memset(dist,127,sizeof(dist));
    	memset(v,0,sizeof(v));
    	dist[s]=0;
    	q.push(s);
    	v[s]=1;
    	while(!q.empty())
    	{
    		int x=q.front();
    		q.pop();
    		v[x]=0;
    		for(int i=head[x];i;i=nxt[i])
    		{
    			int y=to[i];
    			if(dist[y]>dist[x]+val[i])
    			{
    				dist[y]=dist[x]+val[i];
    				if(!v[y])
    					q.push(y),v[y]=1;
    			}
    		}
    	}
    }
    

    SPFA+SLF优化

    
    

    SPFA+LLL优化

    
    

    Floyd

    //普及-模板,略
    

    Kruskal

    int find(int x)
    {
    	return fa[x]==x?x:fa[x]=find(fa[x]);
    }
    void kruskal()
    {
    	sort(e+1,e+tot+1,cmp);
    	for(int i=1;i<=tot;i++)
    	{
    		int fx=find(e[i].x);
    		int fy=find(e[i].y);
    		if(fx!=fy)
    		{
    			add(e[i].y,e[i].x);
    			add(e[i].x,e[i].y);
    			fa[fx]=fy;
    		}
    	}
    }
    

    JDOJ1229

    Prim

    //它死了
    

    树上倍增

    
    

    JDOJ3055
    CF587C

    树链剖分

    //普及-模板,略
    

    拓扑排序

    void topsort()
    {
    	queue<int> q;
    	for(int i=1;i<=n;i++)
    		if(!du[i])
    			q.push(i);
    	while(!q.empty())
    	{
    		int x=q.front();
    		q.pop();
    		for(int i=head[x];i;i=nxt[i])
    		{
    			int y=to[i];
    			du[y]--;
    			if(!du[y])
    				q.push(y);
    		}
    	}
    }
    

    洛谷1038


    四、数据结构

    线段树

    //普及-模板,略
    

    动态开点(线段树)

    //普及-模板,略
    

    主席树

    struct persistent_segment_tree
    {
    	int v,lson,rson;
    }tree[maxn*30];
    void pushup(int pos)
    {
    	tree[pos].v=tree[tree[pos].lson].v+tree[tree[pos].rson].v;
    }
    void build(int &pos,int l,int r)
    {
    	if(!pos)
    		pos=++tot;
    	int mid=(l+r)>>1;
    	if(l==r)
    	{
    		tree[pos].v=a[l];
    		return;
    	}
    	build(tree[pos].lson,l,mid);
    	build(tree[pos].rson,mid+1,r);
    	pushup(pos);
    }
    int newnode(int pos)
    {
    	tree[++tot]=tree[pos];
    	return tot;
    }
    int update(int pos,int l,int r,int x,int k)
    {
    	int mid=(l+r)>>1;
    	pos=newnode(pos);
    	if(l==r)
    	{
    		tree[pos].v=k;
    		return pos;
    	}
    	if(x<=mid)
    		tree[pos].lson=update(tree[pos].lson,l,mid,x,k);
    	else
    		tree[pos].rson=update(tree[pos].rson,mid+1,r,x,k);
    	return pos;
    }
    

    洛谷3919

    Splay

    
    

    洛谷3369

    并查集

    int find(int x)
    {
    	return fa[x]==x?x:fa[x]=find(fa[x]);
    }
    void merge(int x,int y)
    {
    	int fx=find(x);
    	int fy=find(y);
    	if(fx!=fy)
    		fa[fx]=fy;
    }
    

    JDOJ1046

    洛谷1196

    树状数组

    
    

    洛谷模板

    ST表

    
    

    洛谷模板


    五、字符串

    Hash

    int hash(char s[])
    {
    	int ret=0;
    	int len=strlen(s+1);
    	for(int i=1;i<=len;i++)
    	{
    		ret=ret*31+s[i]-'a';
    		ret%=mod;
    	}
    	return ret%mod;
    }
    

    洛谷1381

    Trie

    
    

    洛谷模板

    KMP

    
    
  • 相关阅读:
    Cassandra
    【CISCO强烈推荐】生成树 《路由协议》 卷一二 拥塞:网络延迟 阻塞:进程中 MTU QS:服务质量 OSPF RIP ISIS BGP 生成树 《路由协议》 卷一二
    m*n matrix min rank square matrix
    Moving Computation is Cheaper than Moving Data
    SASL mechanism
    一阶 斜率 二阶 原函数的粗糙度 roughness
    Linux 虚拟内存盘
    Bloom Filters
    R Tree
    释放内存
  • 原文地址:https://www.cnblogs.com/fusiwei/p/13879273.html
Copyright © 2011-2022 走看看