原创 擴展歐幾里得

struct eu { int a,b,x,y,q; void extend_euclid(int a,int b) { if(b==0) { x=1;y=0;q=a; } else { extend

原创 最長公共字串

#include <cstdio> #include <cstring> #include <iostream> using namespace std; #define N 1005 char str1[N], str2[N];

原创 poj2411 2663 2420 dp+狀態壓縮(多米諾骨牌問題)

題目描述:用1*2 的矩形通過組合拼成大矩形,求拼成指定的大矩形有幾種拼法。 首先 我們先求用1*2 的矩形拼成 n*m的矩形有多少種拼法 當n*m爲奇數時,一定是不會拼出來的,因爲想要拼出來就需要整數倍的小矩形數目。 爲了加速算

原创 並查集

const int maxn=333; int n; int parent[maxn]; void UFSet() { for(int i=0;i<=n;i++) parent[i]=-1; } int find(int x) {

原创 樹狀數組

#define lowbit(x) (x&(-x)) int const maxn=3333; int tree[maxn],n; void add(int p,int val) { while(p<=n) { tree[p]

原创 高精度運算

const int MAXN = 410; struct bign { int len, s[MAXN]; bign () { memset(s, 0, sizeof(

原创 FOJ 2014.3 有獎月賽

                                                FOJ 2014.3  由於跑A區去面試的原因,這次比賽沒參加,回來時已經四點多了,過了H題,然後D題交了一發,沒考慮一個盟國只有一個國

原创 SBT

const int maxn=50010; const int INF=0x3f3f3f3f; struct SBT { int key,left,right,size; } tree[maxn]; int

原创 圖論五百題

=============================以下是最小生成樹+並查集====================================== 【HDU】 1213 How Many Tables 基礎並查集★ 1

原创 hdu 5236

http://acm.hdu.edu.cn/showproblem.php?pid=5236 這是一道概率dp+貪心題; 建立狀態dp[i], 表示敲出i個字符的期望次數, 那麼有 dp[i] = dp[i-1] + p*(1 + dp

原创 splay

#include <cstdio> #include <cstring> #include <climits> #include <algorithm> #define N 100001 using namespace std; i

原创 sap

#include<cstdio> #define min(a,b) ((a)<(b)?(a):(b)) const int MAX=2100000000,MAXn=200+9; int n,answer,g[MAXn][MAXn],d[M

原创 擴展KMP

#include<iostream> #include<string> using namespace std; const int MM=100005; int next[MM],extand[MM]; char S[MM],T[MM]

原创 狀壓dp

1.每一行用一個二進制數表示, 有些二進制數是題目中不合法的狀態,我們可以預處理出一行合法狀態的個數,在遞推的過程中複雜度就會大大降低。 POJ 3254        Corn Fields        codePOJ 3311  

原创 manacher求最長迴文子串

const int MAXN=110010; char Ma[MAXN*2]; int Mp[MAXN*2]; void Manacher(char s[],int len) { int l=0; Ma[l++]='$'; Ma[l