loj#P3396. 「2020-2021 集训队作业」GDSOI2019 novel 加强版

「2020-2021 集训队作业」GDSOI2019 novel 加强版

题目描述

给定 nn 个字符串 s1,s2,,sns_1,s_2,\cdots,s_n。每个字符串都有一个权值 wiw_i

S[l:r]S[l:r] 为字符串 SS 从第 ll 个字符到第 rr 个字符构成的子串(下标从 11 开始),f(S,T)f(S,T) 为字符串 TT 在字符串 SS 中的出现次数。

g(S)=i=1nwi×f(S,si)g(S)=\sum_{i=1}^{n}w_i \times f(S,s_i),$h(S)=\max_{1 \le l \le r \le |S|}\frac{g(S[l:r])}{r-l+1}$。

对于 h(S)=ab\forall h(S)=\frac{a}{b},其中 a,ba,b 的最大公约数为 11,规定 h^(S)=ab1mod998244353\hat{h}(S)=a \cdot b^{-1} \bmod 998244353,其中 b1b^{-1} 表示 bbmod998244353\bmod 998244353 意义下的乘法逆元。可以证明在本题遇到的所有情形中 bb 均存在乘法逆元。

对于所有 1in,1jsi1 \le i \le n,1 \le j \le |s_i|,请求出 h(si[1:j])h(s_i[1:j])。注意一些 subtask 仅需求出部分答案,详见输入输出格式。

输入格式

第一行包含两个整数 n,Tn,T,分别表示字符串数和该测试点类型。

接下来 nn 行,每行一个字符串和一个正整数,分别表示 sis_iwiw_i

输出格式

对于 T=0T=0 的subtask,请以浮点数形式输出 h(s1)h(s_1)。输出结果与标准输出的绝对误差在 10410^{-4} 之内即算正确。

对于 T=1T=1 的subtask,为减少输出量,你只需输出 $\oplus_{1 \le i \le n,1 \le j \le |s_i|}\hat{h}(s_i[1:j])$,其中 \oplus 表示按位异或运算,亦即C++语言中的 ^ 运算符。

4 0
ababcdcd 0
ab 12
abc 20
bc 15
15.666667
4 1
ababcdcd 0
ab 12
abc 20
bc 15
980069045

数据范围与提示

m=i=1nsi,l=maxi=2nsim=\sum_{i=1}^{n}|s_i|,l=\max_{i=2}^{n}|s_i|

subtask1(3pts):\mathrm{subtask\, 1}(3\,\mathrm{pts}): m,l50m,l \le 50T=1T=1

subtask2(14pts):\mathrm{subtask\, 2}(14\,\mathrm{pts}): m,l2000m,l \le 2000T=1T=1

subtask3(19pts):\mathrm{subtask\, 3}(19\,\mathrm{pts}): m105,l50m \le 10^5,l \le 50T=0T=0

subtask4(23pts):\mathrm{subtask\, 4}(23\,\mathrm{pts}): m,l105m,l \le 10^5T=0T=0

subtask5(15pts):\mathrm{subtask\, 5}(15\,\mathrm{pts}): m,l3105m,l \le 3 \cdot 10^5T=0T=0

subtask6(26pts):\mathrm{subtask\, 6}(26\,\mathrm{pts}): m,l5106m,l \le 5 \cdot 10^6T=1T=1

对于所有测试点保证 1wi1091 \le w_i \le 10^9maxi=1ng(si)1018\max_{i=1}^{n}g(s_i) \le 10^{18}si1|s_i| \ge 1n2105n \le 2 \cdot 10^5

对于 T=0T=0 的子任务保证答案绝对值属于区间 (1,108)(1,10^8)

保证 sis_i 仅由字符 abcd 构成

系统支持 128128 位整数。