【题解】SCOI2010幸运数字
最近在学习容斥相关,于是就看到了这个题。一开始以为是补集转化,但是观察一下马上发现不可行,好像直接做会比较容易一些。一个数满足要求的充要条件即为是一个幸运数字的倍数,那么容斥可以轻松搞定,只要枚举是一个数字/两个数字/三个数字的倍数……即可。打一个表找出<1e10的所有幸运数……竟然有2043个。不过显然其中互为倍数的那些个我们可以直接删掉其中大一些的那个数。这样删去之后,还剩下943个数。
到这里我突然觉得好懵逼啊……左想右想再也想不出新的优化。于是看题解,发现竟然真的是爆搜加了两个剪枝。其中一个是当LCM>B的时候直接返回(不会产生贡献),第二个是从大到小排序,让大的数更容易被淘汰掉。果然爆搜的复杂度是非常玄妙的一件事……竟然跑得飞快?启发是一定要勇敢的打暴力,没准就过了(・ω <)
不过为什么只有我一个要开unsigned long long 捏……
#include <bits/stdc++.h>
using namespace std;
#define int unsigned long long
#define ll long long
#define maxn 5000
int A, B, ans, luck[maxn], data[maxn];
int tot, cnt; int read()
{
int x = , k = ;
char c;
c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; c = getchar(); }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} void dfs(int now, int n)
{
if(now) luck[++ cnt] = now;
if(now * (ll) + (ll) <= n) dfs(now * (ll) + (ll) , n);
if(now * (ll) + (ll) <= n) dfs(now * (ll) + (ll) , n);
} bool cmp(int a, int b) { return a > b; } int GCD(int a, int b)
{
while(b)
{
int c = a % b;
a = b;
b = c;
}
return a;
} void solve(int num, int cnt, int lcm)
{
if(num > tot)
{
if(cnt)
{
if(cnt & ) ans += (B / lcm) - ((A - ) / lcm);
else ans -= (B / lcm) - ((A - ) / lcm);
}
return;
}
solve(num + , cnt, lcm);
int gcd = GCD(data[num], lcm);
int LCM = (lcm / gcd) * data[num];
if(LCM <= B) solve(num + , cnt + , LCM);
} signed main()
{
A = read(), B = read();
dfs(, B);
sort(luck + , luck + + cnt);
for(int i = ; i <= cnt; i ++)
{
data[++ tot] = luck[i];
for(int j = ; j < tot; j ++)
if(!(luck[i] % data[j])) { tot --; break; }
}
sort(data + , data + + tot, cmp);
solve(, , );
printf("%lld\n", ans);
return ;
}
【题解】SCOI2010幸运数字的更多相关文章
- Bzoj 1853: [Scoi2010]幸运数字 容斥原理,深搜
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1774 Solved: 644[Submit][Status] ...
- 【BZOJ1853/2393】[Scoi2010]幸运数字/Cirno的完美算数教室 DFS+容斥
[BZOJ1853][Scoi2010]幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那 ...
- 【LG2567】[SCOI2010]幸运数字
[LG2567][SCOI2010]幸运数字 题面 洛谷 题目大意: 问你区间\([L,R](1\leq L\leq R\leq 10^{10})\)中有几个数是仅由\(6,8\)组成的数的倍数. 题 ...
- 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: 1170 Solved: 406[Submit][Status] ...
- bzoj1853[Scoi2010]幸运数字 容斥
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 3027 Solved: 1128[Submit][Status ...
- BZOJ_2393_Cirno的完美算数教室&&BZOJ_1853_[Scoi2010]幸运数字 _深搜+容斥原理
BZOJ_2393_Cirno的完美算数教室&&BZOJ_1853_[Scoi2010]幸运数字 _深搜+容斥原理 题意: ~Cirno发现了一种baka数,这种数呢~只含有2和⑨两种 ...
- 【BZOJ 1853】 1853: [Scoi2010]幸运数字 (容斥原理)
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 2472 Solved: 911 Description 在中国 ...
- 1853: [Scoi2010]幸运数字[容斥原理]
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 2405 Solved: 887[Submit][Status] ...
- BZOJ1853 Scoi2010 幸运数字 【枚举+容斥】
BZOJ1853 Scoi2010 幸运数字 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号 ...
随机推荐
- 上传文件到阿里云linux服务器
在“运行”中输入cmd,打开控制台,切换到刚才Putty的安装目录下,我的是E:\Putty,然后输入pscp命令,我们需要这个命令来实现文件的上传.如下图所示,命令格式为: pscp D:\recy ...
- java 时间转换去杠
public static String minusHyphen(String dateParam){ if(dateParam ==null) return null; if(dateParam.i ...
- Xcode升到7.1插件失效解决方法
Mac前段时间下载了新的OS系统与Xcode 7.1,然而在使用Xcode 7.1时,发现插件不能用了,瞬间木有爱了,正好交流群里有人问到了插件失效的问题,经过各路大神的神通最终用下面这种方法完美解决 ...
- vuex组件 vuex-persistedstate
vuex用于管理项目中的全局状态,但是我们一刷新vuex中保存的全局状态就会被全部初始化,虽然我们也可以同事缓存到storage中做两步操作,但是vuex-persistedstate组件已经帮我们完 ...
- Python学习之模块基础
模块就是程序 编写以下简单代码 print('hello python') 并将py文件保存在c盘的python(假设新建)文件下,通过pycharm的Terminal 或者windom命令窗口调出p ...
- JAVA 基础编程练习题
1 [程序 1 不死神兔] 题目:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?程序分析: 兔子的规 ...
- codeblocks编译出错问题的解答!(编译c++ 或者c程序)
典型错误:https://blog.csdn.net/jingmiaa/article/details/52054204 MinGW下载并配置gcc/g++编译环境:https://blog.csdn ...
- Unity 对象的批处理
本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/52813834 作者:car ...
- 单服务器最大tcp连接数及调优汇总
启动线程数: 启动线程数=[任务执行时间/(任务执行时间-IO等待时间)]*CPU内核数 最佳启动线程数和CPU内核数量成正比,和IO阻塞时间成反比.如果任务都是CPU计算型任务,那么线程数最多不超过 ...
- ORB-SLAM 代码笔记(五)Frame类
Frame类的成员变量主要包含从摄像头获取的图像的 1. 特征点信息(关键点+描述字) 2. 尺寸不变特征所用金字塔信息,这些都定义在ORBextractor对象中 3. 词袋模型参数,用于跟踪失败情 ...