UvaLive 7040-Color

Posted DarkTong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UvaLive 7040-Color相关的知识,希望对你有一定的参考价值。

分析:  用容斥来求。
          公式: 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的主要内容,如果未能解决你的问题,请参考以下文章

UVAlive-7040 color(组合数学,二项式反演)

UVALive 3971 Assemble(模拟 + 二分)

UVALive 4256Salesmen

UVALive 4726 Average ——(斜率优化DP)

UVALive 4670 Dominating Patterns

UVALive - 7638