Gym100548F Color
题目链接: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的更多相关文章
- 【转】c#、wpf 字符串,color,brush之间的转换
转自:http://www.cnblogs.com/wj-love/archive/2012/09/14/2685281.html 1,将#3C3C3C 赋给background this.selec ...
- Python为8bit深度图像应用color map
图片中存在着色版的概念,二维矩阵的每个元素的值指定了一种颜色,因此可以显示出彩色. 迁移调色板 下述python代码将VOC数据集中的某个语义分割的图片的调色板直接应用在一个二维矩阵代表的图像上 #l ...
- (转)System.Drawing.Color的颜色对照表
经常使用System.Drawing.Color, 本篇介绍一下颜色与名称及RGB值的对应关系. 1. 颜色与名称的对照表(点击下图放大看): 2. 颜色与RGB值对照表: Color.AliceBl ...
- 激光打印机的Color/paper, Xerography介绍
Color Basic 看见色彩三要素: 光源,物体,视觉 加色色彩模型:R,G,B 多用于显示器 减色色彩模型:C,M,Y,K 多用于打印复印 Paper 东亚地区常用A系列标准用纸,在多功能一体机 ...
- 安卓工具箱:color of Style
<?xml version="1.0" encoding="utf-8"?> <resources> <color name=&q ...
- UITableView 一直显示滚动条(ScrollBar Indicators)、滚动条Width(宽度)、滚动条Color(颜色)
在 IOS 中,对 UIScrollView 的滚动条(ScrollBar Indicators)的自定义设置接口,一直都是很少的.除了能自定义简单的样式(UIScrollViewIndicatorS ...
- OpenCASCADE Color Scale
OpenCASCADE Color Scale eryar@163.com Abstract. The color scale is a specialized label object that d ...
- Color Transfer between Images code实现
上计算机视觉课老师布置的作业实现论文:Color Transfer between Images 基本思路是: 1.给定srcImg和targetImg 2.将RGB空间转为Lab空间 3.根据论文中 ...
- ZOJ Problem Set - 1067 Color Me Less
这道题目很简单,考察的就是结构体数组的应用,直接贴代码了 #include <stdio.h> #include <math.h> typedef struct color { ...
随机推荐
- .html文件转换成.txt
@ 思路 @-@ 简要 根据尖括号将文件分隔成字符串,建立一套判断字符串是否为标签的标准,若不为标签则为文本内容,存入结果文件中: @-@ 详述 0. 建立两个哈希表: 哈希表1 unordere ...
- 学数据库还不会Select,SQL Select详解,单表查询完全解析?
查询操作是SQL语言中很重要的操作,我们今天就来详细的学习一下. 一.数据查询的语句格式 SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式> .. ...
- CodeForces - 262C 贪心
Maxim always goes to the supermarket on Sundays. Today the supermarket has a special offer of discou ...
- 洛谷P1771 方程的解
P1771 方程的解 都知道这个题可以用隔板法做 把这个\(g(x)\)想象为.....\(g(x)\)个苹果? 因为解是正整数,所以给这些"苹果"分组的时候每组最少有一个 然后我 ...
- RobotFrameWork 自动化环境搭建(基于 python2.7)
1.自动化工具安装顺序 robot Framework(两个RF框架) WXpython(不要更改安装路径,自动安装在python文件中) 安装依赖库 RF3.0 和 RF1.5.2.1 打开 rid ...
- 06 __init__ 和 __new__的关系和不同
一. 双下new 和 双下init 关系 首先从__new__(cls,a,b,c)的参数说说起,__new__方法的第一个参数是这个类,而其余的参数会在调用成功后全部传递给__init__方法初始化 ...
- 服务器安装JDK
1.卸载OpenJDK, 安装OracleJDK a.一般的LINUX发行版内置OpenJDK, 相当于JDK的开源版本(我们平时使用的JDK特指OracleJDK) b.OpenJDK 不能使用ja ...
- A - Aragorn's Story HDU - 3966 树剖裸题
这个题目是一个比较裸的树剖题,很好写. http://acm.hdu.edu.cn/showproblem.php?pid=3966 #include <cstdio> #include ...
- K - Painful Bases 状压dp
Painful Bases LightOJ - 1021 这个题目一开始看,感觉有点像数位dp,但是因为是最多有16进制,因为限制了每一个数字都不同最多就有16个数. 所以可以用状压dp,看网上题解是 ...
- 《C程序设计语言》 练习2-3
问题描述 < class="title-article"> 练习2-3 编写函数htoi(s),把由16进制数字组成的字符串(包含可选的前缀0X或0x)转换成与之等价的 ...