BZOJ1853 [Scoi2010]幸运数字 容斥原理
欢迎访问~原文出处——博客园-zhouzhendong
去博客园看该题解
题目传送门 - BZOJ1853
题意概括
求一个区间范围内,近似幸运数字的个数。
定义:
幸运数字:仅由6或者8组成的数字。
近似幸运数字:幸运数字的正整数倍。
题解
我们发现幸运数字很少。
然后,我们考虑容斥。
我们发现原来的大整数除几次机会很小。所以记忆化dfs容斥,中途跳出。
这样可以节省很多时间。
然后居然过去了。
代码
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
using namespace std;
typedef unsigned long long LL;
int totluck;
LL L,R,ans,luck[2050];
bool alive[2050];
void df(LL x){
if (x>R)
return;
if (x>0)
luck[++totluck]=x;
df(x*10+6);
df(x*10+8);
}
LL gcd(LL a,LL b){
return b?gcd(b,a%b):a;
}
void dfs(int num,int pos,LL Lcm){
if (pos>totluck){
if (num==0)
return;
if (num%2==1)
ans+=R/Lcm-(L-1)/Lcm;
else
ans-=R/Lcm-(L-1)/Lcm;
return;
}
dfs(num,pos+1,Lcm);
LL g=Lcm/gcd(Lcm,luck[pos]);
if (1.0*g*luck[pos]<=R)
dfs(num+1,pos+1,g*luck[pos]);
}
bool cmp(LL a,LL b){
return a>b;
}
int main(){
scanf("%llu%llu",&L,&R);
totluck=0;
df(0);
sort(luck+1,luck+totluck+1,cmp);
memset(alive,true,sizeof alive);
for (int i=1;i<totluck;i++)
for (int j=i+1;j<=totluck&&alive[i];j++)
if (luck[i]%luck[j]==0)
alive[i]=0;
int to=0;
for (int i=1;i<=totluck;i++)
if (alive[i])
luck[++to]=luck[i];
totluck=to;
ans=0;
dfs(0,1,1);
printf("%llu\n",ans);
return 0;
}
BZOJ1853 [Scoi2010]幸运数字 容斥原理的更多相关文章
- BZOJ1853 Scoi2010 幸运数字 【枚举+容斥】
BZOJ1853 Scoi2010 幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号 ...
- Bzoj 1853: [Scoi2010]幸运数字 容斥原理,深搜
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1774 Solved: 644[Submit][Status] ...
- bzoj1853[Scoi2010]幸运数字 容斥
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 3027 Solved: 1128[Submit][Status ...
- 1853: [Scoi2010]幸运数字[容斥原理]
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 2405 Solved: 887[Submit][Status] ...
- [BZOJ1853][Scoi2010]幸运数字 容斥+搜索剪枝
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 3202 Solved: 1198[Submit][Status ...
- 【BZOJ1853】[Scoi2010]幸运数字 容斥原理+搜索
Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,88 ...
- bzoj1853: [Scoi2010]幸运数字 dp+容斥原理
在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是 ...
- BZOJ1853 [Scoi2010]幸运数字
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- 2019.01.17 bzoj1853: [Scoi2010]幸运数字(容斥+dfs)
传送门 搜索菜题,然而第一次没有注意然后爆longlonglong longlonglong了. 题意:称所有数位由6,86,86,8组成的数为幸运数字,问一个一个区间[l,r][l,r][l,r]中 ...
随机推荐
- Dojo与jQuery综合比较分析
最近一直都在参与项目,无法抽空写些或者看些东西,周末抽了点时间看了下关于Dojo和Jquery的东西,在CSDN上看到一篇两个框架进行对比的文章,感觉写的不错,就拿了过来,没有别的意思,一来想保留下来 ...
- 工控安全入门之Modbus(转载)
工控安全这个领域比较封闭,公开的资料很少.我在读<Hacking Exposed Industrial Control Systems>,一本16年的书,选了的部分章节进行翻译,以其抛砖引 ...
- Bleve代码阅读(二)——Index Mapping
引言 Bleve是Golang实现的一个全文检索库,类似Lucene之于Java.在这里通过阅读其代码,来学习如何使用及定制检索功能.也是为了通过阅读代码,学习在具体环境下Golang的一些使用方式. ...
- MySQL(二)MySQL的启动或链接失败
有时候用命令mysql -u root -p 或者服务器启动mysql数据库的时候,会出现抛出异常并失败. 以下是遇过的异常. 1.1)抛出的异常:出现ERROR 2002 (HY000): Can' ...
- ssh Jetson tk1
背景: 因为TK1要放到智能车上,不方便打开roscore和各个节点,因此需要PC远程控制. 方法: 在PC端用ssh命令登录: (1)命令sudo ssh tegra-ubuntu.local(te ...
- <crtdbg.h> 的作用
1.在调试状态下让win程在输出窗口中显示调试信息,可以用_RPTn 宏n为显示参数比如_RPT0(_CRT_WARN,"text"); _RPT1(_CRT_WARN," ...
- Codeplex最流行25个开源项目
1. VMukti富媒体协作平台 2. Microsoft SQL Server Product Samples: Engine 3. Patterns & Practices: Enterp ...
- Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历))
Python3 日期时间 相关模块(time(时间) / datatime(日期时间) / calendar(日历)) 本文由 Luzhuo 编写,转发请保留该信息. 原文: http://blog. ...
- W-GAN系 (Wasserstein GAN、 Improved WGAN)
学习总结于国立台湾大学 :李宏毅老师 WGAN前作:Towards Principled Methods for Training Generative Adversarial Networks W ...
- SciPy模块应用
1.图像模糊 图像的高斯模糊是非常经典的图像卷积例子.本质上,图像模糊就是将(灰度)图像I 和一个高斯核进行卷积操作:,其中是标准差为σ的二维高斯核.高斯模糊通常是其他图像处理操作的一部分,比如图像 ...