0
点赞
收藏
分享

微信扫一扫

ACM入门之【容斥定理】

上古神龙 2022-04-21 阅读 67
算法c++

在这里插入图片描述
看上图可能会很迷,我们直接看例题。
例题一:
在这里插入图片描述
很经典的容斥,我们可以用二进制枚举来枚举所有的集合。
对于每一个集合的正负号,就是该集合内的集合数。例如:
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
LL a[25],n,m,sum;
LL solve(LL n)
{
    LL sum=0;
    for(int i=1;i<(1<<m);i++)//注意从1开始
    {
        LL temp=n,cnt=-1;
        for(int j=0;j<m;j++)
        {
            if(i>>j&1)
            {
                temp/=a[j],cnt=cnt*(-1);
            }
        }
        sum=sum+cnt*temp;
    }
    return sum;
}
int main(void)
{
    cin>>n>>m;
    for(int i=0;i<m;i++) cin>>a[i];
    cout<<solve(n);
    return 0;
}
举报

相关推荐

0 条评论