并不难,但是因为各种 SB 原因调了 1145141919810min(悲

我们会发现 \(\operatorname{sum}\) 其实很小,顶多就 \(50\),这启发我们统计每个 \(\operatorname{sum}\) 取值的数量。因此令 \(f_{i}\) 为满足 \(\operatorname{sum}(o) = i\) 的 \(o\) 的数量。

显而易见数位 dp 可以做。

//SIXIANG
#include <iostream>
#include <cstring>
#define MAXN 100000
#define int long long
#define QWQ cout << "QWQ" << endl;
using namespace std;
const int Mod = 10000000 + 7;
int qpow(int n, int m) {
int res = 1;
while(m) {
if(m & 1) res = res * n % Mod;
n = n * n % Mod, m >>= 1;
}
return res;
}
int f[200][50][2][2], tot, arr[MAXN + 10];
int pika(int i, int s, int limit, int lead, int num, int o) {
if(!i) return (s == o);
if(f[i][s][limit][lead] != -1) return f[i][s][limit][lead];
int lim = ((limit) ? (arr[i]) : 1), rest = 0;
for(int p = 0; p <= lim; p++)
rest += pika(i - 1, s + (p == 1), limit && (p == arr[i]), lead && (!p), (num << 1) + p, o);
f[i][s][limit][lead] = rest;
return rest;
}
int solve(int x) {
do {
arr[++tot] = x % 2;
x >>= 1;
} while(x);
int mul = 1; for(int p = 1; p <= 49; p++) {
memset(f, -1, sizeof(f));
int res = pika(tot, 0, 1, 1, 0, p);
mul = mul * qpow(p, res) % Mod;
}
return mul;
}
signed main() {
int n; cin >> n;
cout << solve(n) << endl;
}

题解 P4317 花神的数论题的更多相关文章

  1. P4317 花神的数论题,关于luogu题解粉兔做法的理解

    link 题意 设 \(\text{sum}(i)\) 表示 \(i\) 的二进制表示中 \(1\) 的个数.给出一个正整数 \(N\) ,求 \(\prod_{i=1}^{N}\text{sum}( ...

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

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

  3. P4317 花神的数论题 dp

    这题我一开始就想到数位dp了,其实好像也不是很难,但是自己写不出来...常规套路,f[i][j][k][t],从后往前填数,i位,j代表是否卡着上沿,k是现在有几个1,t是想要有几个.记忆化搜索就ok ...

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

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

  5. Luogu P4317 花神的数论题

    也是一道不错的数位DP,考虑先转成二进制后再做 转化一下问题,考虑统计出\([1,n]\)中在二进制下有\(i\)个\(1\)的方案数\(cnt_i\),那么答案显然就是\(\prod i^{cnt_ ...

  6. 洛谷 P4317 花神的数论题(组合数)

    题面 luogu 题解 组合数 枚举有多少个\(1\),求出有多少种数 扫描\(n\)的每一位\(1\), 强制选\(0\)然后组合数算一下有多少种方案 Code #include<bits/s ...

  7. P4317 花神的数论题 动态规划?数位DP

    思路:数位$DP$ 提交:5次(其实之前A过,但是调了调当初的程序.本次是2次AC的) 题解: 我们分别求出$sum(x)=i$,对于一个$i$,有几个$x$,然后我们就可以快速幂解决. 至于求个数用 ...

  8. P4317 花神的数论题

    题目 洛谷 数学方法学不会%>_<% 做法 爆搜二进制下存在\(i\)位\(1\)的情况,然后快速幂乘起来 My complete code #include<bits/stdc++ ...

  9. 洛谷P4317 花神的数论题

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

  10. 【洛谷】4317:花神的数论题【数位DP】

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

随机推荐

  1. 8.一个项目实战(下载CSDN博客文章)

    专栏地址 ʅ(‾◡◝)ʃ 前言 要写一个下载器,首先要实现一个接口函数,而这个函数可以对请求的数据进行处理也就是爬虫,其次才是写图形化界面 接口的实现 其实CSDN的浏览器页面的接口很复杂,是直接通过 ...

  2. BrokenPipeError错误和subprocess.run()超时参数在Windows上无效

    1.问题的发现   今天,一个在windows上运行良好的python脚本放到linux下报错,提示错误 BrokenPipeError: [Errno 32]Broken pipe.经调查是subp ...

  3. 安装mySql 出现 one more product requirements have not been satisified

    安装mySql 出现 one more product requirements have not been satisified 原因是缺少一些依赖环境. 在弹出的对话框中点击 否. 然后点击执行, ...

  4. linux常用指令记录

    给目标文件夹执行权限:chmod -R 777 html du -sh .  [对当前目录下所有的目录和文件的大小进行汇总,-s表示汇总,-h表示以KB, MB, GB, TB格式进行人性化显示]du ...

  5. 项目完成小结 - Django-React-Docker-Swag部署配置

    前言 最近有个项目到一段落,做个小结记录. 内容可能会多次补充,在博客上实时更新哈~ 如果是在公众号阅读这篇文章,可以点击「查看原文」访问最新版本~ 这个项目是前后端分离,后端为了快,依然用我的Dja ...

  6. webpack :There are multiple modules with names that only differ in casing

    1, webpack版本3.6.0 2. 报warning文件为 node_modules 下面webpack 里的hot.js和dev-server.js 3. 没有出现模块名混用大小写 解决方法: ...

  7. m3u8文件后缀jpg,png等处理方法及视频合并

    处理 # 解析伪装成png的ts def resolve_ts(src_path, dst_path): ''' 如果m3u8返回的ts文件地址为 https://p1.eckwai.com/ufil ...

  8. JavaScript:对象:如何判断对象是否有某个属性?操作符in

    使用in运算符来判断,有返回true,没有返回false:

  9. pythonfloat优雅的四舍五入

    开发中经常会有float四舍五入转int的需求,先看看浮点数直接转int的情形:无论如何float直接转int都不会四舍五入,而是直接抹去小数点. 这个需求很简单,实现也很简单,看过网友的实现,都不够 ...

  10. go语言的切片特性

    概述: 在使用切片进行赋值的时候,产生新的数组的指针指向原来的数组,只要修改新数组中的元素时,原来数组的元素也会改变. 测试代码: func TestSliceShareMemory(t *testi ...