牛客 慄醬的數列

2021-10-05 15:31:43 字數 1121 閱讀 9541

慄醬有乙個長度為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 輸出描述 按順...