BZOJ3209(luogu 4317)花神的数论题题解
题目
设 sum(i) 表示 i 的二进制表示中 1 的个数。给出一个正整数 N ,花神要问你 派(Sum(i)),也就是 sum(1)—sum(N) 的乘积(n<=1e15)。
分析
好吧,一看数据范围及可知暴力不可做我是不会说我打了一次暴力得了50分的,看一下让求的,恶心,仔细观察后觉得是一道数位DP,可先将n换做二进制,在每一位每一位的分析,若为0则跳过,若为1则处理一番,在处理时可先脚动模拟一番,发现和杨辉三角略有联系,故先处理处杨辉三角,最终出答案(代码里都有体现),时间是:luogu 0ms,bzoj 48ms 从中体现出了bzoj评测机运算速度较慢。
上代码
#include<bits/stdc++.h>
using namespace std;
long long al[],bl[],f[][],x[],y[],m=,a,b,k=,n,mod=,ans=,qaq[][];
long long power(long long a,long long b){ //快速幂
if(b==)
return ;
if(b==)
return a;
return b%==?power(a*a%mod,b/)%mod:a*power(a*a%mod,b/)%mod;
}
int main(){
memset(al,,sizeof(al));
memset(f,,sizeof(f));
memset(bl,,sizeof(bl));
memset(x,,sizeof(x));
memset(y,,sizeof(y));
memset(qaq,,sizeof(qaq));
for(int i=;i<=;i++)
f[i][]=f[i][i]=;
for(int i=;i<=;i++)
for(int j=;j<i;j++)
f[i][j]=f[i-][j-]+f[i-][j];
for(int i=;i<=;i++)
for(int j=;j<=i;j++)
qaq[i][j]=qaq[i-][j]+f[i][j];
for(int i=;i<=;i++)
qaq[i][]++;
scanf("%lld",&b);
qaq[][]=;
if(b%==)
al[]=;
while(b>){
b/=;
k++;
if(b%==)
al[k]=;
}
for(int i=k;i>;i--)
if(al[i]){
long long anss=;
for(int j=;j<=i;j++){
anss=anss*power(j+m,qaq[i-][j])%mod;
}
ans=ans*anss%mod;
m++;
}
printf("%lld\n",ans);
return ;
}
BZOJ3209(luogu 4317)花神的数论题题解的更多相关文章
- Luogu 4317 花神的数论题
披着数论题外衣的数位dp. 相当于数一数$[1,n]$范围内$1$的个数是$1,2,3,4,...log(n)$的数各有多少个,直接在二进制下数位dp. 然而我比较sb地把(1e7 + 7)当成了质数 ...
- bzoj3209:3209: 花神的数论题
觉得还是数位dp的那种解题形式但是没有认真的想,一下子就看题解.其实还是设置状态转移.一定要多思考啊f[i][j]=f[i-1][j]+g[i-1][j] g[i][j]=f[i-1][j-1]+g[ ...
- Luogu P4317 花神的数论题
也是一道不错的数位DP,考虑先转成二进制后再做 转化一下问题,考虑统计出\([1,n]\)中在二进制下有\(i\)个\(1\)的方案数\(cnt_i\),那么答案显然就是\(\prod i^{cnt_ ...
- 洛谷$ P$4317 花神的数论题 数位$dp$
正解:数位$dp$ 解题报告: 传送门! 开始看到感觉有些新奇鸭,仔细一想发现还是个板子鸭,,, 考虑设$f_{i}$表示$sum[j]=i$的$j$的个数 日常考虑$dfs$呗,考虑变量要设哪些$Q ...
- 【BZOJ3209】花神的数论题 数位DP
[BZOJ3209]花神的数论题 Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级 ...
- BZOJ3209 花神的数论题 【组合数学+数位DP+快速幂】*
BZOJ3209 花神的数论题 Description 背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 描述 话说花神这天又来讲课了.课后照例有 ...
- 【bzoj3209】: 花神的数论题 数论-DP
[bzoj3209]: 花神的数论题 首先二进制数中1的个数最多就是64个 设所有<=n的数里二进制中1的个数为i的有a[i]个 那么答案就是 然后快速幂 求a[i]可以用DP 设在二进制中从 ...
- [Bzoj3209]花神的数论题(数位dp)
3209: 花神的数论题 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2633 Solved: 1182[Submit][Status][Disc ...
- [bzoj3209]花神的数论题_数位dp
花神的数论题 bzoj-3209 题目大意:sum(i)表示i的二进制表示中1的个数,求$\prod\limits_{i=1}^n sum(i)$ 注释:$1\le n\le 10^{15}$. 想法 ...
随机推荐
- Win10安装msi程序报错2503和2502错误解决方案
刚升级了系统到win10,重新搭建开发环境,在安装scala的时候一直报2503.2502错误,如图 试了好几种办法都不好使,现在罗列依次用到的三种方法: 一.命令提示符(管理员)启动 "w ...
- 使用SAP C4C rule editor动态控制UI上某个按钮是否显示
假设我想根据Sales Order的outbound delivery字段来控制这个Trigger Delivery按钮的动态显示: 首先Adapt->Edit Master Layout进入K ...
- 深入理解PHP传参原理(PHP5.2)
首先说下今天想到的一个问题.在编写php扩展的时候,似乎参数(即传给zend_parse_parameters的变量)是不需要free的.举例: PHP_FUNCTION(test) { char* ...
- jmeter报告优化---展示详细信息
参考文档:https://www.cnblogs.com/puresoul/p/5049433.html 楼上博主写的还是很详细,在报告优化这块,但是在操作中也走了一些弯路,我改动了两个点才成功,根据 ...
- The transaction log for database 'XXX' is full due to 'ACTIVE_TRANSACTION'.
Msg 9002, Level 17, State 4, Line 4The transaction log for database 'Test' is full due to 'ACTIVE_TR ...
- C# 局部类型 Partial
Partial是局部类型的意思.允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中.C#编译器在编译的时候仍会将各个部分的局部类型合并成一个完整的类 局部类型适用情况: (1) ...
- Gradle Goodness: Init Script for Adding Extra Plugins to Existing Projects
Gradle Goodness: Init Script for Adding Extra Plugins to Existing Projects Gradle is very flexible. ...
- ASP.NET Core MVC如何上传文件及处理大文件上传
用文件模型绑定接口:IFormFile (小文件上传) 当你使用IFormFile接口来上传文件的时候,一定要注意,IFormFile会将一个Http请求中的所有文件都读取到服务器内存后,才会触发AS ...
- 一致性模型(consistency model)
比如下面的例子: 一行X值在节点M和节点N上有副本 客户端A在节点M上写入行X的值 一段时间后,客户端B在节点N上读取行X的值 一致性模型所要做的就是决定客户端B能否看到客户端A写的值.一致性模型分为 ...
- .net 网站中如何动态播放音乐,页面如何播放音乐
向别人请教有好处也有坏处,好处是你可以相对比较快的知道要点,坏处就是你TM的发现你弄了那么久都是白弄. 昨天今天一直在找一个问题的解决方案,我的问题描述大概是这样子的:我用vs2012开发的.net网 ...