bzoj 1819 電子字典 Trie

2022-02-27 10:16:17 字數 1303 閱讀 1912

description

人們在英文本典中查詢某個單詞的時候可能不知道該單詞的完整拼法,而只知道該單詞的乙個錯誤的近似拼法,這時人們可能陷入困境,為了查詢乙個單詞而浪費大量的時間。帶有模糊查詢功能的電子字典能夠從一定程度上解決這一問題:使用者只要輸入乙個字串,電子字典就返回與該單詞編輯距離最小的幾個單詞供使用者選擇。 字串a與字串b的編輯距離是指:允許對a或b串進行下列「編輯」操作,將a變為b或b變為a,最少「編輯」次數即為距離。  刪除串中某個位置的字母;  新增乙個字母到串中某個位置;  替換串中某一位置的乙個字母為另乙個字母; jsoi團隊正在開發一款電子字典,你需要幫助團隊實現乙個用於模糊查詢功能的計數部件:對於乙個待查詢字串,如果它是單詞,則返回-1;如果它不是單詞,則返回字典中有多少個單詞與它的編輯距離為1。

input

輸出應包括m行,第i行為乙個整數xi。xi = -1表示qi為字典中的單詞;否則xi表示與qi編輯距離為1的單詞的個數。

其實我們在trie上直接暴力dfs即可

因為只需要求編輯距離為1的單詞個數,實際上並沒有那麼慢.

#include #include #include using namespace std;

typedef long long ll;

inline void read(int &x)

const int maxn = 210010;

int ch[maxn][26],nodecnt;

bool ed[maxn];

inline void insert(char *s)ed[nw] = true;

}int vis[maxn],t,len,ans;

bool flag;

char s[maxn];

inline void dfs(int u,int i,int us)

if(i == len && us == 0 && ed[u])

if(i < len && us == 1) dfs(u,i+1,us-1);

if(us == 1)}}

if(i == len) return;

if(ch[u][s[i+1]-'a']) dfs(ch[u][s[i+1]-'a'],i+1,us);

}int main()

for(t=1;t<=m;++t)

getchar();getchar();

return 0;

}

(乃們不要問我為什麼dfs和qingdaobaibai的那麼像)

bzoj 1031 字元加密Cipher

題意 給出乙個字串,求將其所有迴圈串排序之後,每個串的最後乙個字元 字串長度 100000 題解 字尾陣列裸題。吧 學長拿這個當例題我還差點不會做。反正就是把字串倍增之後求字尾陣列 然後按字尾陣列來掃一遍求解 難點就是字尾排序 廢話!這裡用的是o nlogn 的倍增 基數排序方法 模板純手寫。一堆f...

bzoj4566 HAOI2016 找相同字元

time limit 20 sec memory limit 256 mb submit 113 solved 64 submit status discuss description 給定兩個字串,求出在兩個字串中各取出乙個子串使得這兩個子串相同的方案數。兩個方案不同當且僅當這兩 個子串中有乙個位...

BZOJ4566 Haoi2016 找相同字元

bzoj4566 haoi2016 找相同字元 給定兩個字串,求出在兩個字串中各取出乙個子串使得這兩個子串相同的方案數。兩個方案不同當且僅當這兩個子串中有乙個位置不同。兩行,兩個字串s1,s2,長度分別為n1,n2。1 n1,n2 200000,字串中只有小寫字母 輸出乙個整數表示答案 aabb b...