题目链接:https://vjudge.net/problem/Gym-100548F

题目大意:

  n 朵花,按顺序排成一排。从 m 种颜色中选出 k 种颜色,给这 n 朵花染色,要求相邻的花颜色不同。问共有多少种染色方案?

  \((1 \le n,m \le 10^{9}, 1 \le k \le 10^{6}, k \le n,m)\)

知识点:  快速幂算法、组合数、容斥原理、逆元。

解题思路:

  第一步:从 m 种颜色中选出 k 种颜色,方案数:\(C_m^k\);

  第二步:将这 k 种颜色合理地安排到每一朵花上,要求每一种颜色都有用到,而且相邻的花颜色不同。在此我们设 \(G(x)\) 为将 x 种颜色合理地安排到每一朵花上,只要求相邻的花颜色不同,不要求每一种颜色都有用到。则 \( G(x) = x(x-1)^{n-1}\) 。根据容斥原理,我们可得第二步的方案数为:

  \( C_{k}^{k}G(k) - C_{k}^{k-1}G(k-1) + ... +(-1)^{k-2}G(2)\);

  则总的方案数为:

  \(C_m^k\times[C_{k}^{k}G(k) - C_{k}^{k-1}G(k-1) + ... +(-1)^{k-2}G(2)]\)

\(=C_m^k\times[C_{k}^{k}k(k-1)^{n-1} - C_{k}^{k-1}(k-1)(k-2)^{n-1} + ... +(-1)^{k-2}\times2]\).

AC代码:

 #include<cstdio>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + ;
const int maxn = 1e6 + ;
ll inv[maxn], C_k[maxn]; ll exp_mod(ll a, ll b) { //快速幂求a^b%mod
ll ret = ;
while (b) {
if (b & ) ret = (ret*a) % mod;
a = (a*a) % mod;
b >>= ;
}return ret;
}
void init() { //逆元表
inv[] = ;
for (int i = ; i<maxn; i++)
inv[i] = exp_mod((ll)i, mod - ) % mod;
}
void find_Ck(ll k) { //求出C(K, 0,1,...k)
C_k[] = ;
for (ll i = ; i <= k; i++) {
C_k[i] = ((C_k[i - ] * (k - i + ) % mod)*inv[i]) % mod;
}
}
int main() {
// freopen("in.txt","r",stdin);
init();
int T;
ll n, m, k;
scanf("%d", &T);
for (int t = ; t <= T; t++) {
scanf("%lld%lld%lld", &n, &m, &k);
find_Ck(k);
ll ans1 = ;
ll sign = ;
for (ll i = k; i >= ; i--, sign = -sign) //求C(k,k)*k*(k-1)^(n-1) - C(k,k-1)*(k-1)*(k-2)^(n-1) ......
ans1 = (ans1 + ((C_k[i] * i%mod)*exp_mod(i - , n - ) % mod)*sign + mod) % mod;
ll ans2 = ;
for (ll i = ; i <= k; i++) { //C(m,k)
ans2 = (ans2*(m - i + ) % mod)*inv[i] % mod; //注意除法取余运算要用逆元
}
printf("Case #%d: %lld\n", t, ans1*ans2%mod);
}
return ;
}

