【BZOJ3209】花神的数论题 数位DP
【BZOJ3209】花神的数论题
Description
背景
众所周知,花神多年来凭借无边的神力狂虐各大 OJ、OI、CF、TC …… 当然也包括 CH 啦。
描述
话说花神这天又来讲课了。课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了。
花神的题目是这样的
设 sum(i) 表示 i 的二进制表示中 1 的个数。给出一个正整数 N ,花神要问你
派(Sum(i)),也就是 sum(1)—sum(N) 的乘积。
Input
一个正整数 N。
Output
一个数,答案模 10000007 的值。
Sample Input
3
Sample Output
2
HINT
对于样例一,1*1*2=2;
数据范围与约定
对于 100% 的数据,N≤10^15
题解:又一个题目名称和题本身一点关系都没有的~
很容易想到按位拆分,分别考虑1的个数是k的数有多少个,然后快速幂一下计算贡献
怎么知道1的个数是k的数有多少个呢?预处理出组合数,然后数位DP吧!(对本蒟蒻来说就是INF的细节)
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long ll;
const ll mod=10000007;
ll c[60][60];
ll cnt[60];
ll n,sum,ans;
ll pm(ll x,ll y)
{
ll z=1;
while(y)
{
if(y&1) z=z*x%mod;
x=x*x%mod,y>>=1;
}
return z;
}
int main()
{
c[0][0]=1;
ll i,j;
for(i=1;i<=50;i++)
{
c[i][0]=1;
for(j=1;j<=i;j++) c[i][j]=c[i-1][j-1]+c[i-1][j];
}
scanf("%lld",&n);
for(i=50;i;i--)
{
if(n&(1ll<<i-1))
{
for(j=sum;j<=50;j++) cnt[j]+=c[i-1][j-sum];
sum++;
}
}
cnt[sum]++;
for(ans=i=1;i<=50;i++) ans=ans*pm(i,cnt[i])%mod;
printf("%lld",ans);
return 0;
}
【BZOJ3209】花神的数论题 数位DP的更多相关文章
- BZOJ3209: 花神的数论题(数位DP)
题目: 3209: 花神的数论题 解析: 二进制的数位DP 因为\([1,n]\)中每一个数对应的二进制数是唯一的,我们枚举\(1\)的个数\(k\),计算有多少个数的二进制中有\(k\)个\(1\) ...
- bzoj3209 花神的数论题——数位dp
题目大意: 花神的题目是这样的 设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,花神要问你 派(Sum(i)),也就是 sum(1)—sum(N) 的乘积. 要对1000 ...
- [bzoj3209][花神的数论题] (数位dp+费马小定理)
Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了. ...
- BZOJ 3209: 花神的数论题 [数位DP]
3209: 花神的数论题 题意:求\(1到n\le 10^{15}\)二进制1的个数的乘积,取模1e7+7 二进制最多50位,我们统计每种1的个数的数的个数,快速幂再乘起来就行了 裸数位DP..\(f ...
- BZOJ 3209 花神的数论题 数位DP+数论
题目大意:令Sum(i)为i在二进制下1的个数 求∏(1<=i<=n)Sum(i) 一道非常easy的数位DP 首先我们打表打出组合数 然后利用数位DP统计出二进制下1的个数为x的数的数量 ...
- bzoj 3209 花神的数论题 —— 数位DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3209 算是挺简单的数位DP吧,但还是花了好久才弄明白... 又参考了博客:https://b ...
- 洛谷$ P$4317 花神的数论题 数位$dp$
正解:数位$dp$ 解题报告: 传送门! 开始看到感觉有些新奇鸭,仔细一想发现还是个板子鸭,,, 考虑设$f_{i}$表示$sum[j]=i$的$j$的个数 日常考虑$dfs$呗,考虑变量要设哪些$Q ...
- 花神的数论题(数位dp)
规定sum[i] 为i里面含1的个数 ,求从1-N sum[i]的乘积. 数为64位内的,也就是sum[i]<=64的,这样可以dp求出1-N中含k个1的数有多少个,快速幂一下就可以了. 有个地 ...
- BZOJ3209 花神的数论题 【组合数学+数位DP+快速幂】*
BZOJ3209 花神的数论题 Description 背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 描述 话说花神这天又来讲课了.课后照例有 ...
随机推荐
- 奇怪也哉!做一个WebApp居然遇到了FF浏览器进不去某页的问题。
一个小WebApp,原定login完后就进某页面.前天晚上之前一直在FF浏览器上调试,都正常. 前天晚上稍修改了,提交war上传,之后就休息了. 昨天晚上有些事情处理打开一看,乖乖,点登录后就在登陆页 ...
- Android项目-几种常见的应用架构
android两种Tab分页的方式:TabActivity和ActivityGroup http://www.fengfly.com/plus/view-209429-1.html 1.单个Activ ...
- [1-7] 把时间当做朋友(李笑来)Chapter 7 【从此时此刻开始改变】 摘录
大多数事情都需要提前准备,也都可以提前准备.认识到这一点本身就几乎是一切改变的起点. 任何动作演练到一定的次数,就能做到甚至在无意识的情况下都可以准确完成的地步.而他只不过是把这个原理应用到了极致而已 ...
- 解决window10系统电脑插入耳机之后没有声音的问题
其实办法也是从百度百科上查到的 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 可能是因为自己某个不小心的操作更改了设置 1. 首先要点开设置按钮,在搜索栏输入控制面板 (当然知道控制面板在哪里的小伙伴就不用 ...
- win10 在当前目录下 打开cmd
windows7 : 按住 shift 键 , 右键 就有该选项. windows10 : 运行下面的 注册表文件: 该注册表文件内容如下: Windows Registry Editor Versi ...
- Mybatis学习-1(转自 csdn- http://my.csdn.net/hupanfeng 的文章)
简介 MyBatis的前身叫iBatis,本是apache的一个开源项目, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBa ...
- Atitit.手机验证码的破解---伪随机数
Atitit.手机验证码的破解---伪随机数 1. 手机验证码几乎都是伪随机数1 2. 伪随机数1 2.1. 生成方法编辑1 2.2. 随机数的计算方法在不同的计算机中是不同的,即使在相同的计算机中安 ...
- 使用spring-boot-maven-plugin打包
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> ...
- memcached 经常使用命令最全总结大全
1.首先.总结一下memcached的一些基本设置 -p 监听的port -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcached ...
- WebMethod Session
[WebMethod(EnableSession = true)] public static string SayHello() { LxUserContext depno = HttpContex ...