【BZOJ-1853&2393】幸运数字&Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝
1853: [Scoi2010]幸运数字
Time Limit: 2 Sec Memory Limit: 64 MB
Submit: 1817 Solved: 665
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 10
【样例输入2】
1234 4321
Sample Output
2
【样例输出2】
809
HINT
【数据范围】
对于30%的数据,保证1 < =a < =b < =1000000
对于100%的数据,保证1 < =a < =b < =10000000000
Source
2393: Cirno的完美算数教室
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 299 Solved: 183
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
HINT
Source
Solution
容斥原理 爆搜 剪枝
先预处理出baka数(幸运数),再去一下重(删除能被其他baka数整除的)
容斥之前有一个结论:
N内a或b的倍数的个数=N/a+N/b-N/lcm(a,b),即:a在N以内的倍数+b在N以内的倍数-a和b两个在N以内的相同的倍数(所以从 最小公倍数 开始)
然后就可以容斥,爆搜+剪枝 就可以A了 一个最行之有效的剪枝就是一开始所说的去重 也可以吧超过R的部分直接忽略
By The Way:baka数可以正常A,幸运数那题,需要改成unsigned long long,不然会TLE (可是本机明明跑的一样快)
Code
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 100100
unsigned long long L,R;
int top,Top;
unsigned long long stack[maxn],ans;
void Prework(long long x)
{
if (x<=R) stack[++top]=x; else return;
Prework(x*+); Prework(x*+);
}
bool cmp(long long a,long long b) {return a>b;}
long long gcd(long long a,long long b) {if (!b) return a; return gcd(b,a%b);}
void DFS(int dep,int t,long long x)
{
if (dep==Top+)
{
if (t%) ans+=R/x-(L-)/x;
else if (t) ans-=R/x-(L-)/x;
return;
}
DFS(dep+,t,x);
if (stack[dep]*x/gcd(stack[dep],x)<=R)
DFS(dep+,t+,stack[dep]*x/gcd(stack[dep],x));
}
int main()
{
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
scanf("%lld%lld",&L,&R);
Prework(); Prework();
sort(stack+,stack+top+);
// for (int i=1; i<=top; i++) printf("%d ",stack[i]); puts("");
for (int i=; i<=top; i++)
if (stack[i])
{
for (int j=i+; j<=top; j++)
if (stack[j]%stack[i]==) stack[j]=;
stack[++Top]=stack[i];
}
sort(stack+,stack+Top+,cmp);
// for (int i=1; i<=Top; i++) printf("%d ",stack[i]); puts("");
DFS(,,);
printf("%lld\n",ans);
return ;
}
BZOJ1853
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 10010
int L,R,top,Top;
long long stack[maxn],ans;
void Prework(long long x)
{
if (x<=R) stack[++top]=x; else return;
Prework(x*+); Prework(x*+);
}
bool cmp(long long a,long long b) {return a>b;}
long long gcd(long long a,long long b) {if (!b) return a; return gcd(b,a%b);}
void DFS(int dep,int t,long long x)
{
if (dep==Top+)
{
if (t%) ans+=R/x-(L-)/x;
else if (t) ans-=R/x-(L-)/x;
return;
}
DFS(dep+,t,x);
if (stack[dep]*x/gcd(stack[dep],x)<=(long long)R)
DFS(dep+,t+,stack[dep]*x/gcd(stack[dep],x));
}
int main()
{
scanf("%d%d",&L,&R);
Prework(); Prework();
sort(stack+,stack+top+);
// for (int i=1; i<=top; i++) printf("%d ",stack[i]); puts("");
for (int i=; i<=top; i++)
if (stack[i])
{
for (int j=i+; j<=top; j++)
if (stack[j]%stack[i]==) stack[j]=;
stack[++Top]=stack[i];
}
sort(stack+,stack+Top+,cmp);
// for (int i=1; i<=Top; i++) printf("%d ",stack[i]); puts("");
DFS(,,);
printf("%lld\n",ans);
return ;
}
去CodeVS群问了波..感觉弱智+10
【BZOJ-1853&2393】幸运数字&Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝的更多相关文章
- Bzoj 2393: Cirno的完美算数教室 容斥原理,深搜
2393: Cirno的完美算数教室 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 287 Solved: 175[Submit][Status][ ...
- 【BZOJ1853/2393】[Scoi2010]幸运数字/Cirno的完美算数教室 DFS+容斥
[BZOJ1853][Scoi2010]幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那 ...
- [bzoj 2393] Cirno的完美算数教室 (容斥原理+dfs剪枝)
题目描述 CirnoCirnoCirno发现了一种bakabakabaka数,这种数呢只含有222和999两种数字 现在CirnoCirnoCirno想知道[L,R][L,R][L,R]中有多少个数能 ...
- BZOJ2393: Cirno的完美算数教室
2393: Cirno的完美算数教室 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 138 Solved: 83[Submit][Status] D ...
- BZOJ 1853: [Scoi2010]幸运数字
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 2117 Solved: 779[Submit][Status] ...
- Bzoj 1853: [Scoi2010]幸运数字 容斥原理,深搜
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1774 Solved: 644[Submit][Status] ...
- bzoj 1853: [Scoi2010]幸运数字 容斥
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1170 Solved: 406[Submit][Status] ...
- bzoj 1853: [Scoi2010]幸运数字&&2393: Cirno的完美算数教室【容斥原理】
翻了一些blog,只有我用状压预处理嘛2333,.把二进制位的0当成6,1当成8就行啦.(2393是2和9 然后\( dfs \)容斥,加上一个数的\( lcm \),减去两个数的\( lcm \), ...
- BZOJ1853:[SCOI2010]幸运数字 & BZOJ2393:Cirno的完美算数教室——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1853 https://www.lydsy.com/JudgeOnline/problem.php? ...
随机推荐
- Centos6 修改max user processes limits
ulimit:显示(或设置)用户可以使用的资源的限制(limit),这限制分为软限制(当前限制)和硬限制(上限),其中硬限制是软限制的上限值,应用程序在运行过程中使用的系统资源不超过相应的软限制,任何 ...
- http://www.cnblogs.com/figure9/p/developer-reading-list.html
http://www.cnblogs.com/figure9/p/developer-reading-list.html
- 学习C++.Primer.Plus 6 分支语句和逻辑操作符
||. &&操作符是一个顺序点 < 操作符从左向右结合 ; < age < )//17<age为true, = 1,肯定 < 27.所以为整个条件为tru ...
- EF下泛型分页方法,更新方法
/// <summary> /// 获取分页的分页集合 /// </summary> /// <typeparam name="S">实体类型& ...
- 解决Package illuminate/html is abandoned, you should avoid using it. Use laravelcollective/html instead.问题
解决步骤: 1.分析问题是因为laravel5.1不赞成使用illuminate/html而推荐使用laravelcollective/html包,所以我们利用composer命令移除illumina ...
- 你真的熟悉background吗?
一两个月没更新博客了,因为放假刚在深圳找了实习,一直都比较忙碌,不过我觉得再忙,还是需要时间去沉淀一些东西,工作的时候别人看到的只是你有没有实现最终的结果,但自己是否思考,是否去总结,决定着你工作是否 ...
- Asp.Net Core-几行代码解决Razor中的嵌套if语句
MVC开发中,经常会遇到在razor中插入简单的逻辑判断. @if (clientManager.IsAdmin) { if (!Model.Topic.Top) { <a asp-action ...
- express+session实现简易身份认证
本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 文章概览 本文基于express.express-session ...
- 从零开始搭建架构实施Android项目
我们先假设一个场景需求:刚有孩子的爸爸妈妈对用照片.视频记录宝宝成长有强烈的意愿,但苦于目前没有一款专门的手机APP做这件事.A公司洞察到市场需求,要求开发团队尽快完成Android客户端的开发.以下 ...
- 使用windbg查看DependencyObject的属性
这里以WPF作为探测用的例子,简单一些,看看Title的值是什么样子.(之所以写这个,因为不是简单的一个!do就能看到东西的,中间要绕两下,这也涉及到了DependencyObject的实现机制及数据 ...