最大公约数以及最小公倍数
代码如下:
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);
}
}