首页 > 其他分享 >容斥

容斥

时间:2022-09-07 18:01:20浏览次数:86  
标签:int LL 容斥 1LL ans invf mod

NC15079 大水题

模板题

#include<bits/stdc++.h>
#define LL long long
using namespace std;
LL a[5]={0,2,5,11,13};
int main()
{
    LL n;
    while(scanf("%lld",&n)!=EOF)
    {
        LL ans=n;
        for(int i=1,cnt=0;i<=15;++i,cnt=0)
        {
            int tot=i,j=0;
            LL tmp=1;
            while(tot)
            {
                ++j;
                if(tot&1)
                {
                    ++cnt;
                    tmp*=a[j];
                }
                tot>>=1;
            }
            if(cnt&1)ans-=n/tmp;
            else ans+=n/tmp;
        }
        printf("%lld\n",ans);
    }
}
大水题

NC19857 最后的晚餐(dinner)

正难则反

求有i对相邻的方案数

至少0对相邻的-至少1对相邻的+至少2对相邻的-......

i对相邻的方案数是(2^i)*C(n,i)*(2*n-i)!

#include<bits/stdc++.h>
#define LL long long
using namespace std;
const LL mod=1000000007;
int f[30000005],invf[30000005];
int ksm(int x,int k)
{
    int s=1;
    while(k)
    {
        if(k&1)    s=1LL*s*x%mod;
        k>>=1;
        x=1LL*x*x%mod;
    }
    return s%mod;
}
int C(int n,int m)
{
    return 1LL*f[n]*1LL*invf[m]%mod*1LL*invf[n-m]%mod;
}
int main()
{
    LL n;scanf("%lld",&n);
    if(n==0||n==1){printf("0");return 0;}
    f[0]=1;
    for(register int i=1;i<=3e7;++i)f[i]=1LL*f[i-1]*i%mod;
    invf[30000000]=ksm(f[30000000],mod-2);
    for(int i=3e7-1;i>=0;--i)invf[i]=1LL*invf[i+1]*(i+1)%mod;
    
    int p=1;//2的i次幂.
    LL jc=f[n-1];
    p=ksm(2,n);
    LL ans=0;
    for(register int i=n;i>=0;--i)
    {
        if(i&1) ans=(1LL*ans-1LL*p*C(n,i)%mod*1LL*jc%mod+mod)%mod;
        else    ans=(1LL*ans+1LL*p*C(n,i)%mod*1LL*jc%mod+mod)%mod;
        jc=jc*(2*n-i)%mod;
        p=1LL*p*invf[2]%mod;
    }
    printf("%lld\n",ans);
}
最后的晚餐

评价是卡常最后10分过不去。。。。

标签:int,LL,容斥,1LL,ans,invf,mod
From: https://www.cnblogs.com/yyys-/p/16656134.html

相关文章

  • 【瞎口胡】Min-Max 容斥
    Min-Max容斥是通过容斥集合的最小值来得到集合最大值的一种方法。结合期望的线性性,我们得以计算几个随机变量最值的期望,它往往不和这些变量期望的最值相等。Min-Max容斥......
  • 【瞎口胡】多步容斥和二项式反演
    多步容斥多步容斥是指,对于\(n\)个集合\(A_1,A_2,\cdots,A_n\),有\[|A_1\cupA_2\cdots\cupA_n|=\sum\limits_{1\leqi\leqn}|A_i|-\sum\limits_{1\leqi<......
  • 【luogu SP7685】FLWRS - Flowers(DP)(容斥)
    FLWRS-Flowers题目链接:luoguSP7685题目大意给你模数m,问你有多少个长度为n的排列满足相邻两个差不为1。思路首先一个简单的想法是容斥。那有\(n\)对相邻的不......
  • 容斥原理
    时间复杂度分析:O(2^n)所有一项集合的个数-两项的集合个数+所有三项的集合个数-四项集合的个数......;C(n,1)+C(n,2)+C(n,3)+......+C(n,n);又因为:C(n,0)+C(n,1)+C(n,2)+C(......
  • 容斥原理
    https://www.acwing.com/problem/content/description/892/给定一个整数\(n\)和\(m\)个不同的质数\(p_1,p_2,...,p_m\)。请你求出1∼\(n\)中能被\(p_1,p_......
  • 【2022杭电多校】第九场 1008 Shortest Path in GCD Graph 【容斥+优化】
    链接https://acm.hdu.edu.cn/showproblem.php?pid=7240题意是有n个点组成的完全图,每个点的权重组成了1-n的排列,点i和点j的距离为\(gcd(i,j)\),给出q组询问,每次询问给出u......