链接:

https://vjudge.net/problem/UVALive-7040

题意:

Recently, Mr. Big recieved n owers from his fans. He wants to recolor those owers with m colors. The

owers are put in a line. It is not allowed to color any adjacent owers with the same color. Flowers i and

i + 1 are said to be adjacent for every i, 1 ≤ i < n. Mr. Big also wants the total number of different

colors of the n owers being exactly k.

Two ways are considered different if and only if there is at least one ower being colored with different

colors

思路:

先C(n, k),考虑k个有\(k * (k-1)^{n-1}\)。减掉少一个不选的有\((k-1)*(k-2)^{n-1}\)。

其中多减掉了两个不选的要加上。

最后:\(\sum_{i=1}^{k-1}(-1)^i*C_k^{k-i}*(k-i)*(k-i-1)^{n-1}\)

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<math.h>
#include<vector> using namespace std;
typedef long long LL;
const int INF = 1e9; const int MAXN = 1e6+10;
const int MOD = 1e9+7; LL n, m, k;
LL F[MAXN], Inv[MAXN], Finv[MAXN]; LL Pow(LL a, LL b)
{
LL res = 1;
while(b>0)
{
if (b&1)
res = res*a%MOD;
a = a*a%MOD;
b >>= 1;
}
return res;
} LL GetInv(int a)
{
return Pow(a, MOD-2);
} void Init()
{
Inv[1] = 1;
for (int i = 2;i < MAXN;i++)
Inv[i] = (MOD-MOD/i)*1LL*Inv[MOD%i]%MOD;
F[0] = Finv[0] = 1;
for (int i = 1;i < MAXN;i++)
{
F[i] = F[i-1]*1LL*i%MOD;
Finv[i] = Finv[i-1]*1LL*Inv[i]%MOD;
}
} LL Comb(int n, int m)
{
if (m < 0 || m > n)
return 0;
return F[n]*1LL*Finv[m]%MOD*Finv[n-m]%MOD;
} int main()
{
Init();
int t, cnt = 0;
scanf("%d", &t);
while(t--)
{
scanf("%lld%lld%lld", &n, &m, &k);
LL res = 1LL*k*Pow(k-1, n-1)%MOD;
int flag = -1;
for (int i = 1;i <= k-1;i++)
{
res = (res+1LL*flag*Comb(k, k-i)*(k-i)%MOD*Pow(k-i-1, n-1)%MOD)%MOD;
flag = -flag;
}
LL temp = Finv[k];
for (int i = 1;i <= k;i++)
{
temp = 1LL*temp*(m-k+i)%MOD;
}
res = ((1LL*res*temp)%MOD+MOD)%MOD;
printf("Case #%d: %lld\n", ++cnt, res);
} return 0;
}

