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. xss的一个tip

    其实可能不能算tip吧. 分享一下吧. unicode有四种编码方式 源文本:The &#x [Hex]:The &# [Decimal]:The \U [Hex]:\U0054\U0 ...

  2. 揭秘Patchwork APT攻击-恶意软件样本BADNEWS

    1.前言 在2016年左右研究人员发现一个与东南亚和中国南海问题的APT攻击,该APT攻击利用MS Offcie系列漏洞通过钓鱼邮件的形式欺骗受害者点击木马.以美国在内的各国政府和公司为目标发送了大量 ...

  3. linux 进程内存解析【转】

    转自:http://blog.csdn.net/lile269/article/details/6460807 之前我所了解的linux下进程的地址空间的布局的知识,是从APUE第2版的P430得来的 ...

  4. C#里partial关键字的作用

    1. 什么是局部类型?C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中.局部类型适用于以下情况: (1) 类型特别大,不宜放在一个 ...

  5. SSD固态硬盘检测工具AS SSD参数

    一. 使用AS SSD Benchmark进行查看 包括了4个方面的测试(顺序读写.4K随机读写.64线程4K读写.寻道时间) AS SSD的主要测试,也是网上最常见得到测试成绩的,是它主界面上持续. ...

  6. 决策树和adaboost

    前面:好老的东西啊,啊啊啊啊啊啊啊啊啊 来源于统计学习方法: 信息增益: 其中 信息增益率: 基尼指数: 取gini最小的 先剪枝——在构造过程中,当某个节点满足剪枝条件,则直接停止此分支的构造. 后 ...

  7. git clone命令使用

    git clone命令使用 分类: 项目构建2013-06-26 15:43 38660人阅读 评论(2) 收藏 举报 GitClone git clone 命令参数: usage: git clon ...

  8. java 内部类与控制框架

    应用程序控制框架(application framework)就是设计解决某类特殊问题的一个类,或一组类,要运用某个应用程序框架,通常是继承一个类或多个类,并覆盖这些方法.在覆盖的方法中编写代码定制应 ...

  9. es6遍历数组forof

  10. Sqlserver双机热备文档(无域)

    1. 配制环境 OS:Win7    DB:SQL Server R2 2. 基本配制 1.      开启sqlServer服务如下图-1 图-1 2.      开启sqlServer的tcp/i ...