loj6851
(CF1761D Tester Solution in Chinese)
定义 \(L(v)=\log_2\operatorname{lowbit}(v+1)\);也就是说,\(L(v)\) 是 \(v\) 在二进制下末位 \(1\) 的个数。
例如,\(L((1011)_2)=2,L((11100100111)_2)=3\)。
然后定义
\]
则,答案可以被描述为
\]
考虑对其做递推。
通过对 \(i,j\) 末位做分类讨论,容易得到
\]
而这立刻给出
\]
\]
也就是说,我们只用去研究 \(C(n,k,0)\),就可以获得答案了!
于是对其,我们定义一个 BGF(二元生成函数)
\]
然后就得到
\]
\]
\]
\]
这样,我们的答案就是
\]
考虑如何计算 \(S(n,k)\)。
\]
这两部分是类似的,现在我们就考虑第一部分(为了减少手算量)。我们仅仅观察第一部分好了。
不妨称之为 \(A_n\)。
\]
考虑使用 ODE 来计算所有 \(A_n\)。
设
\]
\]
则
\]
于是
\]
即
\]
\]
从而
\]
考虑边界,也就是
\]
于是我们就可以在 \(O(n)\) 时间内计算出数列 \(G\) 了。
事实上,如果模数为 \(998244353\),我们还可以用整式递推在 \(O(\sqrt n\log n)\) 时间内求出单项 \(S(n,k)\)。
参考代码。
loj6851的更多相关文章
随机推荐
- canvas实现屏幕截图
1.引入html2canvas.js 2.调用 2.1 <script src="html2canvas.js"></script> 2.2 定义一个div ...
- VMvare虚拟机的安装及新建虚拟机(一)
a:hover { color: rgba(255, 102, 0, 1) } 一.VMvare虚拟机的安装 1.首先双击--你下载的安装包,这里我分享百度云盘,供大家下载:http://pan.ba ...
- Qt使用图片旋转绘制圆环,圆弧类UI界面(方法可适用于winform和WPF等其余UI绘制)
先上效果图: 这个主要是一个试剂杯盘的循环图,相信大家伙一定都想到了使用GDI和三角函数来进行计算,但如果没有实际尝试,可能会踩一些坑,留此文帮助大家方便快捷的绘制出类似圆环的UI效果. 这里主要是使 ...
- 题解[CF674D]Bearish_Fanpages
题意 原意简述版 有 \(n\) 个公司,每个公司在某社交媒体拥有一个粉丝专页.该社交媒体推出了"关注"功能,每个粉丝专页必须"关注"一个粉丝专页,保证不会有自 ...
- C# 教你如何终止Task线程
我们在多线程中通常使用一个bool IsExit类似的代码来控制是否线程的运行与终止,其实使用CancellationTokenSource来进行控制更为好用,下面我们将介绍CancellationT ...
- Thread记录
项目用到了线程 所以写出来留作以后复习线程Thread类包含在System.Threading命名空间有关线程的操作主要包含在这个类中现在总结一下Thread的常用方法和属性 Start([参数])/ ...
- [2015年NOIP提高组] 跳石头
一年一度的"跳石头"比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石.组委会已经选择好了两块岩石作为比赛起点和终点.在起点和终点之间,有 <spa ...
- linux mint 中文支持
sudo apt-get install localessudo dpkg-reconfigure locales 设置zh_CN.UTF-8
- Java基础学习:11、断点调试
1.可以用来查看错误以及查看代码的运行过程. 2.如何使用:
- mysql学习问题解决
1.字符串转时间格式函数: STR_TO_DATE('2017-10-19 16:47:00', '%Y-%m-%d %H:%i:%s') oracle的为to_date 2.specified tw ...