【BZOJ 1853】 1853: [Scoi2010]幸运数字 (容斥原理)
1853: [Scoi2010]幸运数字
Time Limit: 2 Sec Memory Limit: 64 MB
Submit: 2472 Solved: 911Description
在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的“幸运号码”是十进制表示中只包含数字6和8的那些号码,比如68,666,888都是“幸运号码”!但是这种“幸运号码”总是太少了,比如在[1,100]的区间内就只有6个(6,8,66,68,86,88),于是他又定义了一种“近似幸运号码”。lxhgww规定,凡是“幸运号码”的倍数都是“近似幸运号码”,当然,任何的“幸运号码”也都是“近似幸运号码”,比如12,16,666都是“近似幸运号码”。 现在lxhgww想知道在一段闭区间[a, b]内,“近似幸运号码”的个数。Input
输入数据是一行,包括2个数字a和bOutput
输出数据是一行,包括1个数字,表示在闭区间[a, b]内“近似幸运号码”的个数Sample Input
【样例输入1】
1 10
【样例输入2】
1234 4321Sample Output
【样例输出1】
2
【样例输出2】
809HINT
【数据范围】
对于30%的数据,保证1 < =a < =b < =1000000
对于100%的数据,保证1 < =a < =b < =10000000000Source
【分析】
这道题,是很经典的容斥。只是复杂度有些玄学。
就是现求出所有lucky number,然后对于比如说66是6的倍数,66可以删掉。
然后找6的倍数,+1,8的倍数+1,6和8的公倍数,-1。。。。【就是这样容斥
你lucky number排序后从大到小枚举,超过b就return,就可以过了。
【对了,不要直接求lcm,达到了10^10,会爆LL,我就这样超时了。。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL long long LL a,b;
LL w[];
void ffind(LL x)
{
if(x*+<=b) {w[++w[]]=x*+;ffind(x*+);}
if(x*+<=b) {w[++w[]]=x*+;ffind(x*+);}
} LL gcd(LL a,LL b)
{
if(b==) return a;
return gcd(b,a%b);
}
LL ans=;
void dfs(LL x,LL y,LL f)
{
if(x==)
{
ans+=f*(b/y-(a-)/y);
return;
}
LL g=gcd(y,w[x]);
if(y/g<=b/w[x]) dfs(x-,y/g*w[x],-f);
dfs(x-,y,f);
} int main()
{
scanf("%lld%lld",&a,&b);
w[]=;ffind();
sort(w+,w++w[]);
int nw=;
for(int i=;i<=w[];i++)
{
if(w[i]==-) continue;
w[++nw]=w[i];
for(int j=i+;j<=w[];j++) if(w[j]!=-&&w[j]%w[i]==)
{
w[j]=-;
}
}w[]=nw;
dfs(w[],,-);
printf("%lld\n",b-a++ans);
return ;
}
2017-04-19 20:32:25
【BZOJ 1853】 1853: [Scoi2010]幸运数字 (容斥原理)的更多相关文章
- Bzoj 1853: [Scoi2010]幸运数字 容斥原理,深搜
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 1774 Solved: 644[Submit][Status] ...
- 1853: [Scoi2010]幸运数字[容斥原理]
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 2405 Solved: 887[Submit][Status] ...
- BZOJ1853 [Scoi2010]幸运数字 容斥原理
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1853 题意概括 求一个区间范围内,近似幸运数字的个数. 定义: 幸运数字:仅由6或者8组成的数字. ...
- 【BZOJ1853】[Scoi2010]幸运数字 容斥原理+搜索
Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,666,88 ...
- [luogu2576 SCOI2010] 幸运数字 (容斥原理)
传送门 Description 在中国,很多人都把6和8视为是幸运数字!lxhgww也这样认为,于是他定义自己的"幸运号码"是十进制表示中只包含数字6和8的那些号码,比如68,66 ...
- [SCOI2010]幸运数字 [容斥原理 dfs]
题意:"幸运号码"是十进制表示中只包含数字6和8的那些号码,求\([l,r]:r \le 10^10\)之间"幸运号码"的倍数个数 发现幸运号码貌似很少唉,去掉 ...
- 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] ...
- AC日记——[SCOI2010]幸运数字 bzoj 1853
1853: [Scoi2010]幸运数字 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 2405 Solved: 887[Submit][Status] ...
随机推荐
- Network File System
Network File System 2014-12-31 #system 接着上一篇博客Distributed Systems 分布式系统来扯淡,之前的博客一再在写文件系统,这次继续,只不过是分布 ...
- F - Debate CodeForces - 1070F 思维
题目链接:https://vjudge.net/problem/CodeForces-1070F 具体思路:首先把所有的00放进去,然后对于10 和01 的取两个数目最小值t,排完序后将前t个加起来, ...
- 绿色的银行类cms管理系统模板——后台
链接:http://pan.baidu.com/s/1pK7Vu9X 密码:4cc5
- Linux 脚本内容指定用户执行
#!/bin/bash set -x ## 因为这些变量在下面要用,所以要写在最上面, ## 如果直接写在下面,则变量获取不到,并且下面的 $ 标识的都要用 引号引起来,否则这些参数接收不到 tarf ...
- JSON.parse()——json字符串转JS
JSON 通常用于与服务端交换数据. 在接收服务器数据时一般是字符串. 我们可以使用 JSON.parse() 方法将数据转换为 JavaScript 对象. 语法 JSON.parse(text[, ...
- rabbitmq和kafka怎么选?【转】
MQ框架非常之多,今天简单说一下有代表性的两个MQ(rabbitmq和kafka).经常会有人问rabbitmq和kafka到底哪个好呢?其实没有好与不好之分,只有哪个更合适,首先要根据自己项目的业务 ...
- PHP 不让标准浏览器(firfox,chrome等)走浏览器的缓存页面
或在HTML页面里加: <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache,no-store, must-reva ...
- [How to] HBase的bulkload使用方法
1.简介 将数据插入HBase表中的方法很多,我们可以通过TableOutputFormat以Mapreduce on HBase的方式将数据插入,也可以单纯的使用客户端API将数据插入.但是以上方法 ...
- Dagger:快速的依赖注入for 安卓&Java
Dagger:快速的依赖注入for 安卓&Java 2014年5月8日 星期四 15:29 官网: http://square.github.io/dagger/ GitHub: https: ...
- 【转载】移动开发中的上下左右滑动插件jquery.swipe.js
原文地址http://blog.csdn.net/pvfhv/article/details/3449803/# 源码: (function($) { var old = $.fn.swipe; $. ...