【BZOJ1853】幸运数字(搜索,容斥)

题面

BZOJ

洛谷

题解

成功轰下洛谷rk1,甚至超越了一个打表选手

这题思路很明显吧,先搞出来所有范围内的合法数字,然后直接容斥,

容斥的话显然没有别的办法解决,只能够爆搜,

那么我们就来大力剪枝:

1.如果当前的所有选定的数的\(lcm\)大于\(r\)直接退出,这不显然吗。。

2.如果一个合法数字是另外一个合法数字的倍数,那么这个数没有意义,这不还是显然吗。

3.把合法的所有数字从大往小排序,这样爆搜的时候更快突破边界。

好了,这样子就可以在洛谷上\(AC\)了,然而\(BZOJ\)总时限并过不去。

接着剪枝,现在因为所有数都不满足是另外一个数的倍数,

所以合并任意两个数的时候,\(lcm\)的最小情况就是乘上一个\(3\)

所以对于所有\(>r/3\)的合法数字,显然不能够和任何一个数合并了,

所以这一部分可以拿出来直接提前算好,再用剩下的数字爆搜就好啦。

跑得飞快的。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<cstring>
  5. #include<cmath>
  6. #include<algorithm>
  7. using namespace std;
  8. #define ll long long
  9. int tot;
  10. ll a[5050],ret,l,r;
  11. void dfs(ll x){if(x>r)return;if(x)a[++tot]=x;dfs(x*10+6);dfs(x*10+8);}
  12. const int MOD=1000000007;
  13. bool check(ll a,ll b)
  14. {
  15. int A=a/MOD,B=b/MOD;
  16. if(A*B)return true;
  17. return a*b>r;
  18. }
  19. void calc(int x,ll s,int cnt)
  20. {
  21. if(x>tot&&s!=1)
  22. {
  23. if(cnt&1)ret+=r/s-l/s;
  24. else ret-=r/s-l/s;
  25. return;
  26. }
  27. if(x>tot)return;
  28. calc(x+1,s,cnt);
  29. ll d=a[x]/__gcd(s,a[x]);
  30. if(!check(s,d))calc(x+1,s*d,cnt+1);
  31. }
  32. bool vis[5050];
  33. ll Work()
  34. {
  35. dfs(0);sort(&a[1],&a[tot+1]);
  36. int t=0;
  37. for(int i=1;i<=tot;++i)
  38. for(int j=1;j<i;++j)
  39. if(a[i]%a[j]==0){vis[i]=true;break;}
  40. for(int i=1;i<=tot;++i)
  41. if(!vis[i])
  42. {
  43. if(a[i]<=r/3)a[++t]=a[i];
  44. else ret+=r/a[i]-l/a[i];
  45. }
  46. tot=t;reverse(&a[1],&a[tot+1]);calc(1,1,0);
  47. return ret;
  48. }
  49. int main()
  50. {
  51. cin>>l>>r;--l;
  52. cout<<Work()<<endl;
  53. return 0;
  54. }

【BZOJ1853】幸运数字(搜索,容斥)的更多相关文章

  1. 2019.01.17 bzoj1853: [Scoi2010]幸运数字(容斥+dfs)

    传送门 搜索菜题,然而第一次没有注意然后爆longlonglong longlonglong了. 题意:称所有数位由6,86,86,8组成的数为幸运数字,问一个一个区间[l,r][l,r][l,r]中 ...

  2. [SCOI2010]幸运数字(容斥+爆搜)

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

  3. 【Luogu】P2567幸运数字(容斥爆搜)

    题目链接 先预处理出幸运数,把成倍数关系的剔掉,然后用容斥原理搜索一下. 这里的容斥很像小学学的那个“班上有n个同学,有a个同学喜欢数学,b个同学喜欢语文……”那样. #include<cstd ...

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

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

  5. BZOJ2393 & 1853 [Scoi2010]幸运数字 【搜索 + 容斥】

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

  6. [bzoj1853]幸运数字

    容易发现幸运数字只有1024个,暴力标记倍数还是会tle的 容斥,即从中任选i个的lcm,复杂度为$o(2^1024)$ 剪枝一:当答案超过1024就不用算了 剪枝二:当某个数是另一个数的倍数时就删掉 ...

  7. bzoj1853幸运数字

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1853 容斥原理的应用. 发现十位的话只有2047个只含6或8的数,故可以存.它们的倍数个数只要 ...

  8. bzoj1853幸运数字——容斥原理

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1853 dfs实现容斥原理即可. 注意:若在init中写“cnt++”,则出来后需要先cnt-- ...

  9. P2567 [SCOI2010]幸运数字

    题目 P2567 [SCOI2010]幸运数字 做法 容斥+剪枝 先预处理幸运数字,别看数据范围这么大,其实也没几个,然后去掉倍数这种 然后处理相似数字,一眼的容斥,递归选数然后求出这些的公倍数容斥一 ...

  10. BZOJ1853 [Scoi2010]幸运数字

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

随机推荐

  1. IEEE1588 ( PTP ) 协议简介

    IEEE1588 协议,又称 PTP( precise time protocol,精确时间协议),可以达到亚微秒级别时间同步精度,于 2002 年发布 version 1,2008 年发布 vers ...

  2. Netty源码分析第5章(ByteBuf)---->第1节: AbstractByteBuf

    Netty源码分析第五章: ByteBuf 概述: 熟悉Nio的小伙伴应该对jdk底层byteBuffer不会陌生, 也就是字节缓冲区, 主要用于对网络底层io进行读写, 当channel中有数据时, ...

  3. ansible软件2

    常用软件安装及使用目录  ansible使用1 第1章 copy模块 1.1 创建文件及写入内容 1. [root@m01 scripts]# ansible oldboy -m copy -a &q ...

  4. 【Py大法系列--01】20多行代码生成你的微信聊天机器人

    前言 近期Stack Overflow公布了一项调查显示,Python已经成了发展最快的主流编程语言,Python搭乘着数据科学和机器学习以及人工智能的浪潮,席卷了整个技术圈.越来越多的人想了解.想学 ...

  5. Redux和React-Redux的实现(二):Provider组件和connect的实现

    接着上一篇讲,上一篇我们实现了自己的Redux和介绍了React的context以及Provider的原理. 1. Provider组件的实现 Provider组件主要有以下下两个作用 在整个应用上包 ...

  6. Task 6.2站立会议二

    今天,我们开始自己开始编译运行代码了,服务器端,聊天界面的相关代码经过测试.大家都把自己的实验过程公布了,大家的交流对实验的进度也起到了很大的作用.明天我们要继续修改实验中的错误,然后大家一起把实验基 ...

  7. 剑指offer:用两个栈实现队列

    题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路: 可以用stack1来存所有入队的数.在出队操作中,首先将stack1中的元素清空,转移到sta ...

  8. 【TCP/IP详解 卷一:协议】第六章:DHCP 和自动配置

    简介 为了使用 TCP/IP 协议族,每台主机or路由器都需要一定的配置信息: IP地址 子网掩码 广播地址 路由或转发表 DNS 协议配置方法: 手动 通过使用网络服务来获得 使用一些算法来自动确定 ...

  9. 牛客网国庆集训派对Day5 题目 2018年

    链接:https://www.nowcoder.com/acm/contest/205/L来源:牛客网参考博客:https://blog.csdn.net/HTallperson/article/de ...

  10. 树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库 (三) 全双工通信

    设计思路 Arduino Leonardo初始化为发送模式,发送完成后,立即切换为接收模式,不停的监听,收到数据后立即切换为发送模式,若超过一定时间还为接收到数据,则切换为发送模式. 树莓派初始化为接 ...