码迷,mamicode.com
首页 > 其他好文 > 详细

UvaLive 7040-Color

时间:2016-05-31 22:35:24      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:

分析:  用容斥来求。
          公式: C(m,k)*(k*(k-1)^(n-1) – C(k,k-1)*(k-1)*(k-2)^(n-1) + C(k,k-2)*(k-2)*(k-3)^(n-1)……. );
          解释: C(m,k):m种颜色中选k种。k*(k-1)^(n-1): 至多有不超过k中颜色且相邻两种颜色不同的填法。

 

/* ***********************************************
Author        :DarkTong
Created Time  :2016/5/31 18:52:26
File Name     :ff.cpp
************************************************ */

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
typedef long long ll;
const ll MOD = 1e9 + 7;
const int maxn = 1000000 + 10;
ll fac[maxn], Inv[maxn], Qui[maxn];

ll qui(ll x, ll n)
{
    if(n==0) return 1;
    if(x==0) return 0;
    ll ans = 1;
    while(n)
    {
        if(n&1) ans=ans*x%MOD;
        x=x*x%MOD;
        n>>=1;
    }
    return ans;
}
ll inv(ll x)
{
    return qui(x, MOD-2);
}
void init()
{
    fac[0]=Inv[0]=1;
    for(int i=1;i<maxn;++i) 
    {
        fac[i]=fac[i-1]*i%MOD;
        Inv[i]=inv(fac[i]);
    }
}
ll Cnm(ll n, ll m)
{
    if(n<maxn) return fac[n]*inv(fac[n-m]*fac[m]%MOD)%MOD;
    ll a1 = 1, a2=1;
    for(ll i=n,j=1;j<=m;++j,--i) 
    {
        a1=a1*i%MOD;
        a2=a2*j%MOD;
    }
    return a1*inv(a2)%MOD;
}
ll cnm(ll n, ll m)
{
//    return fac[n]*(inv(fac[m])*inv(fac[n-m])%MOD)%MOD;
    return fac[n]*(Inv[m]*Inv[n-m]%MOD)%MOD;
}

int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    init();
    int ca=1,tt;
    scanf("%d", &tt);
    while(ca<=tt)
    {
        ll n, m, k;
        scanf("%lld%lld%lld", &n, &m, &k);
        ll sum = k*qui(k-1, n-1)%MOD;
        for(int i=k-1,d=-1;i>=1;--i,d=-d)
        {
            ll s1 = (cnm(k, i)*i)%MOD*qui(i-1, n-1)%MOD;
            sum = ((sum+d*s1)%MOD+MOD)%MOD;
        }
        sum = sum*Cnm(m, k)%MOD;
        printf("Case #%d: %lld\n", ca++, sum);
    }
    
    return 0;
}

UvaLive 7040-Color

标签:

原文地址:http://www.cnblogs.com/DarkTong/p/5547597.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!