1 条题解

  • 0
    @ 2024-12-24 10:06:16

    C++ :

    #include<cstdio>
    #define N 1000000
    #define LL long long
    #define mo 1000000007
    using namespace std;
    int n,k;
    int f[N+5],inv[N+5],fac[N+5];
    main()
    {
        scanf("%d%d",&n,&k);
        fac[0]=1;inv[0]=inv[1]=1;
        for (int i=1;i<=n;++i) fac[i]=fac[i-1]*(LL)i%mo;
        for (int i=2;i<=n;++i) inv[i]=(LL)(mo-mo/i)*inv[mo%i]%mo;
        for (int i=2;i<=n;++i) inv[i]=inv[i]*(LL)inv[i-1]%mo;
        int sum=0,ans=0,t=2;
        for (int i=n;i>=k;--i)
        {
            sum=(LL)fac[n]*inv[k]%mo*inv[n-i]%mo*inv[i-k]%mo*(t-1)%mo;
            t=(LL)t*t%mo;
            if (i-k&1) ans-=sum;
            else ans+=sum;
            if (ans>=mo) ans-=mo;
            if (ans<=-mo) ans+=mo;
        }
        printf("%d\n",(ans+mo)%mo);
    }
    
    • 1

    信息

    ID
    2569
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者