zoukankan      html  css  js  c++  java
  • D与C(牛客)


    分析一下就是一个简单的数论组合数
    唯一注意的就是要用逆元,否则要写挂
    容斥:ans=总方案数-两个图毫不相干的方案数
    总方案数=C((n(n-1)/2),a)×C((n(n-1)/2,b);
    毫不相干=C((n(n-1)/2),a)×C((n(n-1)/2-a,b);

    #include<bits/stdc++.h>
    using namespace std;
    #define lowbit(x) x&(-x)
    #define ll long long
    const int mod=1e9+7; 
    ll fastmi(ll a,ll b){
    	ll sum=1;
    	while(b){
    		if(b&1)sum=sum*a%mod;
    		a=a*a%mod;
    		b>>=1;
    	}
    	return sum;
    }
    ll inv(ll a){
    	return fastmi(a,mod-2)%mod;
    }
    int main(){
    	int n,a,b;
    	cin>>n>>a>>b;
    	int m=(n-1)*n/2,cc=m-a;
    	ll fz1=1,fm1=1,fz2=1,fm2=1,fz3=1,fm3=1;
    	for(int i=m;i>=(m-a+1);i--)fz1=(fz1*i)%mod;
    	for(int i=1;i<=a;i++)fm1=(fm1*i)%mod;
    	for(int i=m;i>=(m-b+1);i--)fz2=(fz2*i)%mod;
    	for(int i=1;i<=b;i++)fm2=(fm2*i)%mod;
    	for(int i=cc;i>=(cc-b+1);i--)fz3=(fz3*i)%mod;
    	for(int i=1;i<=b;i++)fm3=(fm3*i)%mod;
    	ll t1=(fz1*inv(fm1))%mod;
    	ll t2=(fz2*inv(fm2))%mod;
    	ll t3=(fz3*inv(fm3))%mod;
    	cout<<t1*(t2-t3+mod)%mod; 
         return 0;
    }
  • 相关阅读:
    循环逗号分割数组!
    只是想好好学习一下!
    html元素水平垂直居中
    闭包知识点--笔记
    20160314
    从零开始做运维-零
    Nginx 和 CodeIgniter
    安装PIL库
    init
    NutUI3 多端实践之路
  • 原文地址:https://www.cnblogs.com/wzxbeliever/p/15675064.html
Copyright © 2011-2022 走看看