n个格子排成一行,有m种颜色,问用恰好k种颜色进行染色,使得相邻格子颜色不同的方案数。

integers n, m, k (1 ≤n, m ≤ 10^9, 1 ≤ k ≤ 10^6, k ≤ n, m).

m种颜色取k种 C(m, k) 这个可以放最后乘 那么问题就变成只用k种颜色
第一个格子有k种涂法 第二个有k-1种 第三个也是k-1种

一共就是k*(k-1)^(n-1) 这种算法仅保证了相邻颜色不同,总颜色数不超过k种,并没有保证恰好出现k种颜色 也就是多算了恰好出现2种 恰好出现3种.... 恰好出现k-1种

我们本来是要求 恰好用k的种 现在又要求恰好出现k-1种
那么就是 (k-1)*(k-2)^(n-1) 然后这个也是多算了一些情况的
以此类推 然后就可以用容斥原理

比如有5种颜色,选4种 就是

C(5, 4) * (C(4, 4)*4*3^4 - C(4, 3)*3*2^4 + C(4, 2)*2*1^4)

Sample Input

2
3 2 2// n m k
3 2 1
Sample Output

Case #1: 2
Case #2: 0

 # include <iostream>
# include <cstdio>
# include <cstring>
# include <algorithm>
# include <string>
# include <cmath>
# include <queue>
# include <list>
# define LL long long
using namespace std ; const int MOD = ; int n , m , k ;
LL CM ;
LL CK[] ;
LL INV[] ; LL pow_mod(LL p, LL k)
{
LL ans = ;
while(k) {
if (k & ) ans = ans * p % MOD;
p = (LL)p*p % MOD;
k >>= ;
}
return ans;
} LL Ext_gcd(LL a,LL b,LL &x,LL &y){ //扩展欧几里德
if(a==&&b==) return -;
if(b==) { x=, y=; return a; }
LL d= Ext_gcd(b,a%b,y,x);
y-= a/b*x;
return d;
}
//ax = 1(mod m)
LL Inv(LL a,LL m){ //求逆元 a对m的逆元
LL d,x,y,t = m;
d= Ext_gcd(a,t,x,y);
if(d==) return (x%t+t)%t;
return -;
} LL Cm(LL n, LL m, LL p) //求组合数
{
LL a=, b=;
if(m>n) return ;
while(m)
{
a=(a*n)%p;
b=(b*m)%p;
m--;
n--;
}
return (LL)a*Inv(b,p)%p; //(a/b)%p 等价于 a*(b,p)的逆元
} int Lucas(LL n, LL m, LL p) //把n分段递归求解相乘
{
if(m==) return ;
return (LL)Cm(n%p,m%p,p)*(LL)Lucas(n/p,m/p,p)%p;
} void init()
{
INV[] = ;
int i ;
for (i = ; i < ; i++)
INV[i] = Inv(i,MOD) ;
} int main()
{
//freopen("in.txt","r",stdin) ;
int T ;
scanf("%d" , &T) ;
int Case = ;
init() ;
while(T--)
{
Case++ ;
scanf("%d%d%d" , &n , &m , &k) ;
if (n == )
{
printf("Case #%d: %d\n", Case , m);
continue ;
}
int i ;
CM = Cm(m,k,MOD) ;
CK[] = ;
for (i = ; i <= k ; i++)
CK[i] = (CK[i-] * (k-i+)%MOD * INV[i])%MOD ;
LL ans = , t = ;
for (i = k ; i >= ; i--)
{
ans = (ans + t*CK[i]*i%MOD*pow_mod(i-,n-)%MOD+MOD)%MOD ;
t *= - ;
}
printf("Case #%d: %I64d\n",Case,ans*CM%MOD); }
return ;
}

