大致題意
思路對於字元子串行匹配常用如下這種套路。
用乙個next[i][j]陣列維護,在 第 j 個字母及其以後的第乙個字母 i 的位置。然後就可以在這個字串行上跳了,如果跳到匹配串結束也沒出現-1,那就匹配成功。預處理複雜度 o(26xn) ,匹配複雜度等於所有匹配串長度。
**貼一下序列自動機板子,注意每次跳後,要到下乙個字母的後乙個。
now = next[s[i]-『a』][now] + 1
#include
using namespace std;
#define maxn 100005
#define maxm 1000006
#define ll long long int
#define inf 0x3f3f3f3f
#define inc(i,l,r) for(int i=l;i<=r;i++)
#define dec(i,r,l) for(int i=r;i>=l;i--)
#define mem(a) memset(a,0,sizeof(a))
#define sqr(x) (x*x)
#define inf (ll)2e18+1
#define mod 998244353
#define ls x<<1
#define rs x<<1|1
intread()
while
(isdigit
(ch)
)x=x*
10+ch-
'0',ch=
getchar()
;return f*x;
}int n,m;
char s[maxn]
;int a[26]
[maxn]
;int
main()
while
(m--
)else}if
(flag)
printf
("no\n");
else
printf
("yes\n");
}return0;
}
牛客練習賽51(B題 子串查詢)
題目描述 給出乙個長度為n的字串s和q個查詢。對於每乙個查詢,會輸入乙個字串t,你需要判斷這個字串t是不是s的子串。子串的定義就是存在任意下標a輸入描述 第一行兩個數n,q。1 n,q 1e5。第二行乙個長度為n的字串s,所有字元都為小寫拉丁字元。接下來q行每行乙個字串t。1 t 50。輸出描述 對...
牛客練習賽51
theme 給定n與m,要求你用正整數填充n個元素,使得這n個元素的和 m,定義喜愛度為i的個數使得2 i n且a i a i 1 1。1 n 1e5,1 m 1e9 solution 構造題。考慮列舉分成幾個段i,若某段的長度為len,則該段的數為1 len,可知喜愛度應為n i,所以我們的目標是...
題解 牛客練習賽51
字首a的數量,字尾c的數量,遇到b就計算一次答案。includeusing namespace std typedef long long ll const int n 1e5 100 char s n int cnt n int main int tmp 0 for int i 1 i n i p...