Codeforces Round #589 (Div. 2)-E. Another Filling the Grid-容斥定理


【Problem Description】

在\(n\times n\)的格子中填入\([1,k]\)之间的数字,并且保证每一行至少有一个\(1\),每一列至少有一个\(1\),问有多少种满足条件的填充方案。

【Solution】

令\(R[i]\)表示为第\(i\)行至少有一个\(1\)的方案数,\(C[i]\)表示第\(i\)列至少有一个\(1\)的方案数。则题目要求的就是\(\bigcap_{i=1}^nR[i]\cap C[i]\)。由容斥定理得:

\[\sum_{i=0}^{n} \sum_{j=0}^{n} (-1)^{i+j} \cdot {n\choose j} \cdot {n\choose i} \cdot k^{n^2 - n \cdot (i+j) + i \cdot j} \cdot (k-1)^{n \cdot (i+j) - i \cdot j}
\]

表示从\(n\)行中,选\(i\)行,从\(n\)列中选\(j\)列,选出\(n\cdot(i+j)-i\cdot j\)个格子不能放\(1\),这些格子有\((k-1)^{n\cdot (i+j)-i\cdot j}\)种放置方案,剩余的\(n^2-n\cdot (i+j)+i\cdot j\)有\(k^{n^2-n\cdot (i+j)+i\cdot j}\)种放置方案。


【Code】

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef int Int;
#define int long long
#define maxn 1005
#define INF 0x3f3f3f3f
const int mod=1e9+7;
int bit[maxn][maxn];
int fpow(int a,int b){
int ans=1;a%=mod;
while(b){
if(b&1) (ans*=a)%=mod;
(a*=a)%=mod;
b>>=1;
}
return ans;
}
Int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n,k;cin>>n>>k;
for(int i=0;i<=n;i++) bit[i][0]=1;
for(int i=1;i<=n;i++){ //预处理组合数
for(int j=1;j<=i;j++){
bit[i][j]=(bit[i-1][j]+bit[i-1][j-1])%mod;
}
}
int ans=0;
for(int i=0;i<=n;i++){ //直接套公式即可
for(int j=0;j<=n;j++){
ans+=((i+j)&1?-1:1)*bit[n][i]%mod*bit[n][j]%mod*fpow(k,n*n-n*(i+j)+i*j)%mod*fpow(k-1,n*(i+j)-i*j)%mod;
ans%=mod;
}
}
cout<<(ans+mod)%mod<<endl;
return 0;
}

最新文章

  1. 求两圆相交部分面积(C++)
  2. SharePoint 根据时间筛选
  3. oc string
  4. miniui中常用的状态显示方式
  5. 深入GetMessage和PeekMessage
  6. HDU 1392 Surround the Trees 构造凸包
  7. python 学习资料
  8. Android 最火高速开发框架AndroidAnnotations使用具体解释
  9. 利用cocoapods创建基于git的私有库
  10. 我的第一个python web开发框架(12)——工具函数包说明(三)
  11. DOS下串口通信程序来传送文件的源代码
  12. 前端JS 与 后台C# 之间JSON序列化与反序列化(笔记)
  13. C#解析XML 例子二
  14. java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
  15. java poi导入Excel(个人代码)
  16. PC端、移动端的页面适配及兼容处理
  17. UWP开发细节记录:IStream 和 IRandomAccessStream^ 以及 IMFByteStream 互转
  18. exception keynote
  19. java基础题目日常思考(持续更新)
  20. 从api接口获取数据-okhttp

热门文章

  1. nvm安装、解决nvm command not found问题、卸载
  2. appium 弹窗处理
  3. C#中数组、集合(ArrayList)、泛型集合List&lt;T&gt;、字典(dictionary&lt;TKey,TValue&gt;)全面对比
  4. 【LeetCode】最长回文子串【动态规划或中心扩展】
  5. Apache Kafka工作流程| Kafka Pub-Sub Messaging
  6. C语言单链表简单实现(简单程序复杂化)
  7. (转)nginx与PHP的关系
  8. Java多线程系列——锁的那些事
  9. Spark 系列(一)—— Spark简介
  10. Jupyter交互式工具安装使用