蓝桥杯个人常用语法+模板API总结

最大公约数以及最小公倍数

代码如下:

	static int gcd(int a, int b) { //最大公约数
		if(b==0) return a;
		else return gcd(b,a%b);
	}
	static int lcm(int a,int b) { //最小公倍数
		return a*b/gcd(a,b);
	}


背包系列

代码如下:

	for(int i=1;i<=n;i++)
        	for(int j=V;j>=v[i];j--)
        		dp[j]=Math.max(dp[j], dp[j-v[i]]+w[i]);


矩阵快速幂

代码如下:

	static int n,m;
	public static int[][] mul(int a[][],int b[][])
	{
		int ans[][]=new int[n][n];
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++)
				ans[i][j]=0;
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++)
				for(int k=0;k<n;k++)
					ans[i][j]=ans[i][j]+a[i][k]*b[k][j];
		
		return ans;
	}
	
	public static int[][] qp(int a[][],int b)
	{
		int ans[][]=new int[n][n];
		for(int i=0;i<n;i++)
			ans[i][i]=1;
		while(b!=0)
		{
			if(b%2==1) ans=mul(ans,a);
			a=mul(a,a);
			b>>=1;
		}
		return ans;
	}


字符串的最小循环节/循环周期

代码如下:

public class Main {
 
	static int nexts[]=new int[1000000];
	static char p[]=new char[1000000];
	static int m;
	
	static void getnexts() {
		int i=0,j=-1;
		nexts[i]=j;
		while(i<m) {
			if(j==-1||p[i]==p[j]) nexts[++i]=++j;
			else j=nexts[j];
		}
	}
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        
        String s=cin.next();
        m=s.length();
        p=s.toCharArray();
        getnexts();
        int ans=m-nexts[m];
        if(m%ans==0&&ans!=m) System.out.println(m/ans);
        else System.out.println(1);
    }
}


最小生成树模板

代码如下:

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Queue;
import java.util.Scanner;
import java.util.concurrent.LinkedBlockingDeque;

public class Main {
	
	public class node implements Comparable{
		int u,v,w;
		node(int a, int b , int c){
			this.u=a;
			v=b;
			w=c;
		}
		public int compareTo(Object o) {
			if(o instanceof node) {
				node b = (node)o;
				if(this.w>b.w) return 1;
				else if(this.w==b.w) return 0;
				else return -1;
			}
			return 0;
		}
	}
	static node a[]= new node[100005];
	static int f[] =new int[10005];
	
	private static int find(int x) {
		if(f[x]==x) return x;
		else return f[x]=find(f[x]);
	}	
	
    public static void main(String[] args) {
        Scanner cin=new Scanner(System.in);
        Main mains = new Main();
        int n= cin.nextInt();
        int m= cin.nextInt();
        for(int i=1;i<=n;i++) f[i]=i;
        for(int i=1;i<=m;i++) {
        	int u=cin.nextInt(),v=cin.nextInt(),w=cin.nextInt();
        	a[i]=mains.new node(u,v,w);
        }
        Arrays.parallelSort(a,1,1+m);
        long ans=0;
        int cnt=1;
        for(int i=1;i<=m;i++) {
        	int u=a[i].u,v=a[i].v,w=a[i].w;
        	int fu = find(u) , fv=find(v);
        	if(fu==fv) continue;
        	if(fu<fv) f[fv]=fu;
        	else f[fu]=fv;
        	cnt++;
        	ans+=w;
        	if(cnt==n) break;
        }
        System.out.println(ans);
    }
}


发布了61 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/JiangHxin/article/details/104055549
今日推荐