topcoder13444
CountTables


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的更多相关文章
- GBT27930-2015电动汽车非车载传导式充电机与电池管理系统之间的通信协议
本标准规定了电动汽车非车载传导式充电机(简称充电机)与电池管理系统(Battery Management System,简称BMS)之间基于控制器局域网(Control Area NetWork,简称 ...
- TCO14 Wildcard CountTables——斯特林反演
不知道咕了多长时间的题... 讲了3遍,还是自己搞懂了.. 暂时没有找到题目链接 题意: n×m的网格,每个格子填[1,x]的数,使得不存在两行两列同构. 先保证一个,行相同. 再容斥掉列. 枚举至多 ...
随机推荐
- USB协议基础知识
ref : https://blog.csdn.net/u010142953/article/details/82627591 USB 基本知识 USB的重要关键概念: 1. 端点:位于USB设备 ...
- 10-MySQlL DBA笔记-基础知识
第四部分 运维篇 首先来了解一下数据库的定义,数据库是高效的.可靠的.易用的.安全的多用户存储引擎,我们可以通过它访问大量的持久化数据.我们管理和维护数据库,本质上也是要确保如上的特性,尽可能地保证数 ...
- MVC部分视图的使用(Html.Partial/RenderPartial、Html.Action/RenderAction、RenderPage)
ASP.NET MVC 里页面往往会有许多重用的地方,可以进行封装重用. 使用部分视图有以下优点: 1. 可以简写代码. 2. 页面代码更加清晰.更好维护. 在视图里有多种方法可以 加载部分视图,包括 ...
- javaIO——BufferedWriter
[环境] jdk1.8 前面学习过 BufferedReader,是缓冲字符输入流.那么今天来学习对应的缓冲字符输出流类:BufferedWriter.跟 BufferedReader 同理,它也是一 ...
- android程序复制数据库
一般项目中我们把db文件放到assert或者raw目录下面,在程序第一次启动的时候复制到私有目录下面 在使用过程中,老是发现复制不成功,私有目录下的db文件总是3072 后来发现应该是使用Conten ...
- DX使用随记--TabControl
1. 关闭TabControl选项卡: Private Sub TabControl_Main_CloseButtonClick(sender As Object, e As EventArgs) H ...
- JAVA 1.6锁状态转换
JVM 学不好 并发就学不好 面试问题 Object 有哪些方法 syn实现过程 wait notify 为什么要设计到Object上而不是接口?虽然可以 但是面向对象的思想 子类 object.wa ...
- List集合复制
方法一: public static void main(String[] args) { // TODO Auto-generated method stub List<String> ...
- 为什么有了uwsgi还要nginx这个“前端”服务器
相信每一个使用nginx+uwsgi+django部署过的人,都感到非常复杂.到底为什么一个项目的发布要经过这么多层级,他们每一层有什么理由存在?这就带大家宏观地看待一下 首先nginx 是对外的服务 ...
- IDEA中使用git报错Permission denied (publickey)
最近在使用idea开发时,使用git拉取远程仓库的代码时,报错Permission denied (publickey),原因是因为ssh的密钥失效,必须得重新设置下ssh的密钥即可. 命令很简单,在 ...