题目描述
原题链接:Codeforces 1761D - Carry Bit。原出题人 unputdownable,经其同意后加强并上传 loj。
注意,不仅修改了数据范围,题意也有改动。
设一个数 v 的二进制表示中 1 的个数为 g(v)。
设 f(x,y)=g(x)+g(y)−g(x+y),也即 x 与 y 二进制相加时的进位数。
现给定 N,k(k≤N),你要对所有 n=k,k+1,⋯,N,求出
$$S(n,k)=\sum_{i=0}^{2^n-1}\sum_{j=0}^{2^n-1}[f(i,j)=k]
$$
答案对 109+7 取模。
输入格式
一行两个整数,N 和 k。
输出格式
为了避免输出量过大,我们采用如下方式输出。
设 fn=S(n,k)mod1000000007。
设 gn=nfn,且不取模(C++ 选手可使用 unsigned long long
类型计算并存储)。
你应当输出 $g_k\oplus g_{k+1}\oplus g_{k+2}\oplus\cdots\oplus g_N$,其中 ⊕ 表示按位异或运算。
3 1
36
3 0
64
998 244
630338983045
65537 65530
13776173599910
926878 926871
1105232236403512
1919810 114514
1431279937541241
数据范围与提示
对于 100% 的数据,0≤k≤N≤2×107。
以下记 r=N−k。
子任务编号 |
子任务分值 |
N |
k |
特殊性质 |
子任务依赖 |
1 |
2pts |
≤5 |
r=0 |
无 |
2 |
3pts |
无 |
1 |
3 |
5pts |
≤500 |
r=0 |
4 |
9pts |
无 |
2,3 |
5 |
5pts |
≤2000 |
r=0 |
3 |
6 |
13pts |
无 |
4,5 |
7 |
5pts |
≤100000 |
r=0 |
5 |
8 |
5pts |
r≤10 |
7 |
9 |
7pts |
无 |
6,8 |
10 |
8pts |
≤1000000 |
r=0 |
7 |
11 |
8pts |
r≤10 |
8,10 |
12 |
10pts |
无 |
9,11 |
13 |
5pts |
≤20000000 |
r=0 |
10 |
14 |
15pts |
无 |
12,13 |