题目链接: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. Spring5参考指南:组件扫描

    文章目录 组件扫描 @Component 元注解和组合注解 组件内部定义Bean元数据 为自动检测组件命名 为自动检测的组件提供作用域 生成候选组件的索引 组件扫描 上一篇文章我们讲到了annotat ...

  2. JAVA 之 EL表达式

    一.什么是EL表达式 1.Expression Language表达式语言 2.是一种在JSP页面获取数据的简单方式(只能获取数据,不能设置数据) 语法格式:${expression } 二.EL中的 ...

  3. 【java基础】01 计算机基础知识

    一.计算机基础知识 1. 计算机 1. 什么是计算机? 计算机在生活中的应用举例 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设 ...

  4. mac OS npm 安装/卸载失败 权限问题解决方案

    在终端输入 sudo chown -R $USER /usr/local 输入开机密码

  5. Mina Basics 02-基础

    基础 在第1章中,我们简要介绍了Apache MINA.在本章中,我们将了解客户端/服务器体系结构以及有关基于MINA的服务器和客户端的详细信息. 我们还将基于TCP和UDP公开一些非常简单的服务器和 ...

  6. 被@ResponseBoby注释的方法在拦截器的posthandle方法中设置cookie失效的问题

    文章标题可能有点绕口.先来解释下遇到的问题. 我写了一个拦截器,希望能够实现保存特定方法的请求参数到cookie中. public class SaveParamInterceptor extends ...

  7. Random Number Generator

    rand()函数可以产生[0,RAND_MAX]之间的均匀的伪随机数,它定义在头文件stdlib.h中,函数原型: int rand(void); C标准库的实现是: unsigned ; /*ran ...

  8. python selenium(环境搭建)

    一:自动化了解知识 工具安装 什么样的项目适合做自动化? 自动化测试一般在什么阶段开始实施? 你们公司自动化的脚本谁来维护?如何维护? 自动化用例覆盖率是多少? 自动化的原理 通过 webdriver ...

  9. shell之路 Linux核心命令【第一篇】管道符与重定向

    输出重定向 命令输出重定向的语法为: command > file 或 command >> file 这样,输出到显示器的内容就可以被重定向到文件.果不希望文件内容被覆盖,可以使用 ...

  10. Java面试题:String、StringBuilder、StringBuffer区别

    String:不可变字符序列. StringBuilder:可变字符序列.效率高.线程不安全,适合单线程. StringBuffer:可变字符序列.效率低.线程安全,适合多线程. 效率从高到低:Str ...