传送门:

解题思路:

要求一条直线分割矩阵时左右颜色数一样,那么就说明一个问题。
直线左右移动时是不会改变左右矩阵的颜色集合的。
所以说明:2~m-1列的颜色集一定属于第一列与第m列颜色集的交集。
而且第一列与第m列颜色集大小相等。
显然需要预处理n个点m种颜色的方案数,设为$g(i,j)$
这样,只需要确定第一列和最后一列颜色集,假设交集是$i$种颜色,
就可以算出中间的颜色方案数:$i^{n*(m-2)}$
假设两边颜色个数都是$j$($j\ge i$)那么两边颜色的答案($(g(n,j)j!)^2$)
这$i$种颜色共有$C_k^i$种选法,两边各$j$种颜色,且只有$i$种颜色相同的方案就是:
$\Large C_k^iC_{k-i}^{2(j-i)}C_{2(j-i)}^{j-i}$
那么答案就是
$\Large\sum\limits_{i=1}^{n}\sum\limits_{j=i}^{n}C_k^iC_{k-i}^{2(j-i)}C_{2(j-i)}^{j-i}{(g(n,j)j!)^2}{i^{n(m-2)}}$
代码:

 #include<cstdio>
#include<cstring>
#include<algorithm>
typedef long long lnt;
const lnt mod=;
lnt g[][];
lnt fac[];
lnt inv[];
int n,m,k;
lnt ans;
lnt ksm(lnt a,lnt b)
{
lnt ans=;
while(b)
{
if(b&)ans=ans*a%mod;
a=a*a%mod;
b=b/;
}
return ans;
}
lnt C(int x,int y)
{
if(y>x)return ;
return fac[x]*inv[y]%mod*inv[x-y]%mod;
}
lnt squ(lnt x)
{
return x*x%mod;
}
int main()
{
g[][]=;
fac[]=inv[]=fac[]=inv[]=;
for(int i=;i<=;i++)
{
fac[i]=(fac[i-]*i)%mod;
inv[i]=(mod-mod/i)*inv[mod%i]%mod;
}
for(int i=;i<=;i++)inv[i]=inv[i]*inv[i-]%mod;
scanf("%d%d%d",&n,&m,&k);
if(m==)
{
printf("%I64d\n",ksm(k,n));
return ;
}
for(int i=;i<=n;i++)
{
for(int j=;j<=i&&j<=k;j++)
{
g[i][j]=(g[i-][j-]+g[i-][j]*j)%mod;
}
}
for(int i=;i<=n;i++)
{
lnt tmp=ksm(i,n*(m-))*C(k,i)%mod;
for(int j=i;j<=n;j++)
{
ans=(ans+tmp*C(k-i,(j-i)*)%mod*C((j-i)*,j-i)%mod*squ(g[n][j]*fac[j]%mod)%mod)%mod;
}
}
printf("%I64d\n",(ans%mod+mod)%mod);
return ;
}

codeforces111D. Petya and Coloring(组合数学,计数问题)的更多相关文章

  1. cf111D Petya and Coloring 组合数学,二项式反演

    http://codeforces.com/contest/111/problem/D Little Petya loves counting. He wants to count the numbe ...

  2. 2017/10 冲刺NOIP集训记录:暁の水平线に胜利を刻むのです!

    前几次集训都没有记录每天的点滴……感觉缺失了很多反思的机会. 这次就从今天开始吧!不能懈怠,稳步前进! 2017/10/1 今天上午进行了集训的第一次考试…… 但是这次考试似乎是近几次我考得最渣的一次 ...

  3. codeforces 111D

    题目链接 D. Petya and Coloring time limit per test 5 seconds memory limit per test 256 megabytes input s ...

  4. hdu 5738 2016 Multi-University Training Contest 2 Eureka 计数问题(组合数学+STL)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5738 题意:从n(n <= 1000)个点(有重点)中选出m(m > 1)个点(选出的点只 ...

  5. CF149D. Coloring Brackets[区间DP !]

    题意:给括号匹配涂色,红色蓝色或不涂,要求见原题,求方案数 区间DP 用栈先处理匹配 f[i][j][0/1/2][0/1/2]表示i到ji涂色和j涂色的方案数 l和r匹配的话,转移到(l+1,r-1 ...

  6. CodeForces 149D Coloring Brackets

    Coloring Brackets time limit per test: 2 seconds memory limit per test: 256 megabytes input: standar ...

  7. 置换群、Burnside引理与等价类计数问题

    置换群.Burnside引理与等价类计数问题 标签: 置换群 Burnside引理 置换 说说我对置换的理解,其实就是把一个排列变成另外一个排列.简单来说就是一一映射.而置换群就是置换的集合. 比如\ ...

  8. Codeforces Round #106 (Div. 2) D. Coloring Brackets 区间dp

    题目链接: http://codeforces.com/problemset/problem/149/D D. Coloring Brackets time limit per test2 secon ...

  9. 组合数学--Polya 原理及典型应用

    Redfield-Polya (Pólya enumeration theorem,简称PET)定理是组合数学理论中最重要的定理之一.自从 1927 年 Redfield 首次运用 group red ...

随机推荐

  1. Linux shell 内部变量

    1 TMOUT 来自bash的解释: If set to a value greater than zero, TMOUT is treated as the default timeout for ...

  2. BZOJ 1088 水模拟

    BZOJ水一道~ 枚举前两个位置是否放雷,模拟向下推.能够则ans++ #include "stdio.h" #include "string.h" int a ...

  3. 面试题:Student s = new Student();在内存中做了哪些事情?即创建一个对象做了哪些事情

    lStudent s = new Student();在内存中做了哪些事情? •载入Student.class文件进内存(方法区) •在栈内存为s开辟空间 •在堆内存为学生对象开辟空间 •对学生对象的 ...

  4. ASMlib操作系统包安装与配置asm disk磁盘

    1.加入6块硬盘,每块100g.不管是热加还是冷加.不管是加硬盘,用san存储划lun,或者再加上多路径,都是能够这么做的. 在操作系统层,能识别这种lun.以下的sdb就是一个刚划分的300g的lu ...

  5. mDNS原理的简单理解——每个进入局域网的主机,如果开启了mDNS服务的话,都会向局域网内的所有主机组播一个消息,我是谁,和我的IP地址是多少。然后其他也有该服务的主机就会响应,也会告诉你,它是谁,它的IP地址是多少

    MDNS协议介绍 mDNS multicast DNS , 使用5353端口,组播地址 224.0.0.251.在一个没有常规DNS服务器的小型网络内,可以使用mDNS来实现类似DNS的编程接口.包格 ...

  6. Failed to start metasploit.service: Unit metasploit.service not found的解释

    不多说,直接上干货! root@kali:~# service metasploit start Failed to start metasploit.service: Unit metasploit ...

  7. iOS ReactiveCocoa 最全常用API整理(可做为手册查询)

    本文适合有一定RAC基础的童鞋做不时的查询,所以本文不做详细解释. 一.常见类 1.RACSiganl 信号类. RACEmptySignal :空信号,用来实现 RACSignal 的 +empty ...

  8. 4、Go for循环

    package main import "fmt" func main(){ //for 循环是go语言唯一的循环结构,分为三种类型 //第一种 类似while i:=1 for ...

  9. mybatis-generator-core快速生成实体类和Mapper

    日常使用Mybatis少不了和实体类和 Mapper 打交道.除了我们手写来实现,还可以使用 mybatis-generator-core 来快速生成 实体类和 Mapper. 步骤如下: 1.下载 ...

  10. iOS开发—— Couldn't add the Keychain Item

    报错:*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Couldn ...