BZOJ 1853 [Scoi2010]幸运数字 容斥
来源:互联网 发布:mysql in的用法 编辑:程序博客网 时间:2024/06/06 23:51
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
1 10
【样例输入2】
1234 4321
Sample Output
【样例输出1】
2
【样例输出2】
809
2
【样例输出2】
809
HINT
【数据范围】
对于30%的数据,保证1 < =a < =b < =1000000
对于100%的数据,保证1 < =a < =b < =10000000000
传送门
可以看到幸运数字是不多的,10^10内也就2000+个。
可以用dfs直接预处理出所有的幸运数字,然后求它们倍数的个数。
由于可能会重复,我们暴力判断某一个幸运数字x,
是不是另一个幸运数字y的倍数,
假如是的话,直接把x无视掉就可以了。
然后就是一个容斥的dfs做法。
暴力写一个dfs,求出lcm,对于范围W,那么倍数个数就是W/lcm,,
按理来说很暴力= =实际上有可以优化的。
lcm会爆long long……或者说超过b,
那么如果lcm>b了直接return即可。
还有就是当数大的时候,被无视掉的幸运数还是很多的。
有个讨厌的地方……由于会爆long long,而long long溢出的时候会变负,
所以判断是否<0也可剪枝。
天真地以为不会爆long long= =
#include<bits/stdc++.h>#define ll long longusing namespace std;int n;ll A,B,ans;ll xys[3000];bool flag[3000];ll gcd(ll a,ll b){ if (!b) return a; else return gcd(b,a%b);}void dfs(ll S){ if (S>B) return; if (S) xys[++n]=S; dfs(S*10+6),dfs(S*10+8);}void Unique(){ sort(xys+1,xys+1+n); for (int i=2;i<=n;i++) for (int j=1;j<i;j++) if (!(xys[i]%xys[j])) flag[i]=1;}void DFS(ll LCM,int now,int num){ if (!now) return; DFS(LCM,now-1,num); if (flag[now]) return; ll t=LCM,t1=gcd(LCM,xys[now]); LCM=LCM/t1*xys[now]; if (LCM<=0LL || LCM>B) return; num++; if (num&1) ans+=B/LCM-A/LCM; else ans-=B/LCM-A/LCM; DFS(LCM,now-1,num);}int main(){ scanf("%lld%lld",&A,&B); A--; n=0,dfs(0LL); Unique(); ans=0,DFS(1LL,n,0); printf("%lld\n",ans); return 0;}
阅读全文
0 0
- BZOJ 1853 [Scoi2010]幸运数字 容斥
- BZOJ 1853 SCOI2010 幸运数字 容斥原理+DFS
- BZOJ 1853 [Scoi2010]幸运数字 (容斥原理)
- bzoj 1853: [Scoi2010]幸运数字(容斥原理)
- 【bzoj 1853】 [Scoi2010] 幸运数字(容斥原理)
- 【BZOJ 1853】[Scoi2010]幸运数字 【容斥原理】
- [BZOJ 1853][Scoi2010]幸运数字:容斥原理
- [BZOJ]1853: [Scoi2010]幸运数字 容斥原理
- BZOJ 1853: [Scoi2010]幸运数字
- BZOJ 1853 [Scoi2010]幸运数字
- ☆【容斥原理】【SCOI2010】幸运数字
- 【SCOI2010】【容斥原理】幸运数字
- 【bzoj1853】 SCOI2010幸运数字 容斥原理
- BZOJ1853 [Scoi2010]幸运数字 容斥原理
- [BZOJ1853][SCOI2010][容斥原理]幸运数字
- bzoj1853[Scoi2010]幸运数字 容斥原理
- [bzoj-1853][Scoi2010]幸运数字 题解
- 1853: [Scoi2010]幸运数字
- 1AADL使用说明(构建类声明)
- #hash#:md5
- 总结
- GO 学习笔记(一)
- 2017 JUST Programming Contest 3.0 E. The Architect Omar
- BZOJ 1853 [Scoi2010]幸运数字 容斥
- 设计模式——享元模式
- iOS11问题: 定位服务在iOS11系统上不能使用?
- 九度OJ——1023Excel排序
- flask框架,api压力测试
- 树状数组-单点修改区间查询-区间修改单点查询-区间修改区间查询
- (M)Dynamic Programming:63. Unique Paths II
- 034 微分学定义
- 设计模式-(4)生成器(建造者)模式