bzoj1853幸运数字——容斥原理】的更多相关文章

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1853 dfs实现容斥原理即可. 注意:若在init中写“cnt++”,则出来后需要先cnt--再继续!! 代码如下: #include<iostream> #include<cstdio> #include<algorithm> using namespace std; typedef long long ll; ll l,r,a[],b[],ans,cnt,ct;…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1853 题意概括 求一个区间范围内,近似幸运数字的个数. 定义: 幸运数字:仅由6或者8组成的数字. 近似幸运数字:幸运数字的正整数倍. 题解 我们发现幸运数字很少. 然后,我们考虑容斥. 我们发现原来的大整数除几次机会很小.所以记忆化dfs容斥,中途跳出. 这样可以节省很多时间. 然后居然过去了. 代码 #include <cstring> #include <cstdio> #i…
Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是"幸运号码"!但是这种"幸运号码"总是太少了,比如在[1,100]的区间内就只有6个(6,8,66,68,86,88),于是他又定义了一种"近似幸运号码".lxhgww规定,凡是"幸运号码"的倍数都是"近似幸运号码…
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 1774  Solved: 644[Submit][Status][Discuss] Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是太少了,比如在[1,100]的区间内就只有6个(6,8,…
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 2405  Solved: 887[Submit][Status][Discuss] Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是太少了,比如在[1,100]的区间内就只有6个(6,8,…
传送门 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是"幸运号码"!但是这种"幸运号码"总是太少了,比如在[1,100]的区间内就只有6个(6,8,66,68,86,88),于是他又定义了一种"近似幸运号码".lxhgww规定,凡是"幸运号码"的倍数都是"近似…
容易发现幸运数字只有1024个,暴力标记倍数还是会tle的 容斥,即从中任选i个的lcm,复杂度为$o(2^1024)$ 剪枝一:当答案超过1024就不用算了 剪枝二:当某个数是另一个数的倍数时就删掉 (另外求lcm可能会爆long long,由于爆了long long一定不合法,因此可以用除法来判定) 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 ll x,y,ans,a[10005]; 5…
题意:"幸运号码"是十进制表示中只包含数字6和8的那些号码,求\([l,r]:r \le 10^10\)之间"幸运号码"的倍数个数 发现幸运号码貌似很少唉,去掉幸运号码的倍数只有943个 直接统计有重复,考虑容斥 \[{1个的倍数}-{两个的倍数}+...\] 怎么算? 多个数的倍数就是他们的\(lcm\)的倍数,直接搜索,当前\(lcm>r\)就剪掉,从大到小来加速 然后求\(lcm\)会爆long long,先整除判一下 这是不等式的放缩吗? #inclu…
题意:求闭区间内能被6和8组成的数字整除的数目.n<=1e11. 我们可以预处理出这些6和8组成的数字,大概2500个,然后排除一些如88,66的情况.这样大概还剩下1000个. 转化为[0,r]和[0,l-1]的问题,显然需要运用容斥原理.ans=n/6+n/8+n/68+...+...-n/lcm(6,8)-n/lcm(6,68)...... 因此用dfs即可计算出来,这样一看复杂度好像是2^1000的样子,但是注意到lcm增长的很快,如果lcm>n那么显然之后的这些情况就可以忽略了. 这…
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1853 容斥原理的应用. 发现十位的话只有2047个只含6或8的数,故可以存.它们的倍数个数只要到时候用边界除以一下就行了. 但容斥原理是指数级别的.故剪枝: 因为比 r 大的 lcm 就没用了.故若当前的累计lcm已经大于r,因为越乘越大,故直接剪掉. 怎样考虑顺序才能使剪枝更有效呢? 在每一层都有两种情况:选当前元素和不选当前元素.一直递归到序号大于n时更新答案并return: 也就是排在…