給定n個字串和q個詢問
每次詢問在這n個字串中,有多少個字串同時滿足
1. 字串a是它的字首
2. 字串b是它的字尾
記憶體128m
sol這題我想了個log的做法可是它卡空間!!
可以建兩個ac自動機,然後相當於給你乙個點的對映,每次詢問兩顆子樹內相同的點有幾個。
那麼在乙個樹上線段樹合併,另乙個區間查詢就是nlog的
那麼這一題我們只好先把字串排序,然後二分出a的可行區間,b的可行區間。
離線完a樹狀陣列維護就行。
效率nlog2
#include#includeview code#include
#include
#include
#include
#include
#define ll unsigned long long
#define p 793999
#define maxn 50005
using
namespace
std;
intn,q;
inttr[maxn],dy[maxn],ans[maxn];
void add(int i,int
v)int ask(int
i)struct
node
void
re()
}s[maxn],s[maxn],a,b;
struct
que;
vector
q[maxn];
bool
operator ==(node a,node b)
intfind(node a,node b)
returnl;}
bool
operator
bool
cmp(node a,node b)
intget(int
l,node t)
returnl;}
int get(int
l,node t)
returnl;}
intmain()
sort(s+1,s+n+1
,cmp);
for(int i=1;i<=n;i++)dy[s[i].id]=i;
for(int i=1;i<=q;i++));
q[r].push_back((que));
}for(int i=1;i<=n;i++)
}for(int i=1;i<=q;i++)printf("
%d\n
",ans[i]);
return0;
}
2 字串查詢
kmp演算法 kmp演算法的關鍵是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是實現乙個next 函式,函式本身包含了模式串的區域性匹配資訊。時間複雜度o m n 通過getnext 實現部分匹配值,然後利用kmp演算法計算是否匹配。如下 package li...
13 字串查詢
對於乙個給定的 source 字串和乙個 target 字串,你應該在 source 字串中找出 target 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。說明在面試中我是否需要實現kmp演算法?樣例如果 source source 和 target target 返回 1。如果 sou...
1100 字串查詢
description 給定兩個字串a b,求b在a 現的位置.input 第一行為乙個字串a,長度大於等於1小於等於100000。第二行為乙個字串b,長度大於等於1小於等於1000。output 乙個整數,b在a 現的位置,若b不是a的字串,輸出 1。sample input abababc ab...