P4317 花神的数论题

题目背景

众所周知,花神多年来凭借无边的神力狂虐各大 OJ、OI、CF、TC …… 当然也包括 CH 啦。

题目描述

话说花神这天又来讲课了。课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了。 花神的题目是这样的:设 sum(i)表示 i 的二进制表示中 1 的个数。给出一个正整数 N ,花神要问你 ∏i=1N​sum(i) ,也就是sum(1)∼sum(N)的乘积。

输入输出格式

输入格式:

一个正整数 N。

输出格式:

一个数,答案模 10000007 的值。

输入输出样例

输入样例#1: 复制

3
输出样例#1: 复制

2

说明

对于 100% 的数据,N≤10^15


Solution

数位DP

但是不是直接处理出乘积,而是枚举$i$,处理出有多少个数恰好有$i$个1.

最后直接用快速幂乘起来即可。

Code

#include<bits/stdc++.h>
#define LL long long
#define mod 10000007
using namespace std; LL n; LL mpow(LL a, LL b) {
LL res = ;
for(; b; b >>= , a = a * a % mod)
if(b & ) res = res * a % mod;
return res;
} LL dp[][][][];
int num[];
LL dfs(int dep, int up, int sum, int d) {
if(!dep && sum == d) return dp[dep][up][sum][d] = ;
if(!dep) return dp[dep][up][sum][d] = ;
if(~dp[dep][up][sum][d]) return dp[dep][up][sum][d];
int tot = up ? num[dep] : ;
LL tmp = ;
for(int i = ; i <= tot; i ++)
tmp += dfs(dep - , up && i == tot, sum + i, d);
return dp[dep][up][sum][d] = tmp;
} LL ans[];
LL cot(LL x) {
int t = ;
memset(num, , sizeof(num));
while(x) {
num[++t] = x % ;
x >>= ;
}
for(int i = ; i <= ; i ++) {
memset(dp, -, sizeof(dp));
ans[i] = dfs(t, , , i);
}
LL res = ;
for(int i = ; i <= ; i ++)
res = (res * mpow(i, ans[i])) % mod;
return res;
} int main() {
scanf("%lld", &n);
printf("%lld", cot(n));
return ;
}

【洛谷】4317:花神的数论题【数位DP】的更多相关文章

  1. 洛谷$ P$4317 花神的数论题 数位$dp$

    正解:数位$dp$ 解题报告: 传送门! 开始看到感觉有些新奇鸭,仔细一想发现还是个板子鸭,,, 考虑设$f_{i}$表示$sum[j]=i$的$j$的个数 日常考虑$dfs$呗,考虑变量要设哪些$Q ...

  2. BZOJ 3209: 花神的数论题 [数位DP]

    3209: 花神的数论题 题意:求\(1到n\le 10^{15}\)二进制1的个数的乘积,取模1e7+7 二进制最多50位,我们统计每种1的个数的数的个数,快速幂再乘起来就行了 裸数位DP..\(f ...

  3. 【BZOJ3209】花神的数论题 数位DP

    [BZOJ3209]花神的数论题 Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级 ...

  4. BZOJ3209: 花神的数论题(数位DP)

    题目: 3209: 花神的数论题 解析: 二进制的数位DP 因为\([1,n]\)中每一个数对应的二进制数是唯一的,我们枚举\(1\)的个数\(k\),计算有多少个数的二进制中有\(k\)个\(1\) ...

  5. DP,数论————洛谷P4317 花神的数论题(求1~n二进制中1的个数和)

    玄学代码(是洛谷题解里的一位dalao小粉兔写的) //数位DP(二进制)计算出f[i]为恰好有i个的方案数. //答案为∏(i^f[i]),快速幂解决. #include<bits/stdc+ ...

  6. 洛谷P4317 花神的数论题

    洛谷题目链接 数位$dp$ 我们对$n$进行二进制拆分,于是就阔以像十进制一样数位$dp$了,基本就是套模板.. 接下来是美滋滋的代码时间~~~ #include<iostream> #i ...

  7. 洛谷 P4317 花神的数论题 || bzoj3209

    https://www.lydsy.com/JudgeOnline/problem.php?id=3209 https://www.luogu.org/problemnew/show/P4317 设c ...

  8. bzoj3209 花神的数论题——数位dp

    题目大意: 花神的题目是这样的 设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,花神要问你 派(Sum(i)),也就是 sum(1)—sum(N) 的乘积. 要对1000 ...

  9. [bzoj3209][花神的数论题] (数位dp+费马小定理)

    Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了. ...

  10. BZOJ 3209 花神的数论题 数位DP+数论

    题目大意:令Sum(i)为i在二进制下1的个数 求∏(1<=i<=n)Sum(i) 一道非常easy的数位DP 首先我们打表打出组合数 然后利用数位DP统计出二进制下1的个数为x的数的数量 ...

随机推荐

  1. Python time()方法

    from:http://www.runoob.com/python/att-time-time.html 描述 Python time time() 返回当前时间的时间戳(1970纪元后经过的浮点秒数 ...

  2. avalonJS-源码阅读(二)

    上一篇文章讲述的avalon刷页面所用到的几个函数.这篇则是主要讲avalon对刷DOM刷出来的avalon自定义属性如何处理的. 目录[-] avalon页面处理(2) 数据结构 解析avalon标 ...

  3. 如何成为技术大牛——阿里CodeLife

    天天写业务代码的程序员,怎么成为技术大牛,开始写技术代码? 几个误区 跟着大牛,就可以成为大牛.首先,大牛时间很宝贵,不可能花很多时间去指导你:其次,简单的模仿大牛,只能学到表面知识,不可能成为大牛: ...

  4. java基础56 HTML5的标签知识(网页知识)

    本文知识点(目录): 1.html常用标签    2.html实体标签    3.html媒体标签    4.html超链接标签    5.html图片标签    6.html标个标签 7.html框 ...

  5. C++ : Boost : Rational 有理数类

    因为一些不为人知的原因, 我需要一些能减少我程序误差的东西.于是找到了这个类. 然后下载了Boost这个庞大的库. 安装与配置 在官网上找到下载地址, 大概有71MB, 下来来解压到任意位置就好了. ...

  6. C++链接与装载

    1..obj文件的内部结构 2.映射到进程虚拟空间 3.链接的原理    C++ Code  123456789   1.未解决符号表:提供了所有在该编译单元里引用但是定义并不在本编译单元里的符号及其 ...

  7. sem_open中信号量命名

    问题: sem_open will failed with "No such file or directory"   解释1: 这是由于在Linux内核中,创建信号量的默认路径是 ...

  8. ABP zero 3.2 发布

    v3.2.0 (2017-03-07) Common Tenant based UI customizations (allow tenants to upload custom CSS and lo ...

  9. centos下安装zabbix

    1. 安装mysql CREATE DATABASE zabbix;GRANT ALL ON zabbix.* TO 'zabbix'@'192.168.19.%' IDENTIFIED BY '12 ...

  10. VM ESXI 服务器虚拟化资料积累

    编者按: 公司业务需求,公有云平台不能满足部署mac系统环境的需求,故租赁或托管物理机自行虚拟化,使用的工具就是VM ESXI .从部署到应用都没有遇到过什么问题,但是在今天发生VMware vSph ...