Trie 洛谷P2922 秘密資訊

2021-08-24 20:36:35 字數 886 閱讀 6553

給定

n n

個已加密元素,

m' role="presentation">m

m個鑰匙

(感性理解一下。。。)

問每把鑰匙串與加密串的最長字首tr

iet ri

e用su

m sum

表示中間字元的出現次數,en

d end

表示當前串的出現次數

做一遍tri

e tri

e即可

#include

#include

#include

using

namespace

std;

int trie[500001][2],tot,n,ans,end[500001],cnt[500001],sum[500001],m;

bool a[500001];

inline

void insert(register

bool a,register

int len)

end[p]++;//該串出現次數

return;

}inline

void search(register

bool a,register

int len)

p=trie[p][a[k]];

ans+=end[p];//加上子串

}printf("%d\n",ans-end[p]+sum[p]);//能完全找到,減去之前所有的end加上sum

return;

}signed main()

for(register

int i=1,t;i<=m;i++)

}

洛谷2922 秘密訊息(Trie樹)

既然是讀入字串然後與之前的字串進行匹配,那麼肯定是對之前的字串建立trie樹,這點毋庸置疑。那麼就是統計有多個字串作為他的字首出現以及該字串是多少個字串的字首,那麼就與 簿一題類似了。我記錄經過該點的字串數量以及以該點作為結束點的數量,那麼最後答案就是這條路徑上結束點的數量之和 經過最後點的字串數量...

洛谷P1738 洛谷的資料夾 Trie

給出nn 個目錄位址,為了使這些資料夾都存在,需要新建幾個資料夾?一眼看上去就是tri etri e。雖然暴力可過。這道題其實就是不用查詢的tri etri e。直接每次輸出這棵樹的節點數量就可以了。每次找到這個目錄的下乙個 取出這乙個資料夾的名稱,再在當前已找到的節點上尋找是否有這個資料夾,如果有...

洛谷P2661 資訊傳遞

有n個同學 編號為1到n 正在玩乙個資訊傳遞的遊戲。在遊戲裡每人都有乙個固定的資訊傳遞物件,其中,編號為i的同學的資訊傳遞物件是編號為ti同學。遊戲開始時,每人都只知道自己的生日。之後每一輪中,所有人會同時將自己當前所知的生日資訊告訴各自的資訊傳遞物件 注意 可能有人可以從若干人那裡獲取資訊,但是每...