题目

设 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[60],bl[60],f[60][60],x[60],y[60],m=0,a,b,k=1,n,mod=10000007,ans=1,qaq[60][60];
long long power(long long a,long long b){   //快速幂if(b==0)return 1;if(b==1)return a;return b%2==0?power(a*a%mod,b/2)%mod:a*power(a*a%mod,b/2)%mod;
}
int main(){memset(al,0,sizeof(al));memset(f,0,sizeof(f));memset(bl,0,sizeof(bl));memset(x,0,sizeof(x));memset(y,0,sizeof(y));memset(qaq,0,sizeof(qaq));for(int i=1;i<=60;i++)f[i][1]=f[i][i]=1;for(int i=2;i<=60;i++)for(int j=2;j<i;j++)f[i][j]=f[i-1][j-1]+f[i-1][j];for(int i=1;i<=60;i++)for(int j=1;j<=i;j++)qaq[i][j]=qaq[i-1][j]+f[i][j];for(int i=1;i<=60;i++)qaq[i][1]++;scanf("%lld",&b);qaq[0][1]=1;if(b%2==1)al[1]=1;while(b>1){b/=2;k++;if(b%2==1)al[k]=1;}for(int i=k;i>0;i--)if(al[i]){long long anss=1;for(int j=1;j<=i;j++){anss=anss*power(j+m,qaq[i-1][j])%mod;}ans=ans*anss%mod;m++;}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/wzyzxy/p/9069003.html

BZOJ3209(luogu 4317)花神的数论题题解相关推荐

  1. bzoj3209:3209: 花神的数论题

    觉得还是数位dp的那种解题形式但是没有认真的想,一下子就看题解.其实还是设置状态转移.一定要多思考啊 f[i][j]=f[i-1][j]+g[i-1][j] g[i][j]=f[i-1][j-1]+g ...

  2. #数位dp#洛谷 4317 花神的数论题

    感谢dalao@小粉兔的帮助 dalao's 博客园,dalao's 洛谷博客 题目 设f[i]f[i]f[i]表示iii转化为二进制后1的个数,求∏i=1nf[i]\prod_{i=1}^nf[i] ...

  3. 数据范围BZOJ 3209(花神的数论题-数位统计+1,被数据范围坑了)

    PS:今天上午,非常郁闷,有很多简单基础的问题搞得我有些迷茫,哎,代码几天不写就忘.目前又不当COO,还是得用心记代码哦! 3209: 花神的数论题 Time Limit: 10 Sec Memory ...

  4. [数位dp] bzoj 3209 花神的数论题

    [数位dp] bzoj 3209 花神的数论题 题意:中文题. 思路:和普通数位dp一样,这里转换成二进制,然后记录有几个一. 统计的时候乘起来就好了. 代码: #include"cstdl ...

  5. bzoj 3209: 花神的数论题 喵哈哈村的秘境探险(四)

    3209: 花神的数论题 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2169  Solved: 1006 [Submit][Status][Di ...

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

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

  7. 2018.10.27 bzoj3209: 花神的数论题(数位dp)

    传送门 数位dpdpdp经典题. 题面已经暗示了我们按照二进制位来数位dpdpdp. 直接dpdpdp多少个数有111个111,222个111,333个111-, 然后快速幂算就行了. 于是我们枚举前 ...

  8. 【bzoj3209】 花神的数论题

    http://www.lydsy.com/JudgeOnline/problem.php?id=3209 (题目链接) 题意 ${sum(i)}$表示${i}$的二进制表示中${1}$的个数.求${\ ...

  9. bzoj 3209 花神的数论题 —— 数位DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3209 算是挺简单的数位DP吧,但还是花了好久才弄明白... 又参考了博客:https://b ...

最新文章

  1. Linux纯脚本故障转移集群
  2. android+包+反编译,简单的Android之apk包反编译方法
  3. 2.3.3 浮点数的加减运算与强制类型转换
  4. 悬浮窗_华为手机悬浮窗设置在哪里
  5. Apache、Tomcat、IIS(PHP、JSP、ASP)共存及安装Tomcat
  6. dp之多重背包poj2392
  7. linux dev nfc,linux下的nfc开发
  8. 关于智能手机的基本知识
  9. 公司部分断电,这些人就没法干活?
  10. pycharm快捷键之①“上下移动某一行“②参数提示
  11. PS滤镜学习视频教程
  12. AMiner推荐论文:Strongly coupled N-doped graphene quantum dots/Ni(Fe)OxHy electrocatalysts with accelerat
  13. 当你的浏览器页面被篡改时,我们该怎么办
  14. 现在的FM电台呀,什么玩艺儿
  15. 解决:Not creating XLA devices, tf_xla_enable_xla_devices not set
  16. “跟消费谈恋爱,跟科技结婚”,汤臣倍健开启VDS新周期
  17. 手机电路板文件_PCB工程师必看,从图纸到成品,电路板的制作只需这三大流程...
  18. 【PyCharm】修改编辑器背景
  19. 第二章 基本Bean的装载
  20. 当你心态不好的时候,可以看看这些句子。Reset your Brain!

热门文章

  1. FFmpeg的H.264解码器源代码简单分析:概述
  2. FFmpeg源代码简单分析:avcodec_close()
  3. 修改CentOS默认yum源为国内镜像
  4. oracle总是未响应,求教 pl/sql连接本机数据库是未响应问题
  5. mysql创建表shop_ShopXO商城-支付方式 - 数据库设计 - 数据库表结构 - 果创云
  6. java消除整型数组中重复的元素,排序后输出新数组
  7. stl vector 容量与大小之间的关系
  8. 牛客网暑期ACM多校训练营(第九场)H. Prefix Sum(CDQ分治)
  9. TCP和UDP的不同
  10. Java 绘制艺术图案