UOJ Logo Universal Online Judge

UOJ

#46. Luv letter

统计
e3TEwR.jpg

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$

下发文件下载