bzoj3209】的更多相关文章

BZOJ3209 花神的数论题 Description 背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 描述 话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了. 花神的题目是这样的 设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,花神要问你 派(Sum(i)),也就是 sum(1)—sum(N) 的乘积. Input 一个正整数 N. Output 一个数,答案模 10000007 的值.…
[BZOJ3209]花神的数论题 Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了.花神的题目是这样的设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,花神要问你派(Sum(i)),也就是 sum(1)—sum(N) 的乘积. Input 一个正整数 N. Output 一个数,答案模 10000007 的值. Samp…
[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/kar…
花神的数论题 bzoj-3209 题目大意:sum(i)表示i的二进制表示中1的个数,求$\prod\limits_{i=1}^n sum(i)$ 注释:$1\le n\le 10^{15}$. 想法:喷一下题目...神tm数论题,明明是个dp. 显然,如果稍微打个表的话就可以发现,有很多数的sum是相等的,我们不想重复乘这么多次,所以我们想到将所有sum相等的数弄到一起然后快速幂.这样,就不难想到数位dp 状态:dp[i][j]表示i位,sum值是j的个数. 转移是容易的,按照数位dp的边界特…
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC -- 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦-- 我等蒟蒻又遭殃了.花神的题目是这样的设 sum(i) 表示 i 的二进制表示…
首先这道题目不难想到将答案转化为这种形式 2^s[2]*3*s[3]*…max*s[max] 这时候我们要分类讨论,设n的二进制位数为t 当1~n中二进制位数小于t时 我们可以直接用组合的知识,二进制有i个1一共有c(t-1,i) 当1~n中二进制位数等于t时 我们数位统计一下即可,具体的当第i位为1时,(从右往左标) 后面i-1位01情况随意,即s[j+s]=s[j+s]+c(i-1,j) (s为到第i位n所含1的个数(不包括第i位),0<=j<=i-1) 当第i位为0,不管他…… 最后用一…
二进制数位dp,就是把原本的数字转化成二进制而以,原来是10进制,现在是二进制来做,没有想像的那么难 不知到自己怎么相出来的...感觉,如果没有一个明确的思路,就算做出来了,也并不能锻炼自己的能力,因为我现在需要训练的是做题的思维方法啊! sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,求sum(1)-sum(N) 的乘积. 首先,这道题直接做,感觉无从下手,那么我就想,怎么来转换一下,求1~n中每个数的一的个数总相乘之积,首先感觉到,每个数都会有唯一对应的1的个数,且…
题目大意: 花神的题目是这样的 设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,花神要问你 派(Sum(i)),也就是 sum(1)—sum(N) 的乘积. 要对10000007(非质数)取模 n<=10^15 分析: O(nlogn)暴力显然可以想出来.显然会tle 这是从1~n一个一个枚举并变成二进制算的,但是我们是否可以向普通的数位dp,一次性枚举许多个数呢? 二进制的n,大概最多50位.例如21=10101.它显然可以拆成二进制下的10000+100+1 那…
传送门 数位dpdpdp经典题. 题面已经暗示了我们按照二进制位来数位dpdpdp. 直接dpdpdp多少个数有111个111,222个111,333个111-, 然后快速幂算就行了. 于是我们枚举前几位跟nnn相同,后面比nnn小的方案数. 这个显然是可以用组合数算的. 注意nnn自己的也要算进贡献. 代码: #include<bits/stdc++.h> using namespace std; typedef long long ll; const int mod=10000007; l…
http://www.lydsy.com/JudgeOnline/problem.php?id=3209 (题目链接) 题意 ${sum(i)}$表示${i}$的二进制表示中${1}$的个数.求${\prod^n sum(i)}$ Solution ${f_{i,s}}$表示dp到第${i}$位,已经有${s}$个${1}$时的乘积.然后一路dfs就可以了. 细节 LL,返回值要与1取个max 代码 // bzoj3598 #include<algorithm> #include<ios…
题目 设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,花神要问你 派(Sum(i)),也就是 sum(1)—sum(N) 的乘积(n<=1e15). 分析 好吧,一看数据范围及可知暴力不可做我是不会说我打了一次暴力得了50分的,看一下让求的,恶心,仔细观察后觉得是一道数位DP,可先将n换做二进制,在每一位每一位的分析,若为0则跳过,若为1则处理一番,在处理时可先脚动模拟一番,发现和杨辉三角略有联系,故先处理处杨辉三角,最终出答案(代码里都有体现),时间是:luogu…
3209: 花神的数论题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2498  Solved: 1129[Submit][Status][Discuss] Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了.花神的题目是这样的设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数…
点此看题面 大致题意: 设\(sum(i)\)表示\(i\)二进制中1的个数,请求出\(\prod_{i=1}^n sum(i)\). 数位\(DP\) 很显然,这是一道数位\(DP\)题.我们可以先将\(n\)转化为二进制,然后DP预处理,最后求答案. 设\(f[i][j]\)表示当前数字的1~\(i\)位中共有\(j\)个1,这可以得到转移方程: f[i][j]=f[i-1][j]+f[i-1][j-1]; 初始时将全部\(f[i][0]\)赋值为1. 然后我们就能发现,这样子我们就相当于求…
觉得还是数位dp的那种解题形式但是没有认真的想,一下子就看题解.其实还是设置状态转移.一定要多思考啊f[i][j]=f[i-1][j]+g[i-1][j] g[i][j]=f[i-1][j-1]+g[i-1][j]; 然后我就开始gang.然后先是for for j没有从0开始.然后是cnt增加的时候忘了*,接着是1<<tmp没有用ll,还有是读入优化没有用longlong,最后成功的过了若干较小的数据.WAWAWAWAWA5发.最后发现指数不能直接取模!.终于AC了喜极而泣TAT =>…
题目 背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC -- 当然也包括 CH 啦. 描述 话说花神这天又来讲课了.课后照例有超级难的神题啦-- 我等蒟蒻又遭殃了. 花神的题目是这样的 设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,花神要问你 派(Sum(i)),也就是 sum(1)-sum(N) 的乘积. 输入格式 一个正整数 N. 输出格式 一个数,答案模 10000007 的值. 输入样例 3 输出样例 2 提示 对于样例一,112=…
Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了.花神的题目是这样的设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,花神要问你派(Sum(i)),也就是 sum(1)—sum(N) 的乘积. Input 一个正整数 N. Output 一个数,答案模 10000007 的值. Sample Input 样例输入一 3…
https://www.lydsy.com/JudgeOnline/problem.php?id=3209 https://www.luogu.org/problemnew/show/P4317 设cnt(x)为x在二进制下1的个数 很显然,要对于所有k,统计1<=i<=n中cnt(i)==k的i的个数 可以发现如果x二进制只由1组成,那么可以O(logx)计算出这些数 因此,可以把[1,n]用数位dp的思想拆开 对于n二进制中每一个1,试着使得它变为0,那么后面所有二进制位可以任意取,前面取…
3209: 花神的数论题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2633  Solved: 1182[Submit][Status][Discuss] Description 背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了.花神的题目是这样的设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数…
Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了.花神的题目是这样的设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,花神要问你派(Sum(i)),也就是 sum(1)—sum(N) 的乘积. Input 一个正整数 N. Output 一个数,答案模 10000007 的值. Sample Input 样例输入一 Sa…
题目: 3209: 花神的数论题 解析: 二进制的数位DP 因为\([1,n]\)中每一个数对应的二进制数是唯一的,我们枚举\(1\)的个数\(k\),计算有多少个数的二进制中有\(k\)个\(1\) 设\(n\)的二进制一共有\(num\)位,有\(sum[i]\)个数的二进制中有\(k\)个\(1\), 答案就是\(\prod_{i=1}^{num}i^{sum[i]}\) 用数位DP搞一下就好了 设\(f[i][j]\)表示到第\(i\)位有\(j\)个\(1\)时有多少个数 枚举\(k\…
[BZOJ1861][BZOJ3224] [BZOJ2733][BZOJ1056] [BZOJ2120][BZOJ3673] [BZOJ1833][BZOJ1026] [BZOJ3209][BZOJ1096] [BZOJ1597][BZOJ1492] [BZOJ3156][BZOJ3437] [BZOJ3675][BZOJ1911] [BZOJ1996][BZOJ1801] [BZOJ1806][BZOJ1207] [BZOJ3172][BZOJ2594] [BZOJ2157][BZOJ1054…
//我是来看文章创建时间的= = 膜拜了一下蔡大神.... 人生第一道自己写的数位DP...好吧以前是看题解然后也不知道为什么就过了的>_< 虽然说现在还是只会裸题= = 数位DP介绍: http://wenku.baidu.com/link?url=9OS5Ybpw5wx00ahrH8ED2oyIlR1uWwrxT8N4pEg27GgBt2T2hLe4sd_h1rmpY7P0HmeHIEDw9h6_K98dPhhjoMhD2TpKcS8w1X8cC_dkPp_ 接下来是bzoj1833题目地…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3209 显然是按照二进制位进行DP. 考虑预处理$F[i][j]$表示到了二进制的第$i$位,有$j$个$1$的数字有多少个. 显然:${F[i][j]=F[i-1][j-1]+F[i-1][j]}$ 组合数... 接下来只需补充不漏的计算比$n+1$小的每一个数字对应的1的多少.数位统计即可. llg work(llg x) { llg tot=; ;i--) { ) break; if…
转载请注明原文地址http://www.cnblogs.com/LadyLex/p/8490222.html 之前学数位dp的时候底子没打扎实 虚的要死 这次正好有时间……刷了刷之前没做的题目 感觉自己脑洞不太够……比较经典的题或者见过的类似模型就能自己推出来,但是没有见过的模型就虚的要死(比如二进制数位DP) 感谢WQ的帮助,让我对数位DP的理解逐渐加深 那么我们总结一下这次做的题目…… bzoj4521 记忆化搜索即可,水爆 #include <cstring> #include <…
原博客 https://blog.csdn.net/wust_zzwh/article/details/52100392 建议原博客看到hdu 不要62,然后看我分割线后两道题,然后再回来看原博.---------------------------------------------------------分割线--------------------------------------------------- 基础篇 数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一…
推荐博客 推荐博客 数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数.所谓数位dp,字面意思就是在数位上进行dp咯.数位还算是比较好听的名字,数位的含义:一个数有个位.十位.百位.千位......数的每一位就是数位啦!之所以要引入数位的概念完全就是为了dp.数位dp的实质就是换一种暴力枚举的方式,使得新的枚举方式满足dp的性质,然后记忆化就可以了. 两种不同的枚举:对于一个求区间[le,ri]满足条件数的个数,最简单的暴力如下: for(int i=le;i…
前言 数位\(DP\) 真的是最恶心的\(DP\). 简介 看到那种给你两个数,让你求这两个数之间符合条件的数的个数,且这两个数非常大,这样的题目一般就是 数位\(DP\) 题. 数位\(DP\)一般都用于计数. 具体实现 数位\(DP\)有两种实现方法:\(DP\)预处理+乱搞求答案以及记忆化搜索. 个人感觉用记忆化搜索来实现要比较容易一些(第一种做法我是真的不会). 数位\(DP\)在求解的过程中运用了前缀和的思想,即要求\(l\sim r\)范围内的解的个数,就相当于用\(0\sim r\…
暑假写的一些博客复习一遍.顺便再写一遍或者以现在的角度补充一点东西. 盛暑七月 初涉基环外向树dp&&bzoj1040: [ZJOI2008]骑士 比较经典的基环外向树dp.可以借鉴的技巧在于将每一个环拆出一条边,使剩下部分成为树.再然后就是max(f[u][0],f[v][0])思考中可能会出现的纰漏. ; i<=n; i++) { v[i] = read(), tt = read(); if (get(tt)!=get(i)){ addedge(i, tt); fa[fa[tt]…
转发自WUST_WenHao巨巨的博客 基础篇 数位dp是一种计数用的dp,一般就是要统计一个区间[le,ri]内满足一些条件数的个数.所谓数位dp,字面意思就是在数位上进行dp咯.数位还算是比较好听的名字,数位的含义:一个数有个位.十位.百位.千位......数的每一位就是数位啦! 之所以要引入数位的概念完全就是为了dp.数位dp的实质就是换一种暴力枚举的方式,使得新的枚举方式满足dp的性质,然后记忆化就可以了. 两种不同的枚举:对于一个求区间[le,ri]满足条件数的个数,最简单的暴力如下:…
BZOJ  1026: [SCOI2009]windy数: 题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=1026           dp[11][11][2]:dep,pre,f 要求的性质就是相邻数字差至少是2.          递归函数的状态设计如下dep,pre,f,分别表示已经枚举到第dep位,他的前一位(更高的位)是pre,f表示大小关系是否已经确定. #include<bits/stdc++.h> using na…