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]的数,使得不存在两行两列同构. 先保证一个,行相同. 再容斥掉列. 枚举至多 ...
随机推荐
- 关于greenlet的一些问题
今天测试关于协程方面的代码发现我安装了greenlet模块缺导入不进.如图: 后来找了半天才发现原来greenlet被整进了gevent包中,如下导入就可以成功: 但这个greenlet没有了swit ...
- spark异常篇-OutOfMemory:GC overhead limit exceeded
执行如下代码时报错 # encoding:utf-8 from pyspark import SparkConf, SparkContext from pyspark.sql import Spark ...
- MACD中短线交易系统
1.MA5.MA10金叉,且股价收盘站稳5日均线 2.MACD金叉 3.MACD红绿柱 a.MACD红柱发散,表示多头力量增强,此时买入或加仓 b.MACD红柱收缩,表示多头力量减弱,此时卖出或减仓 ...
- Web API 实体对象Get请求参数为null
实体对象前加上 [FromUri] 特性
- MySQL去除查询结果重复值
下面先来看看例子: table id name 1 a 2 b 3 c 4 c 5 b 库结构大概这样,这只是一个简单的例子,实际情况会复杂得多. 比如我想用一条语句查询得到name不重复 ...
- springboot 集成 dubbo(一)简介
一.简介 1,springboot 是 一款快速开发的框架,减少了开发人员对配置文件的操作.采用一些注解来取代xml配置文件. 注解包含预先封装的注解和开发人员自定义注解.同时使用Maven.Grad ...
- C#动态生成Word文档并填充数据
C#也能动态生成Word文档并填充数据 http://www.cnblogs.com/qyfan82/archive/2007/09/14/893293.html 引用http://blog.csdn ...
- 【Android】二、HelloWorld
1. 按照该网址写HelloWorld 例子 http://www.runoob.com/android/android-hello-world-example.html 2.点击 make pr ...
- JavaScript中的setTimeout、setInterval和随机函数制作简易抽奖小程序
几乎所有计算机语言有都内置随机函数.当然这种随机,人们习惯称为伪随机数发生器,产生的是一个[0,1)之间的一个小数.再通过简单算术运算生成一个符合需求的整数.JS中通用公式通常为parseInt(Ma ...
- 常见python面试题-手写代码系列
1.如何反向迭代一个序列 #如果是一个list,最快的方法使用reversetempList = [1,2,3,4]tempList.reverse()for x in tempList: pr ...