CF GYM100548 (相邻格子颜色不同的方案数 2014西安现场赛F题 容斥原理)的更多相关文章

  1. P1108 低价购买——最长下降子序列+方案数

    P1108 低价购买 最长下降子序列不用多讲:关键是方案数: 在求出f[i]时,我们可以比较前面的f[j]; 如果f[i]==f[j]&&a[i]==a[j] 要将t[j]=0,去重: ...

  2. CF 149D Coloring Brackets(区间DP,好题,给配对的括号上色,求上色方案数,限制条件多,dp四维)

    1.http://codeforces.com/problemset/problem/149/D 2.题目大意 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色, ...

  3. poj 3734 方块涂色 求红色 绿色方块都为偶数的方案数 (矩阵快速幂)

    N个方块排成一列 用红,蓝,绿,黄4种颜色去涂色,求红色方块 和绿色方块个数同时为偶数的 方案数 对10007取余 Sample Input 212Sample Output 2//(蓝,黄)6//( ...

  4. CodeForces - 1093D:Beautiful Graph(二分图判定+方案数)

    题意:给定无向图,让你给点加权(1,2,3),使得每条边是两端点点权和维奇数. 思路:一个连通块是个二分图,判定二分图可以dfs,并查集,2-sat染色. 这里用的并查集(还可以带权并查集优化一下,或 ...

  5. codeforces 429 On the Bench dp+排列组合 限制相邻元素,求合法序列数。

    限制相邻元素,求合法序列数. /** 题目:On the Bench 链接:http://codeforces.com/problemset/problem/840/C 题意:求相邻的元素相乘不为平方 ...

  6. poj3254 Corn Fields 利用状态压缩求方案数;

    Corn Fields 2015-11-25 13:42:33 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10658   ...

  7. 【CodeChef】KNGHTMOV(方案数DP)

    题意: 考虑一张无限大的方格棋盘.我们有一个“骑士”,它必须从(0,0)格开始,按照如下规则,移动至(X,Y)格:每一步,它只能从(u,v)格移动至(u+Ax,v+Ay)或者(u+Bx,v+By).注 ...

  8. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  9. Codeforces 461B. Appleman and Tree[树形DP 方案数]

    B. Appleman and Tree time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

随机推荐

  1. bzoj 3224

    3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 16656  Solved: 7255[Submit][St ...

  2. navicat链接mysql

    navicat链接mysql

  3. Hadoop基础原理

    Hadoop基础原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 业内有这么一句话说:云计算可能改变了整个传统IT产业的基础架构,而大数据处理,尤其像Hadoop组件这样的技术出 ...

  4. VS项目属性的一些配置项的总结(important)

    以下内容为“原创”+“转载” 首先,解决方案和项目文件夹包含关系(c++项目): VS解决方案和各个项目文件夹以及解决方案和各个项目对应的配置文件包含关系,假设新建一个项目ssyy,解决方案起名fan ...

  5. CF&&CC百套计划2 CodeChef December Challenge 2017 Chef And Easy Xor Queries

    https://www.codechef.com/DEC17/problems/CHEFEXQ 题意: 位置i的数改为k 询问区间[1,i]内有多少个前缀的异或和为k 分块 sum[i][j] 表示第 ...

  6. 洛谷P1102 A-B数对

    洛谷P1102 A-B数对 https://www.luogu.org/problem/show?pid=1102 题目描述 出题是一件痛苦的事情! 题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A ...

  7. HDU 1564 简单博弈 水

    n*n棋盘,初始左上角有一个石头,每次放只能在相邻的四个位置之一,不能操作者输. 如果以初始石头编号为1作为后手,那么对于每次先手胜的情况其最后一步的四周的编号必定是奇数,且此时编号为偶数,而对于一个 ...

  8. matplotlib基础整理

    matplotlib主要从下面几个方面进行整理: 折线图绘制:https://douzujun.github.io/page/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98% ...

  9. NGINX配置详解及应用

    目录 NGINX    1 1.1    目录结构    1 1.2    基础配置    1 1.3    location    5 1.4    虚拟主机    5 1.5    状态模块    ...

  10. Java并发编程原理与实战二十九:Exchanger

    一.简介 前面三篇博客分别介绍了CyclicBarrier.CountDownLatch.Semaphore,现在介绍并发工具类中的最后一个Exchange.Exchange是最简单的也是最复杂的,简 ...