BZOJ1853 [Scoi2010]幸运数字 容斥原理
2015-09-23 21:00
302 查看
题意:
所有只含6与8的数叫做幸运数字,幸运数字的倍数叫做近似幸运数字,幸运数字都是近似幸运数字。
给定区间[l,r]求其中近似幸运数字个数。
1 < =l< =r< =10000000000
解析:
显然容斥,剩下的就是黑科技的问题了。
容斥的话,就是我们首先预处理出来所有的幸运数字,然后筛一遍,筛掉所有是其他幸运数字倍数的数避免重复计算。
然后就是选1个-选2个的lcm+选3个的lcm-….
一个dfs搞定即可。
但是需要注意,dfs内部的lcm我们不可以求出来,因为会爆long long ,是的我也不知道为什么。
所以我们需要转成double 型比较是否越界。
另外,我们筛完之后的那些数字最好按照从大到小的顺序排,如果从小到大的话常数大一点点,但就是这么一点点你就过不去,貌似是从大到小的话更能够对一些非法状态早排除吧。
代码:
所有只含6与8的数叫做幸运数字,幸运数字的倍数叫做近似幸运数字,幸运数字都是近似幸运数字。
给定区间[l,r]求其中近似幸运数字个数。
1 < =l< =r< =10000000000
解析:
显然容斥,剩下的就是黑科技的问题了。
容斥的话,就是我们首先预处理出来所有的幸运数字,然后筛一遍,筛掉所有是其他幸运数字倍数的数避免重复计算。
然后就是选1个-选2个的lcm+选3个的lcm-….
一个dfs搞定即可。
但是需要注意,dfs内部的lcm我们不可以求出来,因为会爆long long ,是的我也不知道为什么。
所以我们需要转成double 型比较是否越界。
另外,我们筛完之后的那些数字最好按照从大到小的顺序排,如果从小到大的话常数大一点点,但就是这么一点点你就过不去,貌似是从大到小的话更能够对一些非法状态早排除吧。
代码:
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 10010 using namespace std; typedef long long ll; ll l,r; int cnt; int n; ll lucky ; bool ban ; ll ans; ll gcd(ll a,ll b) { while(b) { ll t=b; b=a%b; a=t; } return a; } ll lcm(ll a,ll b) { return a/gcd(a,b)*b; } void init(ll num) { if(num>r)return; lucky[cnt++]=num; init(num*10+6); init(num*10+8); } void dfs(int now,int chose,ll val) { if(now>n) { if(!chose)return; if(chose&1)ans+=r/val-(l-1)/val; else ans-=r/val-(l-1)/val; return; } dfs(now+1,chose,val); ll tmp=val/gcd(lucky[now],val); if((double)tmp*lucky[now]<=r) { dfs(now+1,chose+1,tmp*lucky[now]); } } int main() { scanf("%lld%lld",&l,&r); init(0); cnt--; sort(lucky+1,lucky+cnt+1); for(int i=1;i<=cnt;i++) { if(!ban[i]) { for(int j=i+1;j<=cnt;j++) { if(lucky[j]%lucky[i]==0) { ban[j]=1; } } } } for(int i=1;i<=cnt;i++) if(!ban[i])lucky[++n]=lucky[i]; for(int i=1;i<=(n>>1);i++)swap(lucky[i],lucky[n-i+1]); dfs(1,0,1); printf("%lld\n",ans); }
相关文章推荐
- OL3实现多图联动
- Windows加密API的层次
- 【软件设计师教程】计算机系统知识
- 法学类人猿生存方案--升华成掌握可能的方式
- 在服务器上安装媒体播放器
- 【读书笔记】iOS-属性列表
- 图片会说话系列之Android事件的分发传递机制(非常完美!!!!!)
- html5
- java中获取类的有关信息
- Building System之 get_abs_build_var() && get_build_var()
- iOS开发 ----- AFNetWorking
- C#面向对象资料-转
- 【JSON】JS操作JSON(不断积累中)
- 【读书笔记】iOS-属性列表
- python教程
- layout_activity.xml中要对组件设置颜色
- Codeforces #321(div2)
- [C基础知识]2015-09-23
- noip2009 道路游戏 (单调队列优化动态规划)
- JAVA中的标识符、变量、关键字、变量、常量、运算符、优先级