#搜索,容斥#洛谷 2567 [SCOI2010]幸运数字
题目
问区间\([l,r],l,r\leq 10^{10}\)中有多少个数是
数位由6或8组成的数的倍数(包括本身)
分析
数位由6或8组成的数最多有两千多种,
这可以直接一遍暴搜得到
对于区间\([1,n]\)答案应该是\(\frac{n}{i}-\frac{n}{i*j}+\frac{n}{i*j*k}\)
当选出的数的最小公倍数超过\(n\)可以剪枝,不会达到上界,
但是这样远远不够,考虑若\(i|j\)那么\(j\)显然可以直接舍弃,剩下的数可以降序排序后剪枝
然后对于超过\(n/2\)的数被选择只能选择自己(两数gcd至少为2),可以提前处理,这样就可以AC了
代码
#include <cstdio>
#include <algorithm>
#define rr register
using namespace std;
typedef long long lll; bool v[2111];
lll b[2111],l,r,ans,sum,now,m;
inline void Pro(lll now,lll n){
if (now>n) return;
b[++b[0]]=now;
Pro(now*10+6,n),
Pro(now*10+8,n);
}
inline lll gcd(lll x,lll y){return y?gcd(y,x%y):x;}
inline void dfs(int dep,lll lcm,int cnt){
if (dep>m) return;
dfs(dep+1,lcm,cnt);
rr lll t=lcm*b[dep]/gcd(lcm,b[dep]);
if (t>now) return;
if (cnt&1) ans-=now/t;
else ans+=now/t;
dfs(dep+1,t,cnt+1);
}
inline lll answ(lll n){
if (!n) return 0;
ans=0,now=n,dfs(1,1,0);
return ans;
}
signed main(){
scanf("%lld%lld",&l,&r),Pro(6,r),Pro(8,r);
sort(b+1,b+1+b[0]);
for (rr int i=1;i<=b[0];++i) if (!v[i])
for (rr int j=i+1;j<=b[0];++j) if (b[j]%b[i]==0) v[j]=1;
for (rr int i=1;i<=b[0];++i)
if (!v[i]){
if (b[i]>r/2) sum+=r/b[i]-(l-1)/b[i];
else b[++m]=b[i];
}
reverse(b+1,b+1+m);
return !printf("%lld",sum+answ(r)-answ(l-1));
}
#搜索,容斥#洛谷 2567 [SCOI2010]幸运数字的更多相关文章
- [洛谷P2567] SCOI2010 幸运数字
问题描述 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是&quo ...
- [洛谷P3292] [SCOI2016]幸运数字
洛谷题目链接:[SCOI2016]幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城 ...
- 洛谷P3292 [SCOI2016] 幸运数字 [线性基,倍增]
题目传送门 幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的 ...
- 洛谷P3292 [SCOI2016]幸运数字 线性基+倍增
P3292 [SCOI2016]幸运数字 传送门 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在 ...
- 洛谷P3292 [SCOI2016]幸运数字(倍增+线性基)
传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 第一眼:这不会是个倍增LCA暴力合并线性基吧…… 打了一发……A了? 所以这真的是个暴力倍增LCA合并线性基么…… ps:据某大佬说其实可以离线之后 ...
- [BZOJ1853][Scoi2010]幸运数字 容斥+搜索剪枝
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 3202 Solved: 1198[Submit][Status ...
- bzoj1853[Scoi2010]幸运数字 容斥
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 3027 Solved: 1128[Submit][Status ...
- BZOJ1853 Scoi2010 幸运数字 【枚举+容斥】
BZOJ1853 Scoi2010 幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号 ...
- 【BZOJ1853/2393】[Scoi2010]幸运数字/Cirno的完美算数教室 DFS+容斥
[BZOJ1853][Scoi2010]幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那 ...
- bzoj 1853: [Scoi2010]幸运数字 容斥
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1170 Solved: 406[Submit][Status] ...
随机推荐
- 从零开始学Spring Boot系列-Hello World
欢迎来到从零开始学Spring Boot的旅程!在这个系列的第二篇文章中,我们将从一个非常基础但重要的示例开始:创建一个简单的Spring Boot应用程序,并输出"Hello World& ...
- CXP2.0的相机是否可以使用CXP1.1的Grabber
可以 答案是肯定的. 目前CXP共有2个发布版本: 2011年发布CXP1.1 2021年发布CXP2.1,向后兼容,新标准增加了同步功能.数据率放大了一倍. 只要是符合CXP标准.接插件匹配,那么C ...
- SDWebImage从小白到大师蜕变
简介 SDWebImage提供的简洁的获取远程URL图片的API:平时开发中使用最多场景就是列表中的cell中要显示远程图片的需求,在具体的实现中要避免加载图片造成的界面卡顿,列表卡顿等现象的出现:所 ...
- 【Azure 应用服务】Azure Function Timer触发函数加上Singleton后的问题
问题描述 在Azure Function Timer Trigger的函数中,添加了Singleton属性,当Function的实例变为3个后,发现Timer函数并没有在三个实例上同时运行,每次触发时 ...
- [Linux] 快速修改hosts访问github
sudo sed -i '/github/d' /etc/hosts sudo bash -c "curl https://gitlab.com/ineo6/hosts/-/raw/mast ...
- C++ 函数指针,指针函数,左值右值
C++ 函数指针,指针函数,左值右值 1.函数指针 是一个指针类型的变量,存放的内容都是函数的指针,用来间接调用函数,格式如下: int add( int a, int b) { return a+b ...
- 文心一言 VS 讯飞星火 VS chatgpt (209)-- 算法导论15.4 6题
六.设计一个 O(nlgn) 时间的算法,求一个 n 个数的序列的最长单调递增子序列.(提示:注意到,一个长度为 i 的候选子序列的尾元素至少不比一个长度为 i-1 候选子序列的尾元素小.因此,可以在 ...
- RabbitMQ 快速复习
目录 RabbitMQ学习笔记 1.消息队列概述 1.1 为什么学习消息队列 1.2 什么是消息中间件 1.3 消息队列应用场景 1.3.1 异步处理 1.3.2 解耦服务 1.3.3 流量削峰 1. ...
- base64实现图片多图上传功能
function webPic_upload($savepath,$url_data){$mark=ture; $pic_url=''; if(is_array($url_data)){ foreac ...
- guava和redis 都是缓存用的,不过redis要起服务,guava不用起服务
guava和redis 都是缓存用的,不过redis要起服务,guava不用起服务