问题描述
给定 n 个字符串 s1,s2,⋯,sn。每个字符串都有一个权值 wi。
记 S[l:r] 为字符串 S 从第 l 个字符到第 r 个字符构成的子串(下标从 1 开始),f(S,T) 为字符串 T 在字符串 S 中的出现次数。
记 g(S)=∑i=1nwi×f(S,si),$h(S)=\max_{1 \le l \le r \le |S|}\frac{g(S[l:r])}{r-l+1}$。
对于 ∀h(S)=ba,其中 a,b 的最大公约数为 1,规定 h^(S)=a⋅b−1mod998244353,其中 b−1 表示 b 在 mod998244353 意义下的乘法逆元。
对于所有 1≤i≤n,1≤j≤∣si∣,请求出 h(si[1:j])。注意一些 subtask 仅需求出部分答案,详见输入输出格式。
输入输出格式
输入格式
第一行包含两个整数 n,T,分别表示字符串数和该测试点类型。
接下来 n 行,每行一个字符串和一个正整数,分别表示 si 和 wi。
输出格式
对于 T=0 的 subtask,请以浮点数形式输出 h(s1)。输出结果与标准输出的绝对误差在 10−4 之内即算正确。
对于 T=1 的 subtask,为减少输出量,你只需输出 $\oplus_{1 \le i \le n,1 \le j \le |s_i|}\hat{h}(s_i[1:j])$,其中 ⊕ 表示按位异或运算,亦即 C++ 语言中的 ^
运算符。
样例
输入样例1
4 0
ababcdcd 0
ab 12
abc 20
bc 15
输出样例1
15.666667
数据范围
记 m=∑i=1n∣si∣,l=maxi=2n∣si∣。
子任务 |
分数 |
限制条件 |
1 |
3 |
m,l≤50,T=1 |
2 |
14 |
m,l≤2000,T=1 |
3 |
19 |
m≤105,l≤50,T=0 |
4 |
23 |
m,l≤105,T=0 |
5 |
15 |
m,l≤3⋅105,T=0 |
6 |
26 |
m,l≤5⋅106,T=1 |
对于所有测试点保证:
- 1≤wi≤109
- maxi=1ng(si)≤1018
- ∣si∣≥1
- n≤2⋅105
- 对于 T=0 的子任务保证答案绝对值属于区间 (1,108)
- 保证 si 仅由字符
a
、b
、c
、d
构成