COGS 513 八
513. 八
http://www.cogs.pro/cogs/problem/problem.php?pid=513
★☆ 输入文件:eight.in 输出文件:eight.out 简单对比
时间限制:1 s 内存限制:128 MB
【问题描述】
八是个很有趣的数字啊。八=发,八八=爸爸,88=拜拜。当然最有趣的还是8用二进制表示是1000。怎么样,有趣吧。当然题目和这些都没有关系。
某个人很无聊,他想找出[a,b]中能被8整除却不能被其他一些数整除的数。
【输入文件】
第一行一个数n,代表不能被整除的数的个数。第二行n个数,中间用空格隔开。第三行两个数a,b,中间一个空格。
【输出文件】
一个整数,为[a,b]间能被8整除却不能被那n个数整除的数的个数。
【样例输入】
eight.in
3
7764 6082 462
2166 53442
【样例输出】
eight.out
6378
【数据规模】
对于30%的数据, 1≤n≤5,1≤a≤b≤100000。
对于100%的数据,1≤n≤15,1≤a≤b≤10^9,N个数全都小于等于10^4大于等于1。
容斥原理
全集Z=能被8整除的数
性质p1为能被n1整除,p2为不能被8整除,能被n2整除……
ans=Z中不包含任意性质p的数
这些数都有一个前提:在Z中,所以最小公倍数初值为8
dfs过程中遇到的障碍:
求好几个数的lcm时,
没有必要for枚举几个数,在枚举哪几个数
容斥原理所有项的加加减减都是集合的所有子集
所以dfs时只需分这个数加不加入这个子集即可
这样计算n个数的lcm时,还可利用计算的n-1个数的lcm结果
递归式写法:
#include<cstdio>
using namespace std;
int n,ans;
long long a,b,f[];
int cal(long long m)
{
return b/m-(a-)/m;
}
long long gcd(long long x,long long y)
{
return y ? gcd(y,x%y):x;
}
long long lcm(long long x,long long y)
{
return x*y/gcd(x,y);
}
void dfs(int now,long long num,int sum)
{
if(now==n+)
{
int s=cal(num);
if(sum%) ans-=s;
else ans+=s;
return;
}
long long next=lcm(num,f[now]);
dfs(now+,next,sum+);
dfs(now+,num,sum);
}
int main()
{
freopen("eight.in","r",stdin);
freopen("eight.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%lld",&f[i]);
scanf("%lld%lld",&a,&b);
dfs(,,);
printf("%d",ans);
}
非递归写法:
利用二进制生成子集
#include<cstdio>
using namespace std;
int n,ans;
long long a,b,f[];
int cal(long long m)
{
return b/m-(a-)/m;
}
long long gcd(long long x,long long y)
{
return y ? gcd(y,x%y):x;
}
long long lcm(long long x,long long y)
{
return x*y/gcd(x,y);
}
int main()
{
freopen("eight.in","r",stdin);
freopen("eight.out","w",stdout);
scanf("%d",&n);
for(int i=;i<n;i++) scanf("%lld",&f[i]);
scanf("%lld%lld",&a,&b);
int sum=<<n,cnt;
ans=b/-(a-)/;
long long lcmm;
for(int i=;i<sum;i++)
{
cnt=;lcmm=;
for(int j=;j<n;j++)
if(i&(<<j)) lcmm=lcm(lcmm,f[j]),cnt++;
if(cnt&) ans-=b/lcmm-(a-)/lcmm;
else ans+=b/lcmm-(a-)/lcmm;
}
printf("%d",ans);
}
COGS 513 八的更多相关文章
- Cogs 513. 八(容斥原理)
八 ★☆ 输入文件:eight.in 输出文件:eight.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] 八是个很有趣的数字啊.八=发,八八=爸爸,88=拜拜.当然最有趣的 ...
- Cogs 1714. [POJ1741][男人八题]树上的点对(点分治)
[POJ1741][男人八题]树上的点对 ★★★ 输入文件:poj1741_tree.in 输出文件:poj1741_tree.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] ...
- COGS 2111. [NOIP2015普及]扫雷游戏
★ 输入文件:2015mine.in 输出文件:2015mine.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] 扫雷游戏是一款十分经典的单机小游戏.在 n 行 ...
- 如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成
阅读目录 前言 建模 实现 结语 一.前言 前面几篇已经实现了一个基本的购买+售价计算的过程,这次再让售价丰满一些,增加一个会员价的概念.会员价在现在的主流电商中,是一个不大常见的模式,其带来的问题是 ...
- iOS可视化动态绘制八种排序过程
前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...
- 我的MYSQL学习心得(八) 插入 更新 删除
我的MYSQL学习心得(八) 插入 更新 删除 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得( ...
- Mina、Netty、Twisted一起学(八):HTTP服务器
HTTP协议应该是目前使用最多的应用层协议了,用浏览器打开一个网站就是使用HTTP协议进行数据传输. HTTP协议也是基于TCP协议,所以也有服务器和客户端.HTTP客户端一般是浏览器,当然还有可能是 ...
- CRL快速开发框架系列教程八(使用CRL.Package)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)
Oracle 11G RAC数据库安装(八) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...
随机推荐
- sprint冲刺(第二天)
今天的每日立会是在早上早餐后8点在宿舍讨论的,大概讨论了关于四则运算练习器APP的看法,也对一些较为基础的功能进行说明
- static作用(修饰函数、局部变量、全局变量)
转自:http://www.cnblogs.com/stoneJin/archive/2011/09/21/2183313.html 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作 ...
- pygame学习笔记(2)——从画点到动画
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 1.单个像素(画点)利用pygame画点主要有三种方法:方法一:画长宽为1个像素的正方形 #@小五义 http:/ ...
- Linux下的网卡Bonding
1. 网卡Bonding一共有0-6七种mode,具体区别请自行搜索: 2. 建议通过nmtui命令在交互模式下配置,这样不会落下重要的字段,也不用去记忆到底有哪些字段: 3. 我的实验环境是VMWa ...
- mysql中enum类型
ENUM类型 ENUM 是一个字符串对象,其值通常选自一个允许值列表中,该列表在表创建时的列规格说明中被明确地列举. 在下列某些情况下,值也可以是空串("") 或 NULL: 如果 ...
- C# 调用 taskkill命令结束服务进程
获取服务映像名称 windows服务安装后会在注册表中存储服务信息,路径是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\[服务名称] 通过I ...
- 原生Ajax函数
前言 在日常工作中,我经常使用Jquery的Ajax来获取接口数据.这几天有一个的官网要制作,由于网站比较小,有一些与服务器通信的接口处理,并没有涉及到复杂的交互功能.为了可以减少加载Jquery库的 ...
- Qt——结合qt和python
经常使用qt的童鞋一定有过这样的经历:百度或Google某个关于Qt的问题的时候,发现有的解答不是用的C++,而是包含很多py.__init__.self之类的词. 如果学过python,你会发现,这 ...
- P4838 P哥破解密码
题目背景 P哥是一个经常丢密码条的男孩子. 在ION 8102赛场上,P哥又弄丢了密码条,笔试满分的他当然知道这可是要扣5分作为惩罚的,于是他开始破解ION Xunil系统的密码. 题目描述 定义一个 ...
- MT【133】磨刀不误砍柴工
(2018,4月学考数学填空最后一题) \(f(x)=2x^2-(x-a)|x-a|-2 \ge 0\)对任意\(x\in R\)恒成立,求\(a\)的范围______ 提示:\(f(0)=a|a|- ...