翻了一些blog,只有我用状压预处理嘛2333,。把二进制位的0当成6,1当成8就行啦。(2393是2和9

然后\( dfs \)容斥,加上一个数的\( lcm \),减去两个数的\( lcm \),加上三个数的\( lcm \)...需要一些剪枝来控制复杂度。

剪枝:

1.对于预处理出来的幸运数字,把倍数都去掉

2.当\( lcm>b \)时退出

注意当选择了0个数时不更新答案。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const long long inf=1e18+7;
long long a,b,p[3005],ans;
bool cmp(const long long &a,const long long &b)
{
return a>b;
}
long long gcd(long long a,long long b)
{
return b==0?a:gcd(b,a%b);
}
void dfs(int x,int y,long long z)
{
if(x>p[0])
{
if(y&1)
ans+=((y&1)?1:-1)*(b/z-(a-1)/z);
else if(y)
ans-=b/z-(a-1)/z;
return;
}
dfs(x+1,y,z);
long long tmp=z/gcd(p[x],z);
if((double)p[x]*tmp<=b)
dfs(x+1,y+1,p[x]*tmp);
}
int main()
{
for(long long i=1;i<=10;i++)
for(long long j=0;j<(1<<i);j++)
{
long long now=0ll;
for(long long k=1,b=j;k<=i;k++,b>>=1)
{
if(b&1)
now=now*10+8;//9
else
now=now*10+6;//2
}
p[++p[0]]=now;
}
sort(p+1,p+1+p[0]);
for(long long i=1;i<=p[0];i++)
if(p[i]!=inf)
for(long long j=i+1;j<=p[0];j++)
if(p[j]%p[i]==0ll)
p[j]=inf;
sort(p+1,p+1+p[0]);
while(p[p[0]]==inf)
p[0]--;
sort(p+1,p+1+p[0],cmp);
scanf("%lld%lld",&a,&b);
dfs(1,0,1);
printf("%lld\n",ans);
return 0;
}

bzoj 1853: [Scoi2010]幸运数字&&2393: Cirno的完美算数教室【容斥原理】的更多相关文章

  1. Bzoj 2393: Cirno的完美算数教室 容斥原理,深搜

    2393: Cirno的完美算数教室 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 287  Solved: 175[Submit][Status][ ...

  2. [bzoj 2393] Cirno的完美算数教室 (容斥原理+dfs剪枝)

    题目描述 CirnoCirnoCirno发现了一种bakabakabaka数,这种数呢只含有222和999两种数字 现在CirnoCirnoCirno想知道[L,R][L,R][L,R]中有多少个数能 ...

  3. 【BZOJ-1853&2393】幸运数字&Cirno的完美算数教室 容斥原理 + 爆搜 + 剪枝

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

  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. ●BZOJ 2393 Cirno的完美算数教室

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2393 题解: 容斥原理,暴力搜索,剪枝...和 [Scoi2010 幸运数字] 一样的(只是 ...

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

    http://www.lydsy.com/JudgeOnline/problem.php?id=1853 题意: 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运 ...

  9. ●BZOJ 1853 [Scoi2010]幸运数字

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=1853 题解: 容斥原理,暴力搜索,剪枝(这剪枝剪得真玄学) 首先容易发现,幸运号码不超过 2 ...

随机推荐

  1. POJ 2109 Power of Cryptography【高精度+二分 Or double水过~~】

    题目链接: http://poj.org/problem?id=2109 参考: http://blog.csdn.net/code_pang/article/details/8263971 题意: ...

  2. HDU 5668 Circle

    中国剩余定理. 可以手动模拟一下每一次开始的人的编号和结束的人的编号. 每次删掉一个人,对剩下的人重新编号. 这样一次模拟下来,可以得到n个方程 形如:(u[i]+k)%(n-i+1)=v[i] 化简 ...

  3. java课堂测试—根据模板完成一个简单的技术需求征集系统

    课堂上老师发布了一个页面模板要求让我们实现一个系统的功能,模仿以后后端的简单工作情况. 然后在这个模板的基础上,提供了一个注册的网页模板,接着点击注册的按钮,发现register里面调用了zhu/zh ...

  4. Linux下设置swappiness参数来配置内存使用到多少才开始使用swap分区(转)

    swappiness的值的大小对如何使用swap分区是有着很大的联系的.swappiness=0的时候表示最大限度使用物理内存,然后才是swap空间,swappiness=100的时候表示积极的使用s ...

  5. win7右下角无线网图标显示未连接,但是实际上已连接上,也能上网

    首先,要确实是不是服务启动的问题,方法很简单,重新启动电脑就可以. 如果问题依旧,那么按下Win+R快捷键,输入“services.msc”,打开服务界面. 然后会看到右侧窗口出现好多设置项,找到“R ...

  6. Win7 丢失MSVCR110.DLL的解决办法

    1 从下面的网站下载dll文件 http://www.ddooo.com/softdown/27034.htm   2 把该文件放到C:\Windows\SysWOW64目录下(64位系统)或者C:\ ...

  7. 用Lazarus编写第一个程序Pascal版的hello world

    安装 Lazarus的过程不用多说,都是傻瓜式的. 打开Lazarus.Lazarus会自己主动新建一个窗体形式的应用程序. 你会看到五个窗体. 主窗体 这个窗体显示有标题栏.菜单条和工具栏. 对象视 ...

  8. Java基础实例

    打印等腰三角形代码 public class ForForTest{ public static void main(String []args){ for(int x=0;x<5;x++){ ...

  9. leveldb学习:DBimpl

    leveldb将数据库的有关操作都定义在了DB类,它负责整个系统功能组件的连接和调用.是整个系统的脊柱. level::DB是一个接口类,真正的实如今DBimpl类. 作者在文档impl.html中描 ...

  10. iOS开发——高级篇——iOS涂鸦画板效果实现

    一个简单的绘图应用,模仿苹果自带软件备忘录里的涂鸦功能 核心代码 #import "DrawView.h" #import "DrawPath.h" @inte ...