zoj 3688 The Review Plan II(禁位排列+容斥原理+乘法逆元)

题意:复习功课,有n章,每天复习1章,但第i章不能再第i天和第(i+1)%n 天复习,问有多少种复习方式? mod 10^9+7

对于含k个禁排的,这里如果将X按照图上顺序标号,那么问题就转化成在1-2n的圆排列中去k个不相邻的方法数。

zoj 3688 The Review Plan II(禁位排列+容斥原理+乘法逆元)_第1张图片


zoj 3688 The Review Plan II(禁位排列+容斥原理+乘法逆元)_第2张图片


#include
#include
#include
#include
#define mod 1000000007
#define N 200005
typedef long long LL;
LL f[N];
void inint()
{
   f[0]=1;
   for(int i=1;i>=1;
    }
    return r;
}
int main()
{
    int i,j,n,t;
    inint();
    LL res,up,down,ans;
    while(~scanf("%d",&n))
    {
       if(n<3)
       {
          printf("0\n");
          continue;
       }
       res=f[n];
       t=2*n;
       for(i=1;i<=n;i++)
       {
          up=(t*f[t-i-1])%mod;
          down=(f[i]*f[t-2*i])%mod;
          down=pow(down,mod-2);
          ans=(up*down)%mod;
          ans=(ans*f[n-i])%mod;
          if(i&1)
              res=((res-ans)%mod+mod)%mod;
          else
              res=(res+ans)%mod;
       }
       printf("%lld\n",res);
    }
    return 0;
}


你可能感兴趣的:(乘法逆元,组合数学)