BJ模擬 相似子串 雜湊 並查集

2021-08-19 04:09:27 字數 1080 閱讀 5261

題目描述:

解題思路:

把26個字母分開hash,每一位只用0和1表示這一位是否是字母i。

詢問時也把26個字母分開比較,把等價類裡的hash加起來算。

不同處最多為1,即是最後的hash值只會有乙個形如ba

sei bas

ei的差,判斷一下即可。

#include

#define ll unsigned long long

using

namespace

std;

int getint()

const

int n=100005,c=26;

const ll base=123ll,invbase=3449391168254631603ll;

int n,m,id[n];

int tot,first[n],nxt[n<<1],to[n<<1],c[n<<1];

int dep[n],fa[n][20];

ll bin[n],binv[n],g[n][26],f[n][26],sum1[c],sum2[c];

mapbool>mp;

int find(int x)

void merge(int x,int y)

void add(int x,int y,int z)

void dfs(int u)

ll gethash(int u,int v,int t,int i)

bool check(int u1,int v1,int u2,int v2)

return cnt<=2;

}int main()

for(int i=1;i'a';

add(x,y,z),add(y,x,z);

}dfs(1);

m=getint();int k,u1,v1,u2,v2;char ch[2];

while(m--)

return

0;}

相似串匹配(雜湊)

1 題面 2 題解 現將字串轉化為乙個徑b函式處理過的字串,bs,bt,b函式 如果當前字元i前面有和它相同的字元j,b i i j,否組b i len,這樣處理通過記錄字串的前驅,使字串所有相同字元和不同字元的相對位置都確定下來,相當於乙個鍊錶,所以如果字串q,p是相似子串,則b q b p 然後...

模擬雜湊表 字串雜湊

模擬雜湊表 引入雜湊表就是根據乙個關鍵值key進行高效訪問的資料結構,可以通過雜湊函式把乙個資料當做key進行對映得到乙個儲存位址從而進行訪問。比如想要查詢100個數字範圍在 1 1e8 查詢它們是否有重複的值,那麼就可以用雜湊表來解決這個問題。對於小的數字我們就會習慣的會去乙個陣列進行標記,但是對...

3230 相似子串

輸入第1行,包含3個整數n,q。q代表詢問組數。第2行是字串s。接下來q行,每行兩個整數i和j。1 i j 輸出共q行,每行乙個數表示每組詢問的答案。如果不存在第i個子串或第j個子串,則輸出 1。5 3ababa 3 55 9 8 10 1816 1樣例解釋 第1組詢問 兩個子串是 aba abab...