洛谷P4317 花(fa)神的数论题(数位dp解法)
日常废话:
完了高一开学第二天作业就写不完了药丸(其实第一天就写不完了)
显然爆搜肯定过不了这道题但是有60分
我们注意到在[1,n]中,有着相同的1的个数的数有很多。若有x个数有i个1,则对答案产生的贡献是\(i^x\)。考虑到\(n\leq10^{50}\),所以最多只有50个1,看起来能够接受。这样问题就转化成求1~n内,二进制表示中有i个1的数的个数,可以用数位dp求。
关于\(i^x\),用快速幂搞一搞就好了。
数位dp
using namespace std;
typedef long long ll;
const int inf=214748364;
const ll mod=10000007;
inline ll read()
{
char ch=getchar();
ll x=0;bool f=0;
while(ch'9')
{
if(ch=='-')f=1;
ch=getchar();
}
while(ch>='0'&&ch>=1;
}
return r%mod;
}
ll dfs(int now,int cnt,int goal,bool lim)
{
if(!now) return cnt==goal;
if(!lim&&g[now][cnt][goal]!=-1) return g[now][cnt][goal];//这里初始化为-1比初始化为0要省时间的多
int up=lim?li[now]:1;
ll rtn=0;
for(int i=0;i
接下来就与此题正解无瓜了
纪念一个写歪了的dfs
如果在这题里面考虑爆搜,如何做到纯O(n)的爆搜
若我们从1循环到n,每个用logn的时间看有几个1,复杂度是O(nlogn)。
我们参照数位dp的填数的思想,枚举每一位填的是啥。填到最后,有cnt个1,则f[cnt]++。这样一共是n个数会被枚举到,所以是O(n)的。
实测比上面的g数组初始化为0的写法多10分
写歪了的dfs
using namespace std;
typedef long long ll;
const int inf=214748364;
const ll mod=10000007;
inline ll read()
{
char ch=getchar();
ll x=0;bool f=0;
while(ch'9')
{
if(ch=='-')f=1;
ch=getchar();
}
while(ch>='0'&&ch>=1;
}
return r%mod;
}
void dfs(int now,int cnt,bool lim)
{
if(!now){f[cnt]++;return;}
int up=(lim)?li[now]:1;
for(int i=0;i
include被我吃了
洛谷P4317 花(fa)神的数论题(数位dp解法)的更多相关文章
- 【洛谷】4317:花神的数论题【数位DP】
P4317 花神的数论题 题目背景 众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦. 题目描述 话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我 ...
- 【洛谷】2602: [ZJOI2010]数字计数【数位DP】
P2602 [ZJOI2010]数字计数 题目描述 给定两个正整数a和b,求在[a,b]中的所有整数中,每个数码(digit)各出现了多少次. 输入输出格式 输入格式: 输入文件中仅包含一行两个整数a ...
- 【BZOJ3209】花神的数论题 数位DP
[BZOJ3209]花神的数论题 Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级 ...
- [bzoj3209][花神的数论题] (数位dp+费马小定理)
Description 背景众所周知,花神多年来凭借无边的神力狂虐各大 OJ.OI.CF.TC …… 当然也包括 CH 啦.描述话说花神这天又来讲课了.课后照例有超级难的神题啦…… 我等蒟蒻又遭殃了. ...
- bzoj 3209 花神的数论题 —— 数位DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3209 算是挺简单的数位DP吧,但还是花了好久才弄明白... 又参考了博客:https://b ...
- BZOJ 3209 花神的数论题 数位DP+数论
题目大意:令Sum(i)为i在二进制下1的个数 求∏(1<=i<=n)Sum(i) 一道非常easy的数位DP 首先我们打表打出组合数 然后利用数位DP统计出二进制下1的个数为x的数的数量 ...
- BZOJ 3209: 花神的数论题 [数位DP]
3209: 花神的数论题 题意:求\(1到n\le 10^{15}\)二进制1的个数的乘积,取模1e7+7 二进制最多50位,我们统计每种1的个数的数的个数,快速幂再乘起来就行了 裸数位DP..\(f ...
- bzoj3209 花神的数论题——数位dp
题目大意: 花神的题目是这样的 设 sum(i) 表示 i 的二进制表示中 1 的个数.给出一个正整数 N ,花神要问你 派(Sum(i)),也就是 sum(1)—sum(N) 的乘积. 要对1000 ...
- BZOJ3209: 花神的数论题(数位DP)
题目: 3209: 花神的数论题 解析: 二进制的数位DP 因为\([1,n]\)中每一个数对应的二进制数是唯一的,我们枚举\(1\)的个数\(k\),计算有多少个数的二进制中有\(k\)个\(1\) ...
随机推荐
- P1233木棍加工
这个题被算法标签标为DP,但其实可能只是用dp求子序列,,(n方) 给出l与w,只要是l与w同时满足小于一个l与w,那么这个木棍不需要时间,反之需要1.看到这个题,首先想到了二维背包,然后发现没有最大 ...
- __init__ 和__new__的区别?
init 在对象创建后,对对象进行初始化. new 是在对象创建之前创建一个对象,并将该对象返回给 init.
- ajax实现异步请求模态登陆
ajax实现模态登陆 j2ee课程项目实现 Ajax 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创 ...
- 剑指offer-删除链表中重复的结点-链表-python ***
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- xss过滤与单例模式(对象的实例永远用一个)
kindeditor里面可以加入script代码,使用re可以过滤掉python有个专门的模块可以处理这种情况,beautifulsoup4 调用代码: content = XSSFilter().p ...
- 执行npm publish 报错:401 Unauthorized - PUT https://registry.npmjs.org/kunmomotest - You must be logged in to publish packages.
前言 执行npm publish 报错:401 Unauthorized - PUT https://registry.npmjs.org/kunmomotest - You must be logg ...
- java中的数据类型,基本数据类型及其包装类型
java中的8大基本类型及其包装类型 1,int--->Integer 2,byte--->Byte 3,short--->Short 4,long--->Long 5,cha ...
- Ajax&Json笔记
## 今日内容 1. AJAX: 2. JSON # AJAX: 1. 概念: ASynchronous JavaScript And XML 异步的JavaScript ...
- console 对象
JavaScript 原生中默认是没有 Console 对象,这是宿主对象(也就是游览器)提供的内置对象. 用于访问调试控制台,在不同的浏览器里效果可能不同.Console 对象方法:
- iOS 审核app被拒绝的各种理由以及翻译
原 apps被拒绝的各种理由以及翻译:http://my.oschina.net/201003674/blog/356189#OSC_h1_3 1. Terms and conditions(法律与条 ...
