BZOJ1853 [Scoi2010]幸运数字
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作。
本文作者:ljh2000
作者博客:http://www.cnblogs.com/ljh2000-jump/
转载请注明出处,侵权必究,保留最终解释权!
Description
Input
Output
Sample Input
1 10
【样例输入2】
1234 4321
Sample Output
2
【样例输出2】
809
HINT
【数据范围】
对于30%的数据,保证1 < =a < =b < =1000000
对于100%的数据,保证1 < =a < =b < =10000000000
正解:搜索+容斥原理
解题报告:
这道题其实乍一看怎么都不像搜索题,但是仔细想想还是很有道理的,因为满足要求的幸运号码并不多,那么我可以预处理出所有幸运号码后容斥即可。
但是容斥的复杂度是指数级,理论上不可能跑得过,不过很容易发现由于l、r只有1e10级别,那么我在容斥的时候不可能太大,也就是说顶多几个数相乘就会超过r,只需要剪枝减掉就可以了。
有一个细节,在乘的时候有可能爆long long,那么我在乘之前就用double的近似值判断一下是不是已经爆了long long,就可以解决这个问题了。
- //It is made by ljh2000
- #include <iostream>
- #include <cstdlib>
- #include <cstring>
- #include <cstdio>
- #include <cmath>
- #include <algorithm>
- #include <ctime>
- #include <vector>
- #include <queue>
- #include <map>
- #include <set>
- #include <string>
- using namespace std;
- typedef long long LL;
- const int MAXN = 100011;
- LL l,r,a[MAXN],ans,b[MAXN];
- int tot,n;
- bool vis[MAXN];
- inline LL gcd(LL x,LL y){ if(y==0) return x; return gcd(y,x%y); }
- inline int getint(){
- int w=0,q=0; char c=getchar(); while((c<'0'||c>'9') && c!='-') c=getchar();
- if(c=='-') q=1,c=getchar(); while (c>='0'&&c<='9') w=w*10+c-'0',c=getchar(); return q?-w:w;
- }
- inline void make(LL x){
- if(x>r) return ;
- if(x>0) a[++tot]=x;
- make(x*10+6);
- make(x*10+8);
- }
- inline void dfs(int x,int now,LL val){
- if(x==n+1) {
- if(now==0||val==0) return ;
- if(now&1) ans+=r/val-(l-1)/val;
- else ans-=r/val-(l-1)/val;
- return ;
- }
- dfs(x+1,now,val);
- LL nn; if(now==0) { dfs(x+1,now+1,b[x]); return ; }
- nn=val/gcd(val,b[x]);
- if((double)b[x]*nn>r) return ;
- dfs(x+1,now+1,b[x]*nn);
- }
- inline void work(){
- scanf("%lld%lld",&l,&r); make(0); sort(a+1,a+tot+1);
- for(int i=1;i<=tot;i++) if(!vis[i]) { b[++n]=a[i]; for(int j=i+1;j<=tot;j++) if(a[j]%a[i]==0) vis[j]=1; }
- for(int i=1;i<=n/2;i++) swap(b[i],b[n-i+1]);
- dfs(1,0,0);
- printf("%lld",ans);
- }
- int main()
- {
- work();
- return 0;
- }
BZOJ1853 [Scoi2010]幸运数字的更多相关文章
- BZOJ1853 Scoi2010 幸运数字 【枚举+容斥】
BZOJ1853 Scoi2010 幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号 ...
- bzoj1853[Scoi2010]幸运数字 容斥
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 3027 Solved: 1128[Submit][Status ...
- [BZOJ1853][Scoi2010]幸运数字 容斥+搜索剪枝
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 3202 Solved: 1198[Submit][Status ...
- BZOJ1853 [Scoi2010]幸运数字 容斥原理
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1853 题意概括 求一个区间范围内,近似幸运数字的个数. 定义: 幸运数字:仅由6或者8组成的数字. ...
- 2019.01.17 bzoj1853: [Scoi2010]幸运数字(容斥+dfs)
传送门 搜索菜题,然而第一次没有注意然后爆longlonglong longlonglong了. 题意:称所有数位由6,86,86,8组成的数为幸运数字,问一个一个区间[l,r][l,r][l,r]中 ...
- bzoj1853: [Scoi2010]幸运数字 dp+容斥原理
在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是 ...
- 并不对劲的bzoj1853:[SCOI2010]幸运数字
传送门-> 据说本题的正确读法是[shìng运数字]. 听上去本题很适合暴力,于是并不对劲的人就去写了.其实这题就是一个很普(有)通(趣)暴力+神奇的优化. 首先,会发现幸运数字很少,那么就先搜 ...
- 【bzoj1853】: [Scoi2010]幸运数字 数论-容斥原理
[bzoj1853]: [Scoi2010]幸运数字 预处理出所有幸运数字然后容斥原理 但是幸运数字是2logn个数的 直接搞会炸 所以把成倍数的处理掉 然后发现还是会T 所以数字要从大到小处理会快很 ...
- 【BZOJ1853/2393】[Scoi2010]幸运数字/Cirno的完美算数教室 DFS+容斥
[BZOJ1853][Scoi2010]幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那 ...
随机推荐
- Laterality issue on fMRI image
The laterality issue: different software will interpret fMRI images in different way (mainly refer t ...
- MySql MyISAM和InnoDB的区别
MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的 顺序访问方法) 的缩写,它是存储记录和文件的标准方法. ...
- 十个节省时间的MySQL命令
十个节省时间的MySQL命令 2011-02-23 16:07 黄永兵 译 IT168 字号:T | T 编者在工作中积累起来了一些MySQL命令行客户端技巧,这些技巧或多或少会帮助您节省大量的时间. ...
- ASP.NET点击按钮弹出确认对话框方法
开发asp.net网页应用程序的时候,有些页面的按钮需要增加一个确认对话框,比如: 实现这个功能比较简单,代码这样写: Button.Attributes["onclick"] = ...
- [转]Linux后台进程管理利器:supervisor
FROM : http://www.liaoxuefeng.com/article/0013738926914703df5e93589a14c19807f0e285194fe84000 Linux后台 ...
- 【转】Sql Server参数化查询之where in和like实现详解
转载至:http://www.cnblogs.com/lzrabbit/archive/2012/04/22/2465313.html 文章导读 拼SQL实现where in查询 使用CHARINDE ...
- 招聘高级.Net工程师
找钢网创新开发部真诚地邀请程序猿\媛们加入,一起来吃大闸蟹午餐. 在创新开发部你可以见证一个产品从零开始到爆发到改变一个大宗商品的行业,在创新开发部你有机会接触到国际范,你还有机会接触到韩国的妹纸.欧 ...
- Linux 网络编程详解四(流协议与粘包)
TCP/IP协议是一种流协议,流协议是字节流,只有开始和结束,包与包之间没有边界,所以容易产生粘包,但是不会丢包. UDP/IP协议是数据报,有边界,不存在粘包,但是可能丢包. 产生粘包问题的原因 . ...
- QT 数据库编程三
//mainwindow.cpp #include "mainwindow.h" #include "logindlg.h" #include "sc ...
- SQL Server数据库代码指令简介
这些是比较常用的命令操作,事先声明,这些命令是不区分大小写的,我按照我的课本来总结用法和知识点,无用的章节自动省略. 没有一点数据库知识基础的可以等我录制视频,不然可能看不懂,视频链接:http:// ...