题目

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

输入格式

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

输出格式

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

输入样例

【样例输入1】

1 10

【样例输入2】

1234 4321

输出样例

【样例输出1】

2

【样例输出2】

809

提示

【数据范围】

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

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

题解

考虑容斥原理

a以内一些数的倍数的数量 = 取一个数倍数的数量 - 取两个数的公倍数的数量 + 数三个数公倍数的数量........

我们先预处理出所有的幸运数字,再筛去有倍数关系的,得到互质的幸运数字

用搜索将其组合,分组合的奇偶对答案进行贡献

稍加一些剪枝:

①超过r就回溯

②从大到小枚举,尽早回溯

可以顺便把2393A了

值得一提的是,1853比2393要难,因为2393实际范围为\(10^9\)不会爆long long,而1853会爆long long,要先用double储存判断一下

  1. #include<iostream>
  2. #include<cmath>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<algorithm>
  6. #define LL long long int
  7. #define REP(i,n) for (int i = 1; i <= (n); i++)
  8. #define Redge(u) for (int k = h[u],to; k; k = ed[k].nxt)
  9. #define BUG(s,n) for (int i = 1; i <= (n); i++) cout<<s[i]<<' '; puts("");
  10. using namespace std;
  11. const int maxn = 10005,maxm = 100005,INF = 1000000000;
  12. LL q[maxn],a[maxn],qi,l,r,n;
  13. LL ans = 0;
  14. bool vis[maxn];
  15. LL gcd(LL a,LL b){return b ? gcd(b,a % b) : a;}
  16. void dfs1(LL x){
  17. if (x > r) return;
  18. if (x) q[++qi] = x;
  19. dfs1(x * 10 + 6); dfs1(x * 10 + 8);
  20. }
  21. void dfs(int pos,int t,LL num){
  22. if (pos > n){
  23. if (t & 1) ans += r / num - (l - 1) / num;
  24. else if (t) ans -= r / num - (l - 1) / num;
  25. return;
  26. }
  27. dfs(pos + 1,t,num);
  28. double x = (double)a[pos] * num / gcd(a[pos],num);
  29. if (x <= r) dfs(pos + 1,t + 1,(LL)x);
  30. }
  31. int main(){
  32. cin>>l>>r;
  33. dfs1(0);
  34. sort(q + 1,q + 1 + qi);
  35. for (int i = 1; i <= qi; i++){
  36. if (!vis[i]){
  37. a[++n] = q[i];
  38. for (int j = i + 1; j <= qi; j++)
  39. if (q[j] % q[i] == 0) vis[j] = true;
  40. }
  41. }
  42. REP(i,n>>1) swap(a[i],a[n - i + 1]);
  43. dfs(1,0,1);
  44. printf("%lld",ans);
  45. return 0;
  46. }

BZOJ2393 & 1853 [Scoi2010]幸运数字 【搜索 + 容斥】的更多相关文章

  1. P2567 [SCOI2010]幸运数字 DFS+容斥定理

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

  2. 2019.01.17 bzoj1853: [Scoi2010]幸运数字(容斥+dfs)

    传送门 搜索菜题,然而第一次没有注意然后爆longlonglong longlonglong了. 题意:称所有数位由6,86,86,8组成的数为幸运数字,问一个一个区间[l,r][l,r][l,r]中 ...

  3. [SCOI2010]幸运数字(容斥+爆搜)

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

  4. bzoj 1853: [Scoi2010]幸运数字 容斥

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

  5. 【BZOJ 1853】 1853: [Scoi2010]幸运数字 (容斥原理)

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 2472  Solved: 911 Description 在中国 ...

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

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

  7. BZOJ 1853: [Scoi2010]幸运数字

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

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

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

  9. 【Luogu】P2567幸运数字(容斥爆搜)

    题目链接 先预处理出幸运数,把成倍数关系的剔掉,然后用容斥原理搜索一下. 这里的容斥很像小学学的那个“班上有n个同学,有a个同学喜欢数学,b个同学喜欢语文……”那样. #include<cstd ...

随机推荐

  1. 2018.5.29 Oracle连接到空闲例程

    解决方法如下: 1.通过cmd命令窗启动Oracle:(最好是以管理员身份启动) C:\Users\Administrator>sqlplus /nolog SQL>conn /as sy ...

  2. python_10_for guess

    age_of_oldboy=56 count=0 for count in range(3): guess_age=int(input('guess age:')) if guess_age==age ...

  3. oracle用户创建及权限设置(转)

    权限: create session create table unlimited tablespace connect resource dba 例: #sqlplus /nolog SQL> ...

  4. java设计模式——抽象工程模式

    一. 定义与类型 定义:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,无须指定他们具体的类 类型:创建型 二. 适用场景 客户端不依赖于产品类实例如何备创建,实现等细节 创建一系列相关的产品 ...

  5. AngularJS 对象

    AngularJS对象就像JavaScript对象 <!DOCTYPE html><html><head><meta http-equiv="Con ...

  6. antd-design-pro 服务代理问题

    公司希望又一个后台管理页面.因为之前技术栈是react 所以选择了antd-design-pro作为后台的框架. 在连调api的时候,困惑怎么去代理.因为网上查到很多都是1.0的版本,而我现在用的是2 ...

  7. jQuery入门第一天-(一个菜鸟的不正经日常)

    jQuery的初步认识 菜鸟Q1:什么是jQuery? jQuery就是一个JavaScript函数库,没什么 特别的. 菜鸟Q2:jQuery能做什么?jQuery是做什么的? jQuery本身就是 ...

  8. 大数据的存储——HBase、HIVE、MYSQL数据库学习笔记

    HBase 1.hbase为查询而生,它通过组织机器的内存,提供一个超大的内存hash表,它需要组织自己的数据结构,表在hbase中是物理表,而不是逻辑表,搜索引擎用它来存储索引,以满足实时查询的需求 ...

  9. 动态规划:HDU2159-FATE(二维费用的背包问题)

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  10. Eclipse快速输出System.out.println();

    借鉴网上大佬博客 刚开始还好好敲代码 后来看博客发现其实输入syso或sysout 再按alt+/就OK 开始学JAVA,好好干.