最长待机(sleep)
题目描述
给定两个集合 S,T 和一个整数 n,你需要求出有多少个序列 a 满足以下条件:
- 0≤∣a∣≤n。
- 对于所有 1≤i≤∣a∣,ai∈S。
- 对于所有 1≤i≤∣a∣−1,ai≤ai+1。
- ⨁i=1∣a∣ai∈T。
其中 ⊕ 表示二进制下按位异或。
Test 组询问,每次 S,T 不变,即给定 n 求出答案对 109+7 取模后的结果,强制在线。
输入格式
第一行两个整数 ∣S∣,∣T∣,表示 S,T 的大小。
第二行 ∣S∣ 个整数表示 S。
第三行 ∣T∣ 个整数表示 T。
第四行一个整数 Test 表示数据组数。
接下来 Test 行,每行三个整数 n′,a,b,每次你的 n 等于 (n′⊕(ans+b))moda,其中 ans 是上一次询问输出的答案,初始为 0,⊕ 表示二进制下按位异或。
输出格式
输出 Test 行,每行一个整数表示答案。
样例 1 输入
3 1
1 2 3
0
1
2 100 1
样例 1 输出
5
样例 1 解释
a 共有 5 种选择:[],[1,1],[2,2],[3,3],[1,2,3]。
数据范围
对于 100% 的数据,满足 1≤Test≤105,0≤Si,Ti<228,1≤∣S∣,∣T∣≤27,1≤n′,a,b≤108。不保证 S,T 中元素互不相同。
| 测试点编号 |
∣S∣≤ |
∣T∣≤ |
Si,Ti< |
Test≤ |
a≤ |
特殊性质 |
| 1~4 |
20 |
27 |
228 |
105 |
108 |
无 |
| 5~6 |
27 |
220 |
10 |
| 7~10 |
105 |
10 |
| 11~18 |
100 |
| 19 |
1 |
228 |
108 |
| 20~23 |
27 |
10 |
A |
| 24~27 |
105 |
| 28~29 |
10 |
B |
| 30~33 |
无 |
| 34~40 |
100 |
| 41~44 |
26 |
108 |
| 45~50 |
27 |
- 特殊性质 A:保证 S 中的元素线性无关,即不存在两个 S 的不同非空子集 T1,T2 满足 T1 中所有元素的异或和等于 T2 中所有元素的异或和。
- 特殊性质 B:保证 T 中的元素大小不超过 3。