题目传送门

题意:n盆花涂色,相邻不能涂相同的颜色,从m中颜色选取k种颜色涂,保证正好有k种颜色

分析:从m中颜色选取k种就是C (m, k),然后第一个有k种选择,之后的都有k-1种选择,这样是不超过k种颜色的方案,那么减去少了Ai颜色的方案数,用容斥原理,最后答案是C(m,k) × ( k × (k-1)^(n-1) + ∑((-1)^p × C(k, p) × p × (p-1)^(n-1) ) (2 <= p <= k-1);

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <vector>
#include <set>
#include <map>
#include <queue>
using namespace std; #define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 1e6 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const int EPS = 1e-8;
int inv[N]; void init(int n) {
inv[1] = 1;
for (int i=2; i<=n; ++i) {
inv[i] = (MOD - MOD / i) * 1ll * inv[MOD%i] % MOD; //inv[n]
}
} int pow_mod(int x, int n, int p) {
int ret = 1;
while (n) {
if (n & 1) ret = ret * 1l * x % p;
x = x * 1ll * x % p;
n >>= 1;
}
return ret;
} int f(int n, int k) {
if (!k) return 0;
else return k * 1ll * pow_mod (k-1, n-1, MOD) % MOD;
} int main(void) {
init (1000000);
int T, cas = 0; scanf ("%d", &T);
while (T--) {
int n, m, k; scanf ("%d%d%d", &n, &m, &k);
ll ans = 0; int res = 1;
for (int i=1; i<=k; ++i) {
res = res * 1ll * (k - i + 1) % MOD * inv[i] % MOD;
if (k - i & 1) {
ans -= res * 1ll * f (n, i) % MOD;
if (ans < 0) ans += MOD;
}
else {
ans += res * 1ll * f (n, i) % MOD;
if (ans >= MOD) ans -= MOD;
}
}
for (int i=1; i<=k; ++i) {
ans = ans * 1ll * (m - i + 1) % MOD * inv[i] % MOD;
}
printf ("Case #%d: %lld\n", ++cas, ans);
} return 0;
}

  

最新文章

  1. Powershell 字符串处理案例
  2. MVC之权限管理-网站开发之路
  3. datatables.js 简单使用--多选框和服务器端分页
  4. sql where 1=1和 0=1 的作用
  5. Solr常用查询语法笔记
  6. 配置和使用buffer cache
  7. Kinetic使用注意点--layer
  8. ExtJs4.1实现数据缓存
  9. 几年的Git使用技巧总结
  10. 一步步教你使用rem适配不同屏幕的移动设备
  11. 高版本号chrome安装flashplayer debuger后无法使用的问题
  12. SmartSql 快速使用指南
  13. Linux - Linux 终端命令格式
  14. Tomcat8 启动慢 Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [53,161] milliseconds
  15. vue2.0 --- vuex (一)
  16. python学习笔记五——数据结构
  17. 微信小程序开发(1) 天气预报
  18. PCL Save VTK File With Texture Coordinates 使用PCL库来保存带纹理坐标的VTK文件
  19. RVDS编译器
  20. 面试题20:搜索二叉树可能有两个元素发生了交换,如何恢复BST?

热门文章

  1. 项目Beta冲刺(团队5/7)
  2. HttpClient 认证
  3. HDU 6044 Limited Permutation 读入挂+组合数学
  4. bash shell最基本的语法
  5. O4编译 在 PingCAP 的一些技术挑战
  6. group by where having 联合使用
  7. 浏览器上的Qt Quick
  8. IDEA中Git的应用场景
  9. 20170224 SE11删除数据
  10. mysql优化-------Myisam与innodb引擎,索引文件的区别