【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? ...
 
随机推荐
- .NET MVC控制器分离到类库的方法
			
在.ASP.NET MVC的开发中,我们创建完项目之后,ASP.NET MVC是已Model-Controller-View的形式存在的,在创建项目自动生成的内容上Model我们很容易分离成类库,所以 ...
 - Construct Binary Tree from Preorder and Inorder Traversal
			
Construct Binary Tree from Preorder and Inorder Traversal Given preorder and inorder traversal of a ...
 - Python-01-基础
			
一.安装Python 官方下载地址:https://www.python.org/downloads/ Windows可直接下载安装,安装时勾选自动配置环境变量即可. Linux/OS X默认装有Py ...
 - 单页面网站关于id冲突的解决办法
			
最近做了一个单页面的网站,所有的页面加载都是通过局部刷新的方式,并且不用iframe,并且我们引入了动态tab页签: 所有的页签里的内容都只是一个元素,都在同一个html页面上,没有任何iframe分 ...
 - Oracle 常用函数
			
主要是对项目中用过的 oracle 函数进行总结,并做出目录,方便后续项目是快速查找,提高效率. 01.Round (数值的四舍五入) 描述:传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算 ...
 - 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能
			
以往的Android开发有一个头疼的且拖慢速度的问题,就是你每改一行代码要想看到结果必须要编译运行到手机或者模拟器上,而且需要从头(可能是登录界面)一直点击到你修改的界面为止.开发一个完整的Andro ...
 - POJ2155 Matrix二维线段树经典题
			
题目链接 二维树状数组 #include<iostream> #include<math.h> #include<algorithm> #include<st ...
 - 【JavaEE企业应用实战学习记录】logFilter
			
package sanglp.servlet; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import ja ...
 - Maven的内置变量
			
Maven内置变量说明: ${basedir} 项目根目录(即pom.xml文件所在目录) ${project.build.directory} 构建目录,缺省为target目录 ${project. ...
 - jquery使用淘宝接口跨域查询手机号码归属地实例
			
<h1>手机号码归属地查询</h1> <div class="outer"> <p>请输入手机号码</p& ...