CountTables

TopCoder - 13444

sol:题意和题解都丢在上面了,自己XJByy了一下

先保证行不同,然后对列容斥,dp[i]表示i列的答案
行不同时i列的答案显然是C(c^i,n)*n!,然后在把列之间相同的去掉,就是把i列分为[1~i-1]组,钦定各组之间互不相同,就是第二类斯特林数,减去S[i][ j=[1,i-1] ]*dp[j]即可

/*
问有多少n*m的矩阵,每个数都在[1,C]内,任两行不完全相同,任两列不完全相同。
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read()
{
ll s=; bool f=; char ch=' ';
while(!isdigit(ch)) {f|=(ch=='-'); ch=getchar();}
while(isdigit(ch)) {s=(s<<)+(s<<)+(ch^); ch=getchar();}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<) {putchar('-'); x=-x;}
if(x<) {putchar(x+''); return;}
write(x/); putchar((x%)+'');
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const ll Mod=;
const int N=;
ll n,m,c,dp[N];
//先保证行不同,然后对列容斥,dp[i]表示i列的答案
//行不同时i列的答案显然是C(c^i,n)*n!
ll S[N][N],fac[N],invf[N];
inline ll Ksm(ll x,ll y)
{
ll ans=;
while(y)
{
if(y&) ans=ans*x%Mod; x=x*x%Mod; y>>=;
}
return ans;
}
int main()
{
int i,j;
R(n); R(m); R(c);
fac[]=; for(i=;i<=max(n,m);i++) fac[i]=fac[i-]*i%Mod;
invf[m]=Ksm(fac[m],Mod-); for(i=m-;i>=;i--) invf[i]=invf[i+]*(i+)%Mod;
S[][]=;
for(i=;i<=m;i++) for(j=;j<=i;j++) S[i][j]=(S[i-][j-]+S[i-][j]*j%Mod)%Mod;
ll oo=,now;
for(i=;i<=m;i++)
{
oo=oo*c%Mod; now=;
for(j=;j<=n;j++) now=now*(oo-j+)%Mod;
for(j=;j<i;j++) now=(now-S[i][j]*dp[j]%Mod+Mod)%Mod;
dp[i]=now;
}
Wl(dp[m]);
return ;
}
/*
input 2 2 2
output 10 input 1 1 4000
output 4000 input 4000 4000 4000
output 237003303 input 5 5 1
output 0 input 4000 1 4000
output 593395757 input 2 3 5
output 13740
*/

topcoder13444的更多相关文章

  1. GBT27930-2015电动汽车非车载传导式充电机与电池管理系统之间的通信协议

    本标准规定了电动汽车非车载传导式充电机(简称充电机)与电池管理系统(Battery Management System,简称BMS)之间基于控制器局域网(Control Area NetWork,简称 ...

  2. TCO14 Wildcard CountTables——斯特林反演

    不知道咕了多长时间的题... 讲了3遍,还是自己搞懂了.. 暂时没有找到题目链接 题意: n×m的网格,每个格子填[1,x]的数,使得不存在两行两列同构. 先保证一个,行相同. 再容斥掉列. 枚举至多 ...

随机推荐

  1. 关于greenlet的一些问题

    今天测试关于协程方面的代码发现我安装了greenlet模块缺导入不进.如图: 后来找了半天才发现原来greenlet被整进了gevent包中,如下导入就可以成功: 但这个greenlet没有了swit ...

  2. 【搜索】n的约数

    题目链接:传送门 [题解]: 考察dfs和质因数分解,首先开一个prime数组. 参数解释: 1.当前值的大小.[利用题目的n来控制范围] 2.控制下界,每次都是以某一个质数开始搜索, pos 3.控 ...

  3. WIndows系统BAT文件语法和技巧 原文的地址(http://www.jb51.net/article/5828.htm)

    批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本 ...

  4. 一个复杂关联的sql

    在项目中遇到了一个比较复杂关系的sql,关联关系有些模糊,现在梳理一下 sql如下: SELECT TRAN.TRANS_DATE, TRAN.TRANS_TIME, TRAN.BUSI_TRAC_C ...

  5. Linux:PS查看进程信息,和查看tomcat内存等信息

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/fly910905/article/deta ...

  6. Lab2 Report

    1.安装SeleniumIDE插件 a)安装Firefox 17.0 - 56.*版本的firefox,下载地址为:http://ftp.mozilla.org/pub/firefox/release ...

  7. 使用nodejs创建Marketing Cloud的contact数据

    源代码如下: var config = require("./mcConfig"); var request = require('request'); var url = con ...

  8. DB2 alter 新增/删除/修改列

    SQL语句 增加列.修改列.删除列 1 添加字段 语法 : alter table 表名称 add 字段名称 类型 demo: alter table tableName add columnName ...

  9. Vue介绍:vue导读2

    一.实例中的成员 二.高级指令 三.组件初识 一.实例中的成员 # 计算computed <!DOCTYPE html> <html> <head> <met ...

  10. 菜单项(Menu)的初步认识 以及 多级菜单(SubMenu)的初步认识

    MainActivity.class public class MainActivity extends AppCompatActivity { private TextView textView; ...