慄醬有乙個長度為n的數列a,乙個長度為m的數列b,現在詢問a中有多少個長度為m的連續子串行a』,
滿足(a』1+b1)%k = (a』2+b2)%k = …… = (a』m + bm)%k。
第一行乙個數t,表示有t組資料。
對於每組資料,
第一行三個整數,n, m, k。
第一行輸入n個數, a1,a2,…,an, 表示a數列中的數,
第二行輸入m個數, b1,b2,…,bm, 表示b數列中的數。
每一組資料輸出一行,滿足條件的連續子串行數量。
232
5787
8732
5789
87
1
2
t≤15,
2≤m≤n≤2×105,
1≤ai,bi,k≤109
將公式轉換為(a[i+1]-a[i]+b[j+1]-b[j])%k==0,之後用kmp
#include
using
namespace std;
typedef
long
long ll;
const
int maxn =
2e5+10;
int a[maxn]
, b[maxn]
;int nexts[maxn]
;int n, m;
ll ans =0;
int mod;
void
get_nexts()
}void
kmp(
)else
j = nexts[j];if
(j >= m)}}
intmain()
for(j =
0; j < m;
++j)
for(i =
0; i < n -1;
++i)
for(j =
0; j < m -1;
++j)
n--, m--
;kmp()
; cout << ans << endl;
}return0;
}
牛客網 慄醬的數列 kmp
解題思路 其實一開始我只想到了暴力的方法,複雜度mn.後來網上找了題解 發現竟然還可以用kmp做,因為題目要求 a 1 b1 k a 2 b2 k a m bm k。那麼可以改造一下,變成 a2 a1 b2 b1 k 0,這樣就有可比性了。分成 a2 a1 項和 b2 b1 項,這種形式之和自己陣列...
慄醬的數列
慄醬有乙個長度為n的數列a,乙個長度為m的數列b,現在詢問a中有多少個長度為m的連續子串行a 滿足 a 1 b1 k a 2 b2 k a m bm k。輸入描述 第一行乙個數t,表示有t組資料。對於每組資料,第一行三個整數,n,m,k。第一行輸入n個數,a1,a2,an,表示a數列中的數,第二行輸...
牛客網 14673 慄醬數數
題目描述 慄醬在酒桌上玩乙個小遊戲,第乙個人從1開始數數,如果遇到數字中含4或者數字是4的倍數則跳過報下乙個,誰數錯了就要罰酒一杯。所以慄醬想讓你寫個程式把所有數生成出來,這樣她就可以作弊直接讀了。你一定能解決的吧?輸入描述 只有一組資料,乙個數n代表從1開始數到n。n 100000 輸出描述 按順...