
Statement
给出$n$,以下有若干定义:
定义排列组为两个长度为$n$的排列构成的有序二元组;
定义好的排列组为满足以下条件的排列组:
1、若该排列组为$(a,b)$,那么至多存在一个$i \in [1,n]$满足$a_i = b_i$;
2、对于任意$i \in [1,n]$,一定存在一个$j \in [1,n]$满足$a_i = b_j , a_j = b_i$,$j$可能等于$i$。
定义一个好的排列组的权值为满足以下条件的长度为$n$的排列$p$的数量:
1、若该排列组为$(a,b)$,那么至少存在一个$i \in [1,n]$满足$a_i = p_i$,至少存在一个$j \in [1,n]$满足$b_j = p_j$。
你需要求的是所有好的排列组的权值的平均值$\bmod\ 998244353$。
Input Format
每一组数据有多组询问。
每组数据的第一行$2$个正整数$MAX,T$表示该组数据中最大的$n$的可能值和询问组数,即这组数据中所有询问的$n$均$\leq MAX$。
第二行三个不大于$2^{64} - 1$的非负整数$SA,SB,SC$表示随机数种子。
因为数据组数较多,直接读入较为耗时,所以下发文件中下发了一份random.cpp
,其中包含了一个随机数生成器,我们使用这个随机数生成器生成输入数据。它的使用方法为:在读入$MAX$和$T$后调用init()
函数,在之后的询问中每一次调用get()
函数即可得到当前询问的$n$值。
在极限数据范围($MAX=8888888,T=5888888$)下,随机数生成器会占用约$34MB$空间和$0.3s$时间,请注意这一点。
你还可以通过随机数生成器获取输入数据的一些性质,比如:数据中任意两组询问的$n$不同,且当$SA,SB,SC$均为$0$时,你的询问恰好是从$1$到$T$依次询问。你可以利用这些性质调试你的程序。
Output Format
因为询问数量很多,所以你只需要输出所有询问的答案对$998244353$取模之后的结果的异或和。
Sample
Sample Input
2 2
0 0 0
Sample Output
1
Explanation
当$n=1$时,只有一个排列组$(\{1\} , \{1\})$,对于这一个排列组有一个排列$p = \{1\}$满足题设条件,所以答案为$1$;
当$n=2$时,有两个排列组$(\{1,2\} , \{2,1\}) , (\{2,1\} , \{1,2\})$,对于这两个排列组均不存在排列满足题设条件,所以答案为$0$;
所以你需要输出的值为$1\ \texttt{xor}\ 0 = 1$。
Down
在选手文件中共下发了$3$个样例文件。
Constraint
测试点编号 | $MAX=$ | $T=$ |
---|---|---|
$1$ | $6$ | $6$ |
$2$ | $18$ | $18$ |
$3$ | $388$ | $388$ |
$4$ | $3888$ | $888$ |
$5$ | $4888$ | $4888$ |
$6$ | $88888$ | $18$ |
$7$ | $188888$ | $888$ |
$8$ | $588888$ | $58888$ |
$9$ | $3888888$ | $888888$ |
$10$ | $8888888$ | $5888888$ |
对于$MAX = T$的数据保证$SA = SB = SC = 0$。
对于$100 \%$的数据保证$1 \leq n \leq MAX \leq 8888888 , T \leq 5888888 , T \leq MAX , 0 \leq SA , SB , SC \leq 2^{64} - 1$,所有询问的$n$两两不同。
时间限制:$2s$
空间限制:$512MB$