原创 馬拉車算法 and 最長迴文子序列

馬拉車 char str[N],s[N]; int len[N]={0}; int manachr(){ s[0]='$'; int n=1; for(int i=0;str[i];i++)s[n++]='#',

原创 RMQ-ST表

#include<bits/stdc++.h> #define me(a,x) memset(a,x,sizeof(a)) #define scnaf scanf #define itn int using namespace std;

原创 二進制中1的個數

#include<bits/stdc++.h> typedef long long ll; const ll MO = 1000000007; int T,bin[63],lens; ll n,ans,power[63],pre[63],n

原创 字典樹

1 #include<iostream> #include <cstdio> #include <cstring> using namespace std; #define me(a,x) memset(a,x,sizeof(a)) str

原创 序列自動機

#include <bits/stdc++.h> using namespace std; const int MaxN = 1000000 + 5; int N, L; char str[MaxN], str2[MaxN]; struct

原创 BM-線性遞推板子

//杜教BM #include<bits/stdc++.h> using namespace std; #define rep(i,a,n) for (int i=a;i<n;i++) #define per(i,a,n) for (int

原创 網絡流

1. 最大流 FF struct edge { int from, to, cap, flow;//分別是起點,終點,容量,流量 edge(int u, int v, int c, int f):from(u), to(v), cap(c

原创 逆序數

樹狀數組void sol() {     for(int i=1;i<=n;++i) bs[i]=0;     for(int i=1;i<=n;++i)     scanf("%d",a+i),g[i]=a[i];     sort(g+

原创 Lucas

ll fac[N]; void N_() {     fac[0]=1;     for(ll i=1;i<N;i++)     fac[i]=fac[i-1]*i%mod; } ll quick_mod(ll a,ll b,ll mo){

原创 並查集

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

原创 KMP

kmp void getnx(string str,int *nx) { int len=str.length();int i=0,k=-1;nx[0]=-1; while(i<len)if(k==-1||str[i]==str[k])n

原创 最短路

Floyd for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]); 傳遞閉包

原创 佩爾方程

1.連分數 #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> using namespace std; typedef long l

原创 MST

prim int prim(int x,int n) { int sum=0; memset(visit,false,sizeof(visit)); for(int i=1;i<=n;i++) dis[i]=mp[x][i]; di

原创 tarjan算法

強連通分量 void tarjan(int u){ vis[u]=true; LOW[u]=DFN[u]=cnt++; for(int v:g[u]){ if(!DFN[v]){//沒訪問過繼續 tarjan(v