【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的贡献

 /* http://www.cnblogs.com/karl07/ */
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define ll long long
const ll p=;
ll n,len;
ll c[][],a[]; ll Q_pow(ll x,ll y){
ll ans=;
while (y){
if (y&) ans=ans*x%p;
x=x*x%p;
y=(y>>);
}
return ans;
} int main(){
scanf("%lld",&n);
for (ll x=n;x;x=(x>>)) len++;
for (int i=;i<len;i++){
c[i][]=c[i][i]=;
for (int j=;j<i;j++){
c[i][j]=c[i-][j]+c[i-][j-];
}
}
int cnt=,ans=;
for (int i=len-;i>=;i--){
if (((n>>i)&)){
for (int j=;j<=i;j++){
a[j+cnt]+=c[i][j];
}
cnt++;
}
}
a[cnt]++;
for (int i=;i<=len;i++){
ans=ans*Q_pow(i,a[i])%p;
}
printf("%lld\n",ans);
return ;
}

感觉写的自己都看不懂

【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. 专题练习HDU题集 图论

    [图论01]最短路 Start Time : 2018-01-02 12:45:00    End Time : 2018-01-23 12:45:00 Contest Status : Runnin ...

  2. 组装恢复rbd

    标签: ceph,ceph实验,rbd cluster相关环境: # cat /etc/redhat-release CentOS Linux release 7.3.1611 (Core) # ce ...

  3. 2016.5.30让窗口处于最顶层的方法,比TopMost灵活

    最简单的方法Form. Activate() 稍复杂的方法用API,目前没有看出比第一种方法有什么好处(可操作其它窗口,这就是好处2016.7.31) [System.Runtime.InteropS ...

  4. laravel4 composer报错 d11wtq/boris v1.0.10 requires ext-pcntl

    laravel4 composer报错 d11wtq/boris v1.0.10 requires ext-pcntl laravel 4.2 用composer 安装任何包都会报这个错,通过谷歌找到 ...

  5. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 85

    UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 85;import sys reload(sys) sys.s ...

  6. XE Button Color

    XE Button Color,FMX Button 颜色 也可以放个rectangle+Glyph控件. http://blogs.embarcadero.com/sarinadupont/2014 ...

  7. XMPP 客户端和服务端

    GPLv2授权不能商用 XMPP协议的客户端软件列表 http://zh.wikipedia.org/wiki/XMPP%E5%8D%94%E8%AD%B0%E7%9A%84%E5%AE%A2%E6% ...

  8. java执行linux命令的工具类

    package com.starfast.common.util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import ja ...

  9. valgrind详解

    调不尽的内存泄漏,用不完的Valgrind Valgrind 安装 1.valgrind 安装包下载地址:http://valgrind.org/downloads/repository.html(使 ...

  10. Swing简介

    ---------------siwuxie095                         Swing 简介:     Java Swing 是 Java Foundation Classes ...