题目

P2567 [SCOI2010]幸运数字

做法

容斥+剪枝

先预处理幸运数字,别看数据范围这么大,其实也没几个,然后去掉倍数这种

然后处理相似数字,一眼的容斥,递归选数然后求出这些的公倍数容斥一下

玄学剪枝:从大到小排列,若公倍数大于范围退出,加速大于范围的情况

My complete code

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cmath>
#include<ctime>
using namespace std;
typedef long long LL;
const int maxn=100000;
LL A,B;
int tot,cnt,ans;
LL a[maxn],num[maxn];
bool visit[maxn];
void First(int dep,int now,LL bit,LL x){
if(now>dep){
a[++tot]=bit;
return;
}
First(dep,now+1,bit+(x<<2)+(x<<1),(x<<3)+(x<<1)),
First(dep,now+1,bit+(x<<3),(x<<3)+(x<<1));
}
inline bool cmp(LL x,LL y){
return x>y;
}
inline LL Gcd(LL a,LL b){
while(b){
LL c=a%b;
a=b,b=c;
}
return a;
}
inline LL Calc(LL l,LL r,LL lcm){
return r/lcm-(l-1)/lcm;
}
void Dfs(int dep,int now,LL val){
if(val>B)
return;
if(dep>cnt){
if(now==0)
return;
ans+=Calc(A,B,val)*((now&1)?1:-1);
return;
}
Dfs(dep+1,now,val);
LL lcm=val/Gcd(val,num[dep]);
if(1.0*lcm*num[dep]<=B)
Dfs(dep+1,now+1,lcm*num[dep]);
}
int main(){
scanf("%lld%lld",&A,&B);
int t1=clock();
for(int i=1;i<=10;++i)
First(i,1,0,1);//printf("233");
for(int i=1;i<=tot;++i){
if(!visit[i])
num[++cnt]=a[i];
for(int j=i+1;j<=tot;++j)
if(a[j]%a[i]==0)
visit[j]=true;
}
sort(num+1,num+1+cnt,cmp);
Dfs(1,0,1ll);
printf("%lld\n",ans);
return 0;
}/*
1 10000000000
*/

P2567 [SCOI2010]幸运数字的更多相关文章

  1. P2567 [SCOI2010]幸运数字 DFS+容斥定理

    P2567 [SCOI2010]幸运数字 题目描述 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,66 ...

  2. Luogu P2567 [SCOI2010]幸运数字 容斥+脑子

    双倍经验:BZOJ 2393 Cirno的完美算数教室 做法:先把$[1,r]$中所有的幸运数字筛出来,然后用这些幸运数字来筛$[l,r]$中的近似幸运号码: 剪枝:当一个幸运数字$a[i]$是另一个 ...

  3. [洛谷P2567] SCOI2010 幸运数字

    问题描述 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是&quo ...

  4. BZOJ 1853: [Scoi2010]幸运数字

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 2117  Solved: 779[Submit][Status] ...

  5. Bzoj 1853: [Scoi2010]幸运数字 容斥原理,深搜

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 1774  Solved: 644[Submit][Status] ...

  6. bzoj 1853: [Scoi2010]幸运数字 容斥

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 1170  Solved: 406[Submit][Status] ...

  7. bzoj1853[Scoi2010]幸运数字 容斥

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 3027  Solved: 1128[Submit][Status ...

  8. BZOJ_2393_Cirno的完美算数教室&&BZOJ_1853_[Scoi2010]幸运数字 _深搜+容斥原理

    BZOJ_2393_Cirno的完美算数教室&&BZOJ_1853_[Scoi2010]幸运数字 _深搜+容斥原理 题意: ~Cirno发现了一种baka数,这种数呢~只含有2和⑨两种 ...

  9. 【BZOJ 1853】 1853: [Scoi2010]幸运数字 (容斥原理)

    1853: [Scoi2010]幸运数字 Time Limit: 2 Sec  Memory Limit: 64 MBSubmit: 2472  Solved: 911 Description 在中国 ...

随机推荐

  1. OSX: 命令行制作U盘Recovery HD

    使用命令行操作,非常easy,可是操作不当非常危急! 免责声明:假设操作不当造成的数据丢失,本人概不负责. 为什么? 不是有OSX恢复磁盘助理嘛?是的.假设仅仅想使用GUI的软件.能够去苹果官方站点: ...

  2. linux 下gtest 安装

    cd gtest_dir //解压后的目录 mkdir mybuild # Create a directory to hold the build output. cd mybuild cmake ...

  3. cadence allegro pcb模块设计复用

    cadence allegro pcb模块设计复用 转载▼ 标签: 复用 模块 原理图 元件 文件 杂谈 分类: PCB技术 在你遇到如上图所示的dsp阵列PCB时,如果你的layout软件支持模块复 ...

  4. JAVA实现EXCEL公式专题(七)——统计函数

    统计函数主要实现的是较为复杂的统计函数如countif.sumif.frequency,也是,直接上代码 /** * 项目名称: * 文件说明: * 主要特点:文件说明:EXCEL函数类型:统计函数 ...

  5. 浅谈&quot;壳&quot;(一)

    壳,即坚硬的外皮,当壳的厚度与其曲面率半径的比值小于0.5时.称为"薄壳".反之称为"厚壳".由壳演化来的胸甲,盾牌. 在计算机这个注重创意又不失从文化科技中汲 ...

  6. iOS CAGradientLayer白色渐变至上向下

    项目需求当显示富文本内容高度太高的的时候不全部显示出来,而是显示查看更多按钮,当点击查看更多时把全部内容展开.同时未展开部分要加一个渐变模糊的效果. 上效果图: 这里要用到CAGradientLaye ...

  7. Android备份和添加短信

    手机发送成功的,没有成功的,接受的短信都存放在手机自带的数据库中. 现在想要备份一下这个短信,需要访问这个数据库,然后查询所有的短信.就需要内容提供者(短信). 首先要找到内容提供者的uri.

  8. Java应用一般架构

    转载一下文章: 自己连看三便方的其要点精髓. 当我们架设一个系统的时候通常需要考虑到如何与其他系统交互,所以我们首先需要知道各种系统之间是如何交互的,使用何种技术实现. 1. 不同系统不同语言之间的交 ...

  9. saltstack之软件管理

    1.installed安装软件包 例: 安装NFS /srv/salt/pkg/nfs.sls nfs: pkg.installed: - pkgs: - nfs-utils 在命令行执行如下 sal ...

  10. centos set up samba

    原文中文链接:https://wiki.centos.org/zh/HowTos/SetUpSamba 原文英文链接:https://wiki.centos.org/HowTos/SetUpSamba ...