HDU1796 How many integers can you find【容斥定理】
题目链接:
http://acm.hdu.edu.cn/showproblem.php?
pid=1796
题目大意:
给你一个整数N。和M个整数的集合{A1、A2、…、Am}。集合内元素为非负数(包括零),求小于N的
正整数(1~N-1)中,能被M个整数的集合中随意一个元素整除的正整数个数。
比如N = 12。M = {2,3},在1~N-1中,能被2整除的数为{2,4,6。8。10},能被3整除的数为
{3。6,9}。则所求集合为{2,3,4。6,8,9,10},共7个,则答案为7。
思路:
就是求M个集合的并集。先看上边的样例。能被2整除的数集合S1为{2,4,6,8。10},能被3整除的数
集合S2为{3,6。9}。而两者交集S12为能被LCM(2,3) = 6整除的数为{6}。
则两者并集 S = S1 + S2 - S12。
依据容斥定理得:若有M个数,则可求出1~N-1中能被不同组合的公倍数整除的个数。
1~N-1能被公倍数整除的个数为 (N-1) / LCM。然后依据奇数项加,偶数项减的原则得出答案个数。
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
using namespace std; int Gcd(int a,int b)
{
if(a < b)
int temp = a, a = b, b = temp;
if(b == 0)
return a;
return Gcd(b,a%b);
} int Lcm(int a,int b)
{
return a/Gcd(a,b)*b;
} int N,M;
int A[220],Select[220]; int Solve()
{
int ans = 0;
for(int i = 1; i < (1 << M); ++i)
{
int odd = 0;
for(int j = 0; j < M; ++j)
{
if((1<<j) & i)
{
Select[++odd] = j;
}
}
int LCM = 1;
for(int j = 1; j <= odd; ++j)
LCM = Lcm(LCM,A[Select[j]]);
if(odd & 1)
ans += N/LCM;
else
ans -= N/LCM;
}
return ans;
} int main()
{
int d;
while(~scanf("%d%d",&N,&M))
{
for(int i = 0; i < M; ++i)
{
scanf("%d",&d);
if(d)
A[i] = d;
else
i--,M--;
}
N--;
printf("%d\n",Solve());
} return 0;
}
HDU1796 How many integers can you find【容斥定理】的更多相关文章
- hdu 1796 How many integers can you find 容斥定理
How many integers can you find Time Limit: 12000/5000 MS (Java/Others) Memory Limit: 65536/32768 ...
- HDU 1796How many integers can you find(简单容斥定理)
How many integers can you find Time Limit: 12000/5000 MS (Java/Others) Memory Limit: 65536/32768 ...
- Codeforces Round #330 (Div. 2) B. Pasha and Phone 容斥定理
B. Pasha and Phone Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/595/pr ...
- How Many Sets I(容斥定理)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3556 How Many Sets I Time Limit: 2 ...
- HDU 1695 GCD 欧拉函数+容斥定理 || 莫比乌斯反演
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 4135 Co-prime 欧拉+容斥定理
Co-prime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- HDU 1695 GCD(容斥定理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- TOJ 4008 The Leaf Eaters(容斥定理)
Description As we all know caterpillars love to eat leaves. Usually, a caterpillar sits on leaf, eat ...
- HDU5768Lucky7(中国剩余定理+容斥定理)(区间个数统计)
When ?? was born, seven crows flew in and stopped beside him. In its childhood, ?? had been unfortun ...
随机推荐
- 使用CSS3制作网站常用的小三角形
现在在前端开发中,经常会看到一些小三角形,如一些导航的下拉菜单,还有一些聊天信息的气泡模式,很多时候我们都是通过切图片的方法来制作,今天零度给大家分享一个完全通过css3实现的小三角效果. 先上htm ...
- 2015合肥网络赛 HDU 5489 Removed Interval LIS+线段树(树状数组)
HDU 5489 Removed Interval 题意: 求序列中切掉连续的L长度后的最长上升序列 思路: 从前到后求一遍LIS,从后往前求一遍LDS,然后枚举切开的位置i,用线段树维护区间最大值, ...
- DC、CDC及CDC的各个子类
设备描述表是一个包含设备信息的结构体(物理设备如显示器.打印机),MFC中关于图像操作都需要DC来完成.HDC是Windows的一种数据类型,是设备描述句柄:CDC是MFC封装的Windows 设 ...
- 线程1—Runnable
随便选择两个城市作为预选旅游目标.实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000ms以内),哪个先显示完毕,就决定去哪个城市.分别用Runnable接口和Thread类实 ...
- 1355: [Baltic2009]Radio Transmission
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 958 Solved: 659[Submit][Status][Discuss] Description ...
- 减少XML文件数
在android开发中,做出漂亮的ui的应用,往往有数量庞大的xml文件.比如,我们要给一个Button加上一个selector,如果背景不是图片,就得写三个xml文件,分别是:edit_focuse ...
- tensorflow-gpu
1.Cuda 查看Cuda支持的GPU型号:https://developer.nvidia.com/cuda-gpus 下载cuda:https://developer.nvidia.com/cud ...
- 11 hbase源码系列(十一)Put、Delete在服务端是如何处理
hbase源码系列(十一)Put.Delete在服务端是如何处理? 在讲完之后HFile和HLog之后,今天我想分享是Put在Region Server经历些了什么?相信前面看了<HTab ...
- BestCoder Round #11 (Div. 2)
太菜,仅仅能去Div2.(都做不完 ORZ... 各自是 HDU: 5054pid=5054"> Alice and Bob 5055Bob and math problem 5056 ...
- Android导入工程提示Invalid project description
在eclipse里导入的时候报错,提示 Invalid project description. 解决的方法: 在eclipse的workspace中,找到.metadata目录,依次打开------ ...