UVALive-7040-Color(容斥原理)的更多相关文章

  1. UVALive 7040 Color (容斥原理+逆元+组合数+费马小定理+快速幂)

    题目:传送门. 题意:t组数据,每组给定n,m,k.有n个格子,m种颜色,要求把每个格子涂上颜色且正好适用k种颜色且相邻的格子颜色不同,求一共有多少种方案,结果对1e9+7取余. 题解: 首先可以将m ...

  2. 组合数+容斥原理 UVALive 7040 Color(14西安F)

    题目传送门 题意:n盆花涂色,相邻不能涂相同的颜色,从m中颜色选取k种颜色涂,保证正好有k种颜色 分析:从m中颜色选取k种就是C (m, k),然后第一个有k种选择,之后的都有k-1种选择,这样是不超 ...

  3. UVALive 7040 Color

    题目链接:LA-7040 题意为用m种颜色给n个格子染色.问正好使用k种颜色的方案有多少. 首先很容易想到的是\( k * (k-1)^{n-1}\),这个算出来的是使用小于等于k种颜色给n个方格染色 ...

  4. UVALive 4025 Color Squares(BFS)

    题目链接:UVALive 4025 Color Squares 按题意要求放带有颜色的块,求达到w分的最少步数. //yy:哇,看别人存下整个棋盘的状态来做,我什么都不想说了,不知道下午自己写了些什么 ...

  5. ACM数论之旅13---容斥原理(一切都是命运石之门的选择(=゚ω゚)ノ)

    容斥原理我初中就听老师说过了,不知道你们有没有听过(/≧▽≦)/ 百度百科说: 在计数时,必须注意没有重复,没有遗漏. 为了使重叠部分不被重复计算,人们研究出一种新的计数方法. 这种方法的基本思想是: ...

  6. ACM数论之旅17---反演定理 第一回 二项式反演(神说要有光 于是就有了光(´・ω・`))

    终于讲到反演定理了,反演定理这种东西记一下公式就好了,反正我是证明不出来的~(-o ̄▽ ̄)-o 首先,著名的反演公式 我先简单的写一下o( ̄ヘ ̄*o) 比如下面这个公式 f(n) = g(1) + g ...

  7. 2019.02.09 codeforces gym 100548F. Color(容斥原理)

    传送门 题意简述:对n个排成一排的物品涂色,有m种颜色可选. 要求相邻的物品颜色不相同,且总共恰好有K种颜色,问所有可行的方案数.(n,m≤1e9,k≤1e6n,m\le1e9,k\le1e6n,m≤ ...

  8. Gym 100548F Color 2014-2015 ACM-ICPC, Asia Xian Regional Contest (容斥原理+大数取模)

    题意:有N朵花,在M种颜色中选择恰好k种不同的颜色,将这N朵花染色,要求相邻的两朵花颜色不相同. 分析:若限制改为选择不超过k种颜色将N朵花朵染色,则方案数\(f(N,k) = k*(k-1)^{N- ...

  9. Gym 100548F Color (数论容斥原理+组合数)

    题意:给定 m 种颜色,把 n 盆花排成一直线的花涂色.要求相邻花的颜色不相同,且使用的颜色恰好是k种.问一共有几种涂色方法. 析:首先是先从 m 种颜色中选出 k 种颜色,然后下面用的容斥原理,当时 ...

  10. 2014ACM/ICPC亚洲区西安站 F题 color (组合数学,容斥原理)

    题目链接:传送门 题意: n个格子排成一行.我们有m种颜色.能够给这些格子涂色,保证相邻的格子的颜色不同 问,最后恰好使用了k种颜色的方案数. 分析: 看完题目描写叙述之后立刻想到了一个公式 :C(m ...

随机推荐

  1. NumPy使用图解教程

    NumPy是Python中用于数据分析.机器学习.科学计算的重要软件包.它极大地简化了向量和矩阵的操作及处理.python的不少数据处理软件包依赖于NumPy作为其基础架构的核心部分(例如scikit ...

  2. C++ 字符串处理类 ProcessString (包含常用字符串处理函数)

    ProcessString.h //Linux & C++11 #pragma once //包含系统头文件 #include <string> #include <sstr ...

  3. django使用pyecharts(3)----django加入echarts_定时全量更新

    三.Django 前后端分离_定时全量更新图表 1.安装 djangorestframework linux pip3 install djangorestframework windows pip ...

  4. 史上最全最新Java面试题合集一(附答案)

    下面小编整理了本套java面试题全集,分享给大家,希望对大家的java学习和就业面试有所帮助. 1.面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征 ...

  5. dotnet Core学习之旅(二):安装IDE

    [重要:文中所有外链不能确保永久有效] >开发工具 高效的开发必然需要一个优秀的集成开发环境(IDE) 对于.NET Core 2.x可以使用包括但不限于以下IDE来进行开发. Visual S ...

  6. Inline Hook 钩子编写技巧

    Hook 技术通常被称为钩子技术,Hook技术是Windows系统用于替代中断机制的具体实现,钩子的含义就是在程序还没有调用系统函数之前,钩子捕获调用消息并获得控制权,在执行系统调用之前执行自身程序, ...

  7. maven配置阿里镜像

    在conf\settings.xml 在<mirrors>里面添加   <mirror>    <id>nexus-aliyun</id>    < ...

  8. 记一次纯sqlite数据库的小项目开发经历

    sqlite有哪些坑 1.支持的数据量级:根据SQLite的官方提示:http://www.sqlite.org/limits.htmlSQLIte数据库最大支持128TiB(140 terabyte ...

  9. 使用winsw将springboot打包的jar注册系统本地服务

    1.下载winsw 下载地址:https://github.com/kohsuke/winsw/releases 我这里下载的是2.3.0版. 下载sample-minimal.xml和WinSW.N ...

  10. typescript 入门教程三

    类型别名 下面的代码将string类型赋值给一个别名,以后如果出现别名的地方,就好比出现类型string,同理其他类型也一样 type Name=string let gender:Name='男' ...