Gym100548F Color的更多相关文章

  1. 【转】c#、wpf 字符串,color,brush之间的转换

    转自:http://www.cnblogs.com/wj-love/archive/2012/09/14/2685281.html 1,将#3C3C3C 赋给background this.selec ...

  2. Python为8bit深度图像应用color map

    图片中存在着色版的概念,二维矩阵的每个元素的值指定了一种颜色,因此可以显示出彩色. 迁移调色板 下述python代码将VOC数据集中的某个语义分割的图片的调色板直接应用在一个二维矩阵代表的图像上 #l ...

  3. (转)System.Drawing.Color的颜色对照表

    经常使用System.Drawing.Color, 本篇介绍一下颜色与名称及RGB值的对应关系. 1. 颜色与名称的对照表(点击下图放大看): 2. 颜色与RGB值对照表: Color.AliceBl ...

  4. 激光打印机的Color/paper, Xerography介绍

    Color Basic 看见色彩三要素: 光源,物体,视觉 加色色彩模型:R,G,B 多用于显示器 减色色彩模型:C,M,Y,K 多用于打印复印 Paper 东亚地区常用A系列标准用纸,在多功能一体机 ...

  5. 安卓工具箱:color of Style

    <?xml version="1.0" encoding="utf-8"?> <resources> <color name=&q ...

  6. UITableView 一直显示滚动条(ScrollBar Indicators)、滚动条Width(宽度)、滚动条Color(颜色)

    在 IOS 中,对 UIScrollView 的滚动条(ScrollBar Indicators)的自定义设置接口,一直都是很少的.除了能自定义简单的样式(UIScrollViewIndicatorS ...

  7. OpenCASCADE Color Scale

    OpenCASCADE Color Scale eryar@163.com Abstract. The color scale is a specialized label object that d ...

  8. Color Transfer between Images code实现

    上计算机视觉课老师布置的作业实现论文:Color Transfer between Images 基本思路是: 1.给定srcImg和targetImg 2.将RGB空间转为Lab空间 3.根据论文中 ...

  9. ZOJ Problem Set - 1067 Color Me Less

    这道题目很简单,考察的就是结构体数组的应用,直接贴代码了 #include <stdio.h> #include <math.h> typedef struct color { ...

随机推荐

  1. Vs Code在Vue项目中v-for指令提示错误的解决办法

    最近在做一个Vue项目,在其中用到v-for指令时,发现Vs Code报错,如下图(代码是没有任何问题的),在网上找了一下解决办法,希望能帮助到更多人. 解决方法: 打开    文件-首选项-设置 将 ...

  2. commons-logging slf4j log4j 区别

    日志门面 1.Apache通用日志接口(commons-logging.jar) Apache Commons包中的一个,包含了日志功能,必须使用的jar包.这个包本身包含了一个Simple Logg ...

  3. 跟哥一起学python(2)- 运行第一个python程序&环境搭建

    本节的任务,是完成我们的第一个python程序,并搭建好学习python的环境.  建议通过视频来学习本节内容: 查看本节视频 再次看看上一节提到的那张图,看看作为高级编程语言,我们如何编程. 首先, ...

  4. andorid jar/库源码解析之okhttp3

    目录:andorid jar/库源码解析 Okhttp3: 作用: 用于网络编程(http,https)的快速开发. 栗子: // okHttpClient定义成全局静态,或者单例,不然重复new可能 ...

  5. CtsSecurityTestCases#ListeningPortsTest定位tcp端口与pid

    CtsSecurityTestCases#ListeningPortsTest定位tcp端口与pid [问题描述] cts失败项 armeabi-v7a CtsSecurityTestCases an ...

  6. C. Game with Chips(陷阱暴力题)

    \(为什么说这是个陷阱呢??\) \(因为不管你脑洞多大,数学多好,都发现会束手无策\) \(每移动一次不知道往哪个方向,不知道先访问哪个点,同时要记录所有点的坐标,记录每个点是否访问过目标点.... ...

  7. bootstrap4中bootstrap_treeview不显示图标原因以及解决办法

    1.bootstrap4中bootstrap_treeview不显示图标原因 查看过大神的博客,经过自己试验,插件依赖: bootstrap/3.3.7 jquery/3.3.1 <link h ...

  8. 一文教你快速修改ubuntu终端显示的主机名和用户名

    为了让终端的显示更加简洁,清爽,改掉显示的用户名和主机名,改成你喜欢的名字. 创作不易,如果本文帮到了您: 如果本文帮到了您,请帮忙点个赞

  9. HttpClient之Post接口代码范例

    核心包: import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject; 一:接收数据 json数据格式如下 ...

  10. [hdu3507 Print Article]斜率优化dp入门

    题意:需要打印n个正整数,1个数要么单独打印要么和前面一个数一起打印,1次打印1组数的代价为这组数的和的平方加上常数M.求最小代价. 思路:如果令dp[i]为打印前i个数的最小代价,那么有 dp[i] ...