2020牛客暑期多校訓練營(第二場) A

2021-10-08 03:31:44 字數 2061 閱讀 1558

時間限制:c/c++ 3秒,其他語言6秒

空間限制:c/c++ 262144k,其他語言524288k

64bit io format: %lld

題目描述

given n strings s_1, s_2, \cdots, s_ns1​

,s2​ ,⋯,sn​

. now define f(s,t) as the maximum i that satisfy s_ = t_s

1…i​

=t∣t∣−i+1…∣t∣

​ , and if such i doesn』t exist, f(s,t)=0.

the problem is to calculate:

\sum_\sum_f(s_i, s_j)^2 \pmod∑

i=1n​ ∑

j=1n

​ f(si​

,sj​ )

2(mod998244353)

輸入描述:

the first line contains one integer n~(1 \leq n \leq 10^5)n (1≤n≤10

5), denoting the number of given strings.

the following n lines each contains a string s_i~(i = 1, 2, \cdots, n)si​

(i=1,2,⋯,n).

it』s guaranteed that 1\leq |s_i|, \sum|s_i| \leq 10^61≤∣si​

∣,∑∣si​

∣≤10

6and all strings only contain lowercase letters.

輸出描述:

only one line containing one integer, denoting the answer.

示例1輸入複製3

abba

aba輸出

複製29

題意:給定n個字串,每乙個串字首和其他串的字尾進行匹配,計算匹配的最大長度的平方和。

題解:雜湊函式預處理每乙個字串的字尾,並記錄每乙個雜湊值,然後處理每個字串的字首雜湊值,統計每個字串的貢獻值,但是,例如」aba「,這個字元,其字首「a」,「aba」,會被重複統計,所以需要跑一遍kmp求出next陣列,來處理掉這種重複的情況,最後計算答案即可。

由於雜湊函式不經常寫,忘記key值該怎麼取了,wa了幾次。

key應該是取較大的素數(我認為是這樣)。

#include

using

namespace std;

typedef

unsigned

long

long ull;

typedef

long

long ll;

const ll mod=

998244353

;const

int n=

1e6+

500;

const

int key=

131;

mapint>mp;

string s[n]

;int has[n]

;int nex[n]

;void

hash

(string a)

return;}

void

kmp(string a,

int n)

}int

main()

ll ans=0;

for(

int i=

1; i<=n;

++i)

kmp(s[i]

,len)

;for

(int j=

1; j<=len;

++j)

for(

int j=

1; j<=len;

++j)

}printf

("%lld\n"

,ans)

;return0;

}

2020牛客暑期多校訓練營(第二場

b.boundary 數學 以乙個點為基礎,暴力列舉另外乙個點就可以,就是算圓心的時候有點廢手。ac include inline long long read while c 0 c 9 return x s using namespace std define newnode treenode ...

2020牛客暑期多校訓練營(第二場)

c.cover the tree 首先你從以乙個度不為1的點作為根節點。然後你每次都連線乙個葉子節點,這樣顯然是所有的邊都可以被覆蓋。即答案為度為1的點的個數,但是這樣顯然很大,可以優化,可以相當於把根節點當作中間節點,讓葉子節點兩兩相連,顯然答案已經出來了,就是 葉子 1 2 但是怎麼兩兩配對是乙...

2020牛客暑期多校訓練營(第二場)

給你同一天的兩個時刻,請你計算這兩個時刻中間相隔多少秒?注意一下輸入的格式。include includeusing namespace std int main lcm i,j 其中 lcm 是最小公倍數的簡寫 the least common multiple 求每個大小為 k k 的子矩陣的最...