Description

在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是太少了,比如在[1,100]的区间内就只有6个(6,8,66,68,86,88),于是他又定义了一种“近似幸运号码”。lxhgww规定,凡是“幸运号码”的倍数都是“近似幸运号码”,当然,任何的“幸运号码”也都是“近似幸运号码”,比如12,16,666都是“近似幸运号码”。 现在lxhgww想知道在一段闭区间[a, b]内,“近似幸运号码”的个数。

Input

输入数据是一行,包括2个数字a和b

Output

输出数据是一行,包括1个数字,表示在闭区间[a, b]内“近似幸运号码”的个数

Sample Input

【样例输入1】

1 10

【样例输入2】

1234 4321

Sample Output

【样例输出1】

2

【样例输出2】

809

HINT

【数据范围】

对于30%的数据,保证1 < =a < =b < =1000000

对于100%的数据,保证1 < =a < =b < =10000000000

Sol

这题刚看上去似乎是个数位dp...不过是假的...

首先幸运数字只有\(2^{11}\)个,我们可以暴力找到它们,然后暴力去掉倍数。

然后我们考虑近似幸运号码,我们发现如果把每个幸运数字的倍数都标记的话,每个数字的标记次数好像是和组成lcm的幸运数字个数有关的(说白了就是容斥),所以我们每次取几个幸运数字,求lcm,然后大力按照选择数字的个数判断系数容斥一波,算区间某个数的倍数出现次数当然是直接用\(((r/x)-((l-1)/x))\)算啦。

到这里这道题好像就完了......但是dfs的时候注意一下,lcm好像是会爆long long的,我们用long double判断某个数字有没有越界,越界了就不搜这个数字了。

还有,一定要倒着搜,这样的话状态少!!!否则会TLE!!!

时间复杂度\(能过O(能过)\)。

Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll l,r,n,vis[10005],a[10005],tot=-1,ans;
void get(ll x){if(x>r) return;a[++tot]=x;get(x*10+6);get(x*10+8);}
void dfs(int now,int cnt,ll x)
{
if(now>n){if(!cnt) return;ans+=((cnt&1)?1:-1)*((r/x)-((l-1)/x));return;}
dfs(now+1,cnt,x);
ll tmp=x/__gcd(a[now],x);
if((long double)tmp*a[now]<=r) dfs(now+1,cnt+1,tmp*a[now]);
}
int main()
{
scanf("%lld%lld",&l,&r);get(0);sort(a+1,a+tot+1);
for(int i=1;i<=tot;i++) for(int j=i+1;j<=tot;j++) if(a[j]%a[i]==0) vis[j]=1;
for(int i=1;i<=tot;i++) if(!vis[i]) a[++n]=a[i];
for(int i=1,j=n;i<j;i++,j--) swap(a[i],a[j]);
dfs(1,0,1);printf("%lld\n",ans);
}

【BZOJ1853】[Scoi2010]幸运数字 容斥原理+搜索的更多相关文章

  1. BZOJ1853 [Scoi2010]幸运数字 容斥原理

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1853 题意概括 求一个区间范围内,近似幸运数字的个数. 定义: 幸运数字:仅由6或者8组成的数字. ...

  2. 【BZOJ1853】幸运数字(搜索,容斥)

    [BZOJ1853]幸运数字(搜索,容斥) 题面 BZOJ 洛谷 题解 成功轰下洛谷rk1,甚至超越了一个打表选手 这题思路很明显吧,先搞出来所有范围内的合法数字,然后直接容斥, 容斥的话显然没有别的 ...

  3. BZOJ1853 Scoi2010 幸运数字 【枚举+容斥】

    BZOJ1853 Scoi2010 幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号 ...

  4. [BZOJ1853][Scoi2010]幸运数字 容斥+搜索剪枝

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 3202  Solved: 1198[Submit][Status ...

  5. Bzoj 1853: [Scoi2010]幸运数字 容斥原理,深搜

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 1774  Solved: 644[Submit][Status] ...

  6. BZOJ2393 & 1853 [Scoi2010]幸运数字 【搜索 + 容斥】

    题目 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是" ...

  7. bzoj1853[Scoi2010]幸运数字 容斥

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 3027  Solved: 1128[Submit][Status ...

  8. 1853: [Scoi2010]幸运数字[容斥原理]

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 2405  Solved: 887[Submit][Status] ...

  9. bzoj1853: [Scoi2010]幸运数字 dp+容斥原理

    在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是 ...

随机推荐

  1. 多线程博文地址 http://www.cnblogs.com/nokiaguy/archive/2008/07/13/1241817.html

    http://www.cnblogs.com/nokiaguy/archive/2008/07/13/1241817.html

  2. js取得前2位字符

    <label id="ab">0</label> <script language="javascript"> url=&q ...

  3. javascript中的垃圾回收

    1引用计数垃圾回收 核心:跟踪记录对象被引用的次数.思路是如果一个对象A被赋值给了一个变量v,则该对象A的引用计数值加1,如果变量v又被赋予其他值了,比如a="str",则该对象A ...

  4. MySql主从复制原理和环境配置搭建

    主从复制原理 实质就是通过二进制的sql文件实现主从复制 MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlo ...

  5. AngularJS学习(二)——Angular应用的解析

    本节描述AngularJS应用程序的三个组成部分,并解释它们如何映射到模型-视图-控制器设计模式 模板(Template) 模板是您用HTML和CSS编写的文件,展现应用的视图.您可给HTML添加新的 ...

  6. SQL语句 表字段的操作 添加,删除,修改表的字段

    alter table 表名 drop constraint 约束名字   //删除字段的原有约束 alter table 表名 add constraint 约束名字 DEFAULT 默认值 for ...

  7. document.ready与window.load区别

    jQuery document window load ready 区别详解 用过JavaScript的童鞋,应该知道window对象和document对象,也应该听说过load事件和ready事件, ...

  8. 【HDU4970】Killing Monsters

    题意 数轴上有n个点,有m座炮塔,每个炮塔有一个攻击范围和伤害,有k个怪物,给出他们的初始位置和血量,问最后有多少怪物能活着到达n点.n<=100000 分析 对于某个怪物,什么情况下它可以活着 ...

  9. 【总结整理】Edraw Max亿图图示软件快捷键(转)

    Edraw Max亿图图示软件快捷键大全,你想要的都在这了!   用过Edraw Max亿图图示软件的一定知道,亿图是一款功能十分强大的图形图表设计软件.无论是流程图.思维导图.组织结构图.甘特图.网 ...

  10. java 实现mysql数据库备份

    package com.itenp.gen.action; import java.io.BufferedReader; import java.io.FileInputStream; import ...