#L3396. 「2020-2021 集训队作业」GDSOI2019 novel 加强版
「2020-2021 集训队作业」GDSOI2019 novel 加强版
题目描述
给定 ( n ) 个字符串 ( s_1, s_2, \cdots, s_n )。每个字符串都有一个权值 ( w_i )。
记 ( S[l:r] ) 为字符串 ( S ) 从第 ( l ) 个字符到第 ( r ) 个字符构成的子串(下标从 1 开始),( f(S, T) ) 为字符串 ( T ) 在字符串 ( S ) 中的出现次数。
记 [ 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} ]
对于 ( \forall h(S) = \frac{a}{b} ),其中 ( a, b ) 的最大公约数为 1,规定 ( \hat{h}(S) = a \cdot b^{-1} \mod 998244353 ),其中 ( b^{-1} ) 表示 ( b ) 在 ( \mod 998244353 ) 意义下的乘法逆元。可以证明在本题遇到的所有情形中 ( b ) 均存在乘法逆元。
对于所有 ( 1 \le i \le n, 1 \le j \le |s_i| ),请求出 ( h(s_i[1:j]) )。注意一些 subtask 仅需求出部分答案,详见输入输出格式。
输入格式
第一行包含两个整数 ( n, T ),分别表示字符串数和该测试点类型。
接下来 ( n ) 行,每行一个字符串和一个正整数,分别表示 ( s_i ) 和 ( w_i )。
输出格式
- 对于 ( T=0 ) 的 subtask,请以浮点数形式输出 ( h(s_1) )。输出结果与标准输出的绝对误差在 ( 10^{-4} ) 之内即算正确。
- 对于 ( T=1 ) 的 subtask,为减少输出量,你只需输出 ( \oplus_{1 \le i \le n, 1 \le j \le |s_i|} \hat{h}(s_i[1:j]) ),其中 ( \oplus ) 表示按位异或运算,亦即 C++ 语言中的
^运算符。
样例 1
- 输入:
4 0 ababcdcd 0 ab 12 abc 20 bc 15 - 输出:
15.666667
样例 2
- 输入:
4 1 ababcdcd 0 ab 12 abc 20 bc 15 - 输出:
980069045
数据范围与提示
记 ( m = \sum_{i=1}^{n} |s_i| ),( l = \max_{i=2}^{n} |s_i| )。
- ( \mathrm{subtask, 1}(3,\mathrm{pts}) ):( m, l \le 50 ),( T=1 );
- ( \mathrm{subtask, 2}(14,\mathrm{pts}) ):( m, l \le 2000 ),( T=1 );
- ( \mathrm{subtask, 3}(19,\mathrm{pts}) ):( m \le 10^5, l \le 50 ),( T=0 );
- ( \mathrm{subtask, 4}(23,\mathrm{pts}) ):( m, l \le 10^5 ),( T=0 );
- ( \mathrm{subtask, 5}(15,\mathrm{pts}) ):( m, l \le 3 \cdot 10^5 ),( T=0 );
- ( \mathrm{subtask, 6}(26,\mathrm{pts}) ):( m, l \le 5 \cdot 10^6 ),( T=1 );
对于所有测试点保证 ( 1 \le w_i \le 10^9 ),( \max_{i=1}^{n} g(s_i) \le 10^{18} ),( |s_i| \ge 1 ),( n \le 2 \cdot 10^5 )。
对于 ( T=0 ) 的子任务保证答案绝对值属于区间 ( (1, 10^8) )。
保证 ( s_i ) 仅由字符 ( a、b、c、d ) 构成。
系统支持 128 位整数。