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基础知识学习的汇总 ...
随机推荐
- "1001. A+B Format (20)" 解题报告
Github : git@github.com:Circlecos/object-oriented.git PDF Of Markdown : "1001. A+B Format (20)& ...
- 第二次作业<2>
自学计划 应为对网络的教程并不了解,所以-- 我扒了一遍同学的博客,找到了两个课程. 慕课网 和 这个. 选择这两个教程主要是深入浅出,比较合理. 开始先两个课程相互应证,多了解以后可能会选择一个.虽 ...
- Java集合之HashSet/TreeSet原理
Set集合 1.HashSet 只去重复, 没有顺序 HashSet的add方法会调用hashCode和equals, 所以存储在HashSet中的对象需要重写这两个方法. 2.TreeSet ...
- Few-Shot/One-Shot Learning
Few-Shot/One-Shot Learning指的是小样本学习,目的是克服机器学习中训练模型需要海量数据的问题,期望通过少量数据即可获得足够的知识. Matching Networks for ...
- 【第十周】final预发布视频
final版本发布视频组名: 新蜂组长: 武志远组员: 宫成荣 谢孝淼 杨柳 李峤项目名称:java俄罗斯方块NEO平台:优酷地址:http://v.youku.com/v_show/id_XMTg0 ...
- js中的php rand函数
//文件rand.js function MyRand(min, max){ this.min = min; this.max = max; } MyRand.prototype.getRand = ...
- Spring学习13-中IOC(工厂模式)和AOP(代理模式)的详细解释
我们是在使用Spring框架的过程中,其实就是为了使用IOC,依赖注入,和AOP,面向切面编程,这两个是Spring的灵魂. 主要用到的设计模式有工厂模式和代理模式. IOC是工厂模式参考:设计模式- ...
- Python批量文件重命名
今天,得到一个里面都是图片的文件夹,但是图片都没有后缀,因此想用Pythton批量地为所有的文件加上".jpg"的后缀,代码如下: #-*- coding:utf-8 -*- #重 ...
- java 创建过程
- elasticsearch使用More like this实现基于内容的推荐
基于内容的推荐通常是给定一篇文档信息,然后给用户推荐与该文档相识的文档.Lucene的api中有实现查询文章相似度的接口,叫MoreLikeThis.Elasticsearch封装了该接口,通过Ela ...