题目链接:传送门

题意:

n个格子排成一行。我们有m种颜色。能够给这些格子涂色,保证相邻的格子的颜色不同

问,最后恰好使用了k种颜色的方案数。

分析:

看完题目描写叙述之后立刻想到了一个公式 :C(m,k)*k*(k-1)^(n-1),可是细致分析了一下

这个公式的含义是相邻的格子颜色不同,使用的颜色总数小于等于k的方案数,可是这个

公式能够帮忙我们衍生出来以下的公式。C(k,x)*x*(x-1)^(n-1),这个公式的含义是在这

k种颜色中再选出来x种使得相邻的格子不同色最后的颜色数小于等于x,然后每个集合

都有交们我们能够考虑用容斥来搞一下。

设 S = F[x]=C(k,x)*x*(x-1)^(n-1);

ans = C(m,k) * sigma{ (-1)^(k-i) * C(k,i) * i *(i - 1)^(n-1)} (1 <= i <= k)

代码例如以下:

#include <iostream>
#include <cstring>
#include <cstdio> using namespace std; typedef long long LL; const LL mod = 1e9+7; const int maxn = 1e6+10; LL n,m,k; LL c[maxn],inv[maxn]; LL quick_mod(LL a,LL b){
LL ans=1;
while(b){
if(b&1) ans=ans*a%mod;
b>>=1;
a=a*a%mod;
}
return ans ;
} inline LL get_inverse(LL x){ //(a/b) % c = a*inv[b] %c if(c is a prime number) inv[b] = (b^(c-2))%c;
return quick_mod(x,mod-2);
} void init(){//将[1,1e6+10]的逆元预处理出来
for(LL i=1;i<maxn;i++)
inv[i]=get_inverse(i);
} void get_combine(LL n){//得到组合数
c[0]=1;
for(LL i=1;i<=k;i++){
c[i]=(c[i-1]*(n-i+1)%mod)*inv[i]%mod;
}
} inline LL calc(LL x){// x*C(k,x)*(x-1)^(n-1)
return (c[x]*x%mod)*quick_mod(x-1,n-1)%mod;
} int main(){
init();
int t,cas=1;
scanf("%d",&t);
while(t--){
scanf("%lld%lld%lld",&n,&m,&k);
get_combine(m);
LL ans = c[k],ans1=0,tag=1;
get_combine(k);
for(LL i=k;i>=1;i--){
ans1=(ans1+tag*calc(i)+mod)%mod;
tag=-tag;
}
ans=ans*ans1%mod;
printf("Case #%d: %lld\n", cas++, ans);
}
return 0;
}

2014ACM/ICPC亚洲区西安站 F题 color (组合数学,容斥原理)的更多相关文章

  1. 2014ACM/ICPC亚洲区西安站现场赛 F color(二项式反演)

    题意:小球排成一排,从m种颜色中选取k种颜色给n个球上色,要求相邻的球的颜色不同,求可行的方案数,答案模1e9+7.T组数据,1<= n, m <= 1e9, 1 <= k < ...

  2. 2014ACM/ICPC亚洲区西安站 复旦命题

    http://codeforces.com/gym/100548 A 签到 问一个序列是不是yes,yes的序列满足每个数都是3的倍数. #include<cstdio> int main ...

  3. 2014ACM/ICPC亚洲区鞍山站 清华命题

    A http://acm.hdu.edu.cn/showproblem.php?pid=5070 先跳过. B http://acm.hdu.edu.cn/showproblem.php?pid=50 ...

  4. 2014ACM/ICPC亚洲区牡丹江站 浙大命题

    A  Average Score http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5373 a班有n个人,b班有m个人,bob在a ...

  5. 2016 ACM/ICPC亚洲区大连站 F - Detachment 【维护前缀积、前缀和、二分搜索优化】

    F - Detachment In a highly developed alien society, the habitats are almost infinite dimensional spa ...

  6. HDU 5127.Dogs' Candies-STL(vector)神奇的题,set过不了 (2014ACM/ICPC亚洲区广州站-重现赛(感谢华工和北大))

    周六周末组队训练赛. Dogs' Candies Time Limit: 30000/30000 MS (Java/Others)    Memory Limit: 512000/512000 K ( ...

  7. 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

    摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...

  8. 2016ACM/ICPC亚洲区大连站现场赛题解报告(转)

    http://blog.csdn.net/queuelovestack/article/details/53055418 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原 ...

  9. (HDU 5558) 2015ACM/ICPC亚洲区合肥站---Alice's Classified Message(后缀数组)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5558 Problem Description Alice wants to send a classi ...

随机推荐

  1. Tesseract Ocr引擎

    Tesseract Ocr引擎 1.Tesseract介绍 tesseract 是一个google支持的开源ocr项目,其项目地址:https://github.com/tesseract-ocr/t ...

  2. Re-installation failed due to different application signatures.

    出现此问题是由于apk的签名不同所致(假设不知道签名是什么  请看上一篇Android应用程序签名 debug签名).假设你是使用的自己的签名,那就是你新版本号的apk使用的签名文件与上一版本号(也就 ...

  3. 设计模式之Prototype(c++)

    Prototype模型: 作用: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象----克隆(clone)对象. Prototype模型类图如下: 形象说明:如果客户想配钥匙(Conc ...

  4. 页面导出生成pdf,使用wkhtmltopdf第三方工具

    把页面导出生成pdf,这里用到第三方的工具,使用方法中文文档没有找到,网上也没找到网友详细的神作.没有深入研究,所以也不赘述了,当然最基本的使用大多数也够用了,详细参数的官网也没介绍,大家使用的时候, ...

  5. Java基础:泛型及其擦除性、不可协变性

    转载请注明出处:jiq•钦's technical Blog 1泛型语法: 泛型类: class ClassName<T>{} 泛型方法:public <T> void f(T ...

  6. 适用函数ALSM_EXCEL_TO_INTERNAL_TABLE把excel文件传输到内表中

    FM:ALSM_EXCEL_TO_INTERNAL_TABLE 是上载Excel文件的一个函数,但是这个函数有两个限制. 一是每个CELL只能导入前50个字符,二是如果超过9999行,行号会初始化为从 ...

  7. 移动无边框窗体(设置标志位更流畅,或者发送WM_SYSCOMMAND和SC_MOVE + HTCAPTION消息)

    移动无边框窗体的代码网上很多,其原理都是一样的,但是是有问题的,我这里只是对其修正一下 网上的代码仅仅实现了两个事件 void EditDialog::mousePressEvent(QMouseEv ...

  8. jsp:include怎么设置才能正确显示包含的页面呢

    1.项目的所有jsp都放在WEB-INF文件夹之下,使用的是SpirngMVC进行了过滤,jsp:include只能引入WEB-INF外部的jsp文件,对于改变后缀显示为htm的jsp的WEB-INF ...

  9. 内核空间和用户空间的分界 PAGE_OFFSET

      PAGE_OFFSET 首先看看PAGE_OFFSET的功能   内存映射 |            用户空间                  |   内核空间   | |——————+———— ...

  10. c++ virturn function -- 虚函数

    c++ virturn function -- 虚函数 pure irtual function  -- 纯虚函数   先看例子 #include <iostream> using nam ...