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. autoit 简单使用-- 操作windows窗口

    autoit 简单使用 autoit中文交流论坛: http://www.autoitx.com/index.php 1 下载 autoit 中文安装包 : https://yunpan.cn/OcP ...

  2. Postgresql VACUUM COPY等

    1.VACUUM VACUUM回收dead tuples占用的存储空间. 在一般的PostgreSQL操作中,被update操作删除或废弃的元组不会从物理表中删除; 它们一直存在,直到执行VACUUM ...

  3. Python中常用模块一

    random模块 import random # 应用数学计算 print(random.random()) # 取随机小数 范围是 0-1之间 # 应用抽奖 , 彩票 print(random.ra ...

  4. 有一些sql 是必须要做笔记的!!

    select CONCAT(unix_timestamp(),"-",id,"-",name) as aa,age from workers; //连接字段 s ...

  5. python子进程模块subprocess详解与应用实例 之三

    二.应用实例解析 2.1 subprocess模块的使用 1. subprocess.call >>> subprocess.call(["ls", " ...

  6. const与指针的纠缠

    当使用带有const的指针时其实有两种意思.一种指的是你不能修改指针本身的内容,另一种指的是你不能修改指针指向的内容. 先说指向const的指针,它的意思是指针指向的内容是不能被修改的.它有两种写法. ...

  7. 我的笔记,有关 PhotoShop,给自己的记忆宫殿

    一直有心学习 PhotoShop ,各种教程也 download 了不少,什么祁连山.PS大师之路.Oeasy 等等.看了吗?丫蛋的只看了前面两集!还是在博客上写写坐下笔记,好记性不如烂笔头. 0.先 ...

  8. Docker学习笔记_使用Dockerfile创建flask的一个镜像

    一.实验环境 1.宿主机OS:Win10 64位 2 .虚拟机OS:Ubuntu18.04 64位    虚拟机名称:Ubuntu18VM1   虚拟机IP:192.168.8.25 3.账号:doc ...

  9. while循环 for循环的理解

    不管是while循环还是for循环都隐含着一个if else的结构,就是说,if 条件满足,那么就执行循环体内部的语句,else就做循环体外部的事情. 有一个例子我觉得特别典型,程序内部定义了一个特定 ...

  10. Django框架 之 查询 Extra

    Django框架 之 查询 Extra extra 1 2 extra(select=None, where=None, params=None,       tables=None, order_b ...