bzoj4212 神牛的養成計畫

2022-05-09 11:45:12 字數 1091 閱讀 6499

portal --> bzoj4212

​​  資料範圍:\(n<=2000,m<=100000\),\(n\)個字串總長度以及詢問字串總長度均\(<=2000000\)

​​  (怎麼感覺自己好像沒有學過trie一樣是因為太久沒有寫所以根本沒有往那個方向想嗎==)

​  最暴力的做法的話。。想法很簡單:先確定哪些字串滿足\(s_1\)是字首,再看其中滿足\(s_2\)是字尾的數量

​  字首這種東西的話,如果說我們將\(n\)個字串丟到trie裡面,將dfs一遍之後各個字串結尾對應節點的訪問順序存在乙個陣列裡面,那麼對於乙個詢問\((s_1,s_2)\),滿足\(s_1\)是字首的字串的結尾對應節點必定在乙個子樹當中,反應到陣列裡面的話就是乙個區間

​​  那所以接下來我們要做的就是查這個區間內的字串有多少個滿足\(s_2\)是字尾,只要將所有的串反轉然後丟到trie裡面,就又轉成查字首的問題了,解決方式和上面一樣

​​  至於區間這個問題,直接可持久化一下就好了

​  mark:**沒事還是不要隨便用getline好了==評測的時候超級容易翻車 **

​​  mark:字首什麼的也是應該考慮一下trie啊qwq不要看到字串什麼的就滿腦子sa、sam之類的

​  **大概長這個樣子

#include#include#include#include#define mp make_pair

#define pr pairusing namespace std;

const int n=2010,l=2000010,c=26;

string s[n],s1,s2;

char tmps[l];

int st[n],lis[n];

int n,tot,lastans,m;

namespace t1

void insert(string s,int id)

return cnt[nowr]-cnt[nowl];

}}/*}}}*/

void print(string s){

int len=s.length();

for (int i=0;i

BZOJ4212 神牛的養成計畫

題目大意 給定 n 個字串 s m 次詢問,每次詢問給定兩個字串 s 1,s 2 求 n 個字串中有多少個串滿足 s 1 是其字首且 s 2 是其字尾。n leq 2000,m leq 10 5 sum s sum s 1 s 2 leq 2 times 10 6 題解考慮正反建 trie 樹,原題...

P2006 趙神牛的遊戲

題目描述 在 dnf 中,趙神牛有乙個締造者,他一共有 kk 點法力值,一共有 mm 個技能,每個技能耗費的法力值為 a ia i,可以造成的傷害為 b ib i,而 boss 的體力值為 nn,請你求出它放哪個技能,才可以打死 boss。當然,趙神牛技術很菜,他一局只放乙個技能,不過每個技能都可以...

bzoj1635 最高的牛

初始如果沒有限制,很顯然每一頭牛高度都是h 當只有乙個限制,讓h a 到h b 的高度都減1即可 容易發現兩個限制不會相交 否則必然矛盾 只會包含或相離,因此沒有影響,直接差分 線段樹即可 注意 1.不保證a 1 include2 using namespace std 3struct jia 10...