【bzoj3209】: 花神的数论题

首先二进制数中1的个数最多就是64个

设所有<=n的数里二进制中1的个数为i的有a[i]个

那么答案就是

 然后快速幂

求a[i]可以用DP

设在二进制中从高到低考虑到第k位,第k位之前的1的个数是cnt,n总共有len位

若第k位==1 那么 a[cnt+j]+=C(len-k,j) (j<=len-k)

其实就是前k-1位都与n前k-1位相等,第k位为0,后len-k随意选择j个1时对a的贡献

  1. /* http://www.cnblogs.com/karl07/ */
  2. #include <cstdlib>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <cmath>
  6. #include <algorithm>
  7. using namespace std;
  8. #define ll long long
  9. const ll p=;
  10. ll n,len;
  11. ll c[][],a[];
  12.  
  13. ll Q_pow(ll x,ll y){
  14. ll ans=;
  15. while (y){
  16. if (y&) ans=ans*x%p;
  17. x=x*x%p;
  18. y=(y>>);
  19. }
  20. return ans;
  21. }
  22.  
  23. int main(){
  24. scanf("%lld",&n);
  25. for (ll x=n;x;x=(x>>)) len++;
  26. for (int i=;i<len;i++){
  27. c[i][]=c[i][i]=;
  28. for (int j=;j<i;j++){
  29. c[i][j]=c[i-][j]+c[i-][j-];
  30. }
  31. }
  32. int cnt=,ans=;
  33. for (int i=len-;i>=;i--){
  34. if (((n>>i)&)){
  35. for (int j=;j<=i;j++){
  36. a[j+cnt]+=c[i][j];
  37. }
  38. cnt++;
  39. }
  40. }
  41. a[cnt]++;
  42. for (int i=;i<=len;i++){
  43. ans=ans*Q_pow(i,a[i])%p;
  44. }
  45. printf("%lld\n",ans);
  46. return ;
  47. }

感觉写的自己都看不懂

【bzoj3209】: 花神的数论题 数论-DP的更多相关文章

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

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

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

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

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

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

  4. BZOJ3209 花神的数论题 【组合数学+数位DP+快速幂】*

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

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

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

  6. [bzoj3209]花神的数论题_数位dp

    花神的数论题 bzoj-3209 题目大意:sum(i)表示i的二进制表示中1的个数,求$\prod\limits_{i=1}^n sum(i)$ 注释:$1\le n\le 10^{15}$. 想法 ...

  7. [Bzoj3209]花神的数论题(数位dp)

    3209: 花神的数论题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2633  Solved: 1182[Submit][Status][Disc ...

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

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

  9. [BZOJ3209]花神的数论题 组合数+快速幂

    3209: 花神的数论题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2498  Solved: 1129[Submit][Status][Disc ...

随机推荐

  1. Python内置函数:read()

    文章转载于:http://blog.csdn.net/sxingming/article/details/51337768(博主:快递小哥) 1> >>> f=open(r&q ...

  2. 图解缓存淘汰算法一之LRU

    1.概念分析 LRU(Least Recently Used),即最近最少使用.怎么理解这个概念呢?我一开始见到这个概念的时候,以为"最近","最少"都是修饰使 ...

  3. 2014.10.1 Cmd更改系统时间

    Process p = new Process(); //Process类有一个StartInfo属性 //设定程序名 p.StartInfo.FileName = "cmd.exe&quo ...

  4. Winsock 示例

    #include "stdafx.h" #include <Windows.h> #include <iostream> #pragma comment(l ...

  5. nfs cron shell 作业

    作业一: nginx反向代理三台web服务器,实现负载均衡 所有的web服务共享一台nfs的存储 2台服务器 nginx [lb] :101.200.206.6 nginx [web]:101.200 ...

  6. javascript——对象的概念——Object(未完)

    http://www.blogjava.net/zkjbeyond/archive/2006/04/16/41336.html javascript中对象只包括属性和方法两种成员.ECMA-262 把 ...

  7. python 2.7.5升级到3.4.x

    wget https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tgz .tgz cd Python-/ Python ./configure ma ...

  8. DAY17-认证系统

    COOKIE 与 SESSION 概念 cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. cookie ...

  9. 下载Django

    Django下载教程以及学习教程https://code.ziqiangxuetang.com/django/django-queryset-api.html 或者直接搜索自强学堂

  10. 关于fragment生命周期的两张图片

    图1,fragment的生命周期,图2,fragment生命周期对应activity的生命周期