利物浦集合
Problem Description
对于 n,m,k,一个长度为 n 的整数数列 a1,a2,a3,⋯,an 如果满足下面的所有条件,则称它为利物浦集合。
- 0≤a1≤a2≤a3≤⋯≤an<2m。
- ⊕i=1nai=0,其中 ⊕ 表示二进制按位异或。
- 对于所有整数 i(1≤i≤n−k),ai=ai+k。
记函数 f (n,m,k) 表示对于 n,m,k 的不同利物浦集合的个数
对 1000000007 取模后的值
。
你的目标是计算一些与函数 f 有关的值。具体内容见 输入/输出格式。
本题包含多组测试数据。
首先在第一行输入一个整数 T(1≤T≤100)表示测试数据组数。
对于每一组测试数据,输入包含两行。
第一行包含三个整数 n1,m1,k1(1≤n1≤107,1≤∑n1≤6×107,1≤m1≤23,1≤k1≤n1)。
第二行包含两个整数 n2,m2(1≤n2≤106,1≤∑n2≤107,1≤m2≤23)。
Output
对于每一组测试数据,输出包含两行。
第一行包含一个整数表示 f (n1,m1,k1)。
第二行包含两个整数 xor,sum,分别表示所有 f (n2,m2,i)(1≤i≤n2)的异或和,和所有 f (n2,m2,i)2(1≤i≤n2)的和对 1000000007 取模后的值。
具体地,xor,sum 满足以下条件:
xor=⊕i=1n2f (n2,m2,i)
$$sum=(\sum_{i=1}^{n_2}f\ (n_2,m_2,i)^2)\bmod 1000000007
$$
其中 ⊕ 表示二进制按位异或,mod 表示取模,例如 3mod2=1,(−7)mod3=2。
4
2 2 1
3 2
3 4 2
2 3
4 3 2
1 1
99999 23 10000
100000 22
Sample Output
0
0 42
50
8 64
42
1 1
125954947
904110746 926732671
Hint
在样例的第一组测试数据的第一问中,f (2,2,1)=0,因为不存在任何一个序列满足条件。
在样例的第一组测试数据的第二问中:
- f (3,2,1)=1,即序列 a1=1,a2=2,a3=3 满足题意。
- f (3,2,2)=f (3,2,1)+3,即对于整数 i(1≤i≤3),序列 a1=0,a2=a3=i 满足题意。
- f (3,2,3)=f (3,2,2)+1,即序列 a1=a2=a3=0 满足题意。
Source
2025“钉耙编程”中国大学生算法设计暑期联赛(4)