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

很明显的容斥裸题,预处理出所有‘68’数字后,利用容斥求解即可
只是这道题有两个地方需要注意
一、幸运数字中可能会存在a是b的倍数,所以这种情况要把a先剔除
二、数据范围为10^10,注意求lcm乘的时候不要爆long long,可先开个double检验一下,
哦对还有,dfs的时候先搜大的数,这样能够比较早的剔除掉大于R的情况

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#ifdef WIN32
#define AUTO "%I64d"
#else
#define AUTO"%lld"
#endif
#define LL long long
using namespace std;
const int maxn=10000+5;
int cnt,tot;
LL L,R,num[maxn],ans;
void init(LL x)
{if (x>R) return ;if (x) num[++cnt]=x;init(x*10+6);init(x*10+8);
}
bool cmp(LL x,LL y)
{return x>y;
}
LL gcd(LL a,LL b)
{return b?gcd(b,a%b):a;
}
void dfs(int ID,LL sum,LL lcm)
{if (ID>tot){if (sum&1) ans+=R/lcm-(L-1)/lcm;else if (sum) ans-=R/lcm-(L-1)/lcm;return ;} dfs(ID+1,sum,lcm);LL temp=lcm/gcd(num[ID],lcm);if(((double)num[ID]*temp)<=R) dfs(ID+1,sum+1,num[ID]*temp);
}
int main()
{
//  freopen("scoi.in","r",stdin);scanf(AUTO AUTO,&L,&R);init(0);sort(num+1,num+cnt+1,cmp);for (int i=cnt;i>0;i--) if(num[i])for (int j=i-1;j>0;j--) if (!(num[j]%num[i]))num[j]=0;for (int i=1;i<=cnt;i++) if (num[i]) num[++tot]=num[i];dfs(1,0,1);printf(AUTO,ans);return 0;
}

[BZOJ1853][SCOI2010][容斥原理]幸运数字相关推荐

  1. 【bzoj1853】[Scoi2010]幸运数字 容斥原理+搜索

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

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

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

  3. bzoj1853 [Scoi2010]幸运数字

    http://www.elijahqi.win/archives/3883 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码 ...

  4. [luogu2576 SCOI2010] 幸运数字 (容斥原理)

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

  5. 【BZOJ-18532393】幸运数字Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MB Submit: 1817  Solved: 665 [Submit][Statu ...

  6. P2567 [SCOI2010]幸运数字

    P2567 [SCOI2010]幸运数字 题意: 我们规定只含6或8的数字为幸运号码,而幸运号码的倍数我们也认为是幸运号码,问[l,r]中有多少个幸运号码? 题解: 第一反应是数位dp,但其实不是,我 ...

  7. [SCOI2010]幸运数字

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

  8. 数论五之容斥——硬币购物,Gerald and Giant Chess,幸运数字,Sky Full of Stars,已经没有什么好害怕的了

    容斥的神 [HAOI2008]硬币购物 problem solution code CF559C Gerald and Giant Chess problem solution code [SCOI2 ...

  9. 幸运数字Ⅱ(树型结构构造答案,打表)难度⭐⭐

    幸运数字Ⅱ 打表即可,观察数据,是一组简单的二叉树的树形结构,所以引申出这一类的题,比如题目为1,2,3,这三个数,那么就是一个三叉树 0 4 7 44 47 74 77 444 447 474 47 ...

最新文章

  1. 微软、商汤等专家纵论AI未来:三年内主要趋势及挑战是什么?
  2. Linux与云计算——第二阶段 第五章:存储Storage服务器架设—分布式存储GlusterFS基础...
  3. Windows服务器上Mqtt服务器EMQX的安装使用
  4. 一步步实现一个基本的缓存模块
  5. axivion和astree_Axivion架构分析及验证工具
  6. 运用xlib进行事件响应(X11 API)的小例子
  7. excel vba 调用webbrowser_VBA 公式与函数
  8. chrome里面的一些小技巧
  9. Python网络爬虫开发实战使用XPath,xpath的多种用法
  10. 并查集——亲戚(洛谷 P1551)
  11. SAP License:SAP应用随想
  12. 回调函数的概念及使用
  13. Atitit 粘贴路径参数法 跨进程通讯法 目录 1. .IPC(Inter-Process Communication,跨进程通信) 1 1.1. .IPC的使用场景: 2 2. 传统的进程间通
  14. 某超级注入程序的驱动逆向
  15. lwip_sendto函数详解
  16. OMNeT++学习---TicToc(1)
  17. 数据库——SQL语言建立供应商表S,零件表P,工程表J,供应表SPJ
  18. 良好的编程习惯有哪些?
  19. 使用Docker Compose构建ZigBee基础架构
  20. mysql 表别名_MySQL 表别名(Alias)

热门文章

  1. 计算某一年的二月是多少天
  2. 【洛谷】P2713 罗马游戏
  3. 分形网络结构——FractalNet: Ultra-Deep Neural Networks without Residuals论文笔记
  4. [ahk]使total commander在单双窗口间切换
  5. 掌握这 10 大算法,就可以主宰世界!
  6. 如何在IDEA运行Applet程序
  7. Mediapipe 基于KNIFT图标识别demo
  8. 电脑组装的配件及其功能
  9. 华为 PIM-SM RP选举与切换
  10. 微信 - 电脑(PC)版微信关闭自动下载文件