[BZOJ2393] Cirno的完美算数教室(dfs+容斥原理)
先通过dfs预处理出来所有只有2和9的数,也就大概2000多个。
想在[L,R]中找到是这些数的倍数的数,可以通过容斥原理
那么如果a % b == 0,那么便可以把 a 去掉,因为 b 的倍数肯定包括 a 的倍数,那么就会只剩500多个数
然后我们dfs枚举所有数的可能,并顺便求出他们之间的lcm,选出来的数的个数,如果是奇数就对答案有正的贡献,如果是偶数就对答案有负的贡献
期间如果最小公倍数lcm>R的话就直接return,这个剪枝能省去大部分时间,以至AC
而在[L,R]区间的答案就是ans[1,R] - ans[1,L-1]
#include <cstdio>
#include <algorithm>
#define N 10001
#define LL long long int n, cnt = -1;
LL l, r, ans, f[N], num[N]; inline LL gcd(LL x, LL y)
{
return !y ? x : gcd(y, x % y);
} inline void dfs(LL v)
{
if(v > r) return;
num[++cnt] = v;
dfs(v * 10 + 2);
dfs(v * 10 + 9);
} inline void dfs_again(int i, int c, LL lcm)
{
if(i == n + 1)
{
if(c & 1) ans += r / lcm - (l - 1) / lcm;
else if(c) ans -= r / lcm - (l - 1) / lcm;
return;
}
dfs_again(i + 1, c, lcm);
LL tmp = lcm * f[i] / gcd(lcm, f[i]);
if(tmp <= r) dfs_again(i + 1, c + 1, tmp);
} int main()
{
int i, j;
scanf("%lld %lld", &l, &r);
dfs(0);
for(i = 1; i <= cnt; i++)
{
if(!num[i]) continue;
f[++n] = num[i];
for(j = i + 1; j <= cnt; j++)
if(num[j] % num[i] == 0) num[j] = 0;
}
std::sort(f + 1, f + n + 1);
dfs_again(1, 0, 1);
printf("%lld\n", ans);
return 0;
}
[BZOJ2393] Cirno的完美算数教室(dfs+容斥原理)的更多相关文章
- BZOJ2393: Cirno的完美算数教室
2393: Cirno的完美算数教室 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 138 Solved: 83[Submit][Status] D ...
- 【bzoj2393】【Cirno的完美算数教室】容斥原理的剪枝应用
(上不了p站我要死了,侵权度娘背锅) 在用容斥定理时,常常会用到dfs的形式,如果枚举完所有的情况可能会超时,其剪枝的优化很是重要. Description ~Cirno发现了一种baka数,这种数呢 ...
- bzoj 2393 Cirno的完美算数教室(容斥原理+搜索)
[题意] 定义C数为只包含数字2和9的数,求[L,R]内能被C数整除的个数. [思路] Dfs预处理出C数,并去除其中倍数的情况. Dfs搜索出现情况,奇数加,偶数减,当数值大于R时剪枝. [代码] ...
- 【BZOJ1853/2393】[Scoi2010]幸运数字/Cirno的完美算数教室 DFS+容斥
[BZOJ1853][Scoi2010]幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那 ...
- bzoj 1853: [Scoi2010]幸运数字&&2393: Cirno的完美算数教室【容斥原理】
翻了一些blog,只有我用状压预处理嘛2333,.把二进制位的0当成6,1当成8就行啦.(2393是2和9 然后\( dfs \)容斥,加上一个数的\( lcm \),减去两个数的\( lcm \), ...
- 【BZOJ-1853&2393】幸运数字&Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1817 Solved: 665[Submit][Status] ...
- Bzoj 2393: Cirno的完美算数教室 容斥原理,深搜
2393: Cirno的完美算数教室 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 287 Solved: 175[Submit][Status][ ...
- [bzoj 2393] Cirno的完美算数教室 (容斥原理+dfs剪枝)
题目描述 CirnoCirnoCirno发现了一种bakabakabaka数,这种数呢只含有222和999两种数字 现在CirnoCirnoCirno想知道[L,R][L,R][L,R]中有多少个数能 ...
- 【bzoj2393】Cirno的完美算数教室 数论容斥
Description ~Cirno发现了一种baka数,这种数呢~只含有2和⑨两种数字~~ 现在Cirno想知道~一个区间中~~有多少个数能被baka数整除~ 但是Cirno这么天才的妖精才不屑去数 ...
随机推荐
- Java MVC 增删改查 实例
需求:实现增加新部门的功能,对应数据库表示Oracle的dept表 一.Java MVC 增 实现: 1.视图层(V):注册部门 deptAdd.jsp 在注册新部门页面只需输入“部门名称”和“城市” ...
- CSS-学习笔记四
1.*用于匹配任何的标记 2.>用于指定父子节点关系 3.E+F毗邻元素选择器,匹配所以紧随E元素之后的同级元素F 4.E~F匹配所以E元素之后的同级元素F 5.名称[表达式] [att=val ...
- gvim -- 跳转命令,查找格式,正则
1.跳转命令 ‘w'单词前进,'b'单词后退,'e'单词前进,‘ge’单词后退,存在单词词首词尾区别,'W''B''E''gE'将不以单词区分,以空格区分 ‘$’行尾,'^'非空白行首,'0'行首 ‘ ...
- 远程linux服务器mysql数据库导入和导出.sql文件
大部分情况本地开发环境为windows,部署的服务器为Linux,本地数据库导出.sql文件后需要远程导入服务器,具体如下. 首先连接服务器,即服务器ip,协议,端口,用户名及密码,可以通过ftp客户 ...
- 状态压缩---区间dp第一题
标签: ACM 题目 Gappu has a very busy weekend ahead of him. Because, next weekend is Halloween, and he is ...
- javascript基本类型和引用类型,作用域和内存问题
基本类型(null.undefined.boolean.number.string)和引用类型(Object 对象) 1 基本类型:只能不存一个值,一种类型:从一个变量向另一个变量复制基本类型的值, ...
- 如何实现第二窗口不显示在windows下面的任务栏中
将要隐藏的窗体的的ShowInTaskBar属性设置为false;就好了
- iphone在jsp显示时间会NAN解决办法
例:2018-12-28 15:00:00 1. var newDate = new Date("2018-12-28 15:00:00") 这种获取的时间在安卓手机上显示是 ...
- 【page-monitor 前端自动化 上篇】初步调研
转载文章:来源(靠谱崔小拽) 前端自动化测试主要在于:变化快,不稳定,兼容性复杂:故而,想通过较低的成本维护较为通用的自动化case比较困难.本文旨在通过page-monitor获取和分析dom结构, ...
- 引入了junit为什么还是用不了@Test注解
pom文件明明引入了unit,为什么还是用不了@Test? 配置如下: <dependency> <groupId>junit</groupId> <arti ...