BZOJ1853: [Scoi2010]幸运数字(容斥原理)
题意
询问区间$(l, r)$中有多少个数是只含$6, 8$的数的倍数
Sol
思路很妙啊。
首先在$10^{10}$内只含$6, 8$的数有$\sum_{i = 1}^{10} 2^i = 2046$个。
然后去掉相同的,应该是有$943$个。
之间算不好算,考虑用容斥原理。
但是直接容斥的复杂度很显然是$2^n$的
考虑剪枝!
当前的数大于上界,肯定要return
由于题目规定的数在$\sqrt {10^{10}}$内也就十几个,因此是可以跑过的。
注意中间算lcm的时候是会爆long long的!我们需要先转成double,再判断
// luogu-judger-enable-o2 // luogu-judger-enable-o2 #include<iostream> #include<algorithm> #include<cstdio> #include<stack> #include<vector> #include<cstring> #define int long long //#define int long long using namespace std; const int MAXN = 1e6; inline int read() {char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9'){if(c == '-') f = -1; c = getchar();}while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();return x * f; } int Mx = 10000000000LL; vector<int> a; int flag[MAXN], vis[MAXN], b[MAXN], out, cnt, l, r; void Pre(int now) {if(now >= Mx) return ;a.push_back(now);Pre(now * 10 + 6); Pre(now * 10 + 8); } void dfs(int dep, int x, int opt) {if(x > r) return ;if(dep > cnt) {if(x != 1) out -= opt * (r / x - (l - 1) / x); return ;}dfs(dep + 1, x, opt);int g = x / __gcd(x, b[dep]);if((double) g * b[dep] > (double)r) return;dfs(dep + 1, g * b[dep], opt * -1); } int solve() {dfs(1, 1, 1);return out; } main() {Pre(6);Pre(8);for(int i = 0; i < a.size(); i++) for(int j = 0; j < a.size(); j++)if((i != j) && (a[j] > a[i]) && (a[j] % a[i] == 0)) flag[j] = 1;for(int i = 0; i < a.size(); i++)if(!flag[i]) b[++cnt] = a[i]; sort(b + 1, b + cnt + 1, greater<int>());l = read(), r = read();printf("%lld", solve());return 0; } /* 1000 1000 */
转载于:https://www.cnblogs.com/zwfymqz/p/9542666.html
BZOJ1853: [Scoi2010]幸运数字(容斥原理)相关推荐
- 【bzoj1853】[Scoi2010]幸运数字 容斥原理+搜索
题目描述 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是&quo ...
- bzoj1853: [Scoi2010]幸运数字 dp+容斥原理
在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是"幸运号 ...
- bzoj1853 [Scoi2010]幸运数字
http://www.elijahqi.win/archives/3883 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码 ...
- [luogu2576 SCOI2010] 幸运数字 (容斥原理)
传送门 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,66 ...
- P2567 [SCOI2010]幸运数字
P2567 [SCOI2010]幸运数字 题意: 我们规定只含6或8的数字为幸运号码,而幸运号码的倍数我们也认为是幸运号码,问[l,r]中有多少个幸运号码? 题解: 第一反应是数位dp,但其实不是,我 ...
- [SCOI2010]幸运数字
题目描述 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是&quo ...
- 【BZOJ-18532393】幸运数字Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MB Submit: 1817 Solved: 665 [Submit][Statu ...
- 数论五之容斥——硬币购物,Gerald and Giant Chess,幸运数字,Sky Full of Stars,已经没有什么好害怕的了
容斥的神 [HAOI2008]硬币购物 problem solution code CF559C Gerald and Giant Chess problem solution code [SCOI2 ...
- [BZOJ1853][SCOI2010][容斥原理]幸运数字
Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,88 ...
最新文章
- ThreadLocal的正确使用与原理
- using 指令是不需要的和其他两个C#错误
- 中国蚁剑的下载、安装与使用
- 微信小程序的z-index在苹果ios无效
- 2017百度之星程序设计大赛 - 复赛 01,03,05
- .NET异步程序设计之任务并行库
- 南昌理工学院计算机网络技术专业怎么样,南昌理工学院怎么样 重点专业是什么...
- 【数据结构与算法】双链表V3.0的Java实现
- Linux基本命令介绍
- LeetCode - 9. 回文数
- VBA自定义方法 快捷键设置
- G.8032 ERPS 轻松强固网络安全!
- pywin32、win32api、win32gui、win32com、win32con 都是啥?
- android 刷路由器,荣耀立方WS860s路由器完整刷机包怎么使用?荣耀立方刷机图文教程...
- 软件实施工程师的经验之谈(适合新手,老鸟请指正)
- 北斗时钟同步服务器,电力系统卫星时钟-GPS北斗时钟方案
- 网站服务器mine类型设置,windows服务器如何配置MIME类型
- 智能镜像分发工具dragonfly的安装和使用
- ggplot多图叠加_R作图 ggplot2图片的布局排版
- python多条件求和_python – Numpy:条件求和
热门文章
- java跳出循环break;return;continue使用
- Docker在Windows上运行NetCore系列(一)使用命令控制台运行.NetCore控制台应用
- VC++ 进度条更新方案
- Redis开发运维实践数据操作之HyperLogLog操作
- Android控制文字水平间距android:letterSpacing
- MySQL双主(master-master)补充
- Backbone模型
- 扬帆技术论坛系统封装工具 SPAT v 5.5.3.6_BETA1[官方最新版]
- Linux学习笔记:GDB常用命令
- IT运维管理为重,从业务需求看网管系统的选择