题意:

给定一个 n∗nn*nn∗n 的格子,每个格子填写 [1,k][1,k][1,k] 的一个数,保证每行每列至少有一个 111,输出有多少种填写方案。(1≤n≤250,1≤k≤109)(1\leq n\leq 250,1\leq k\leq 10^9)(1≤n≤250,1≤k≤109)


思路:

这个题可以用 dpdpdp 思考,f[i][j]f[i][j]f[i][j] 表示前 iii 行每行至少有一个 111 且只有 jjj 列有 111 的方案数。

大家可以根据这个 dpdpdp 方程继续列方程,我们本篇的重点是容斥方法。

如果用容斥考虑这个问题,那么最大的难点就是此题需要同时保证每行每列至少有一个 111,涉及了行、列两个维度,而常规的容斥问题只有 111 个维度。因此如何多添加进一个维度呢?

通常多加一个维度的方法是先只考虑一个维度,然后再在这一个维度上继续进行容斥。因此我们令 f[i]f[i]f[i] 表示 iii 行每列至少有一个 111 的方案数,不难发现 f[i]=(ki−(k−1)i)nf[i]=(k^i-(k-1)^i)^nf[i]=(ki−(k−1)i)n。

然后我们再在该基础上进行容斥,因此答案 === nnn 行每列至少一个 111 的方案数 −-− 至少 111 行无 111 的方案数 +++ 至少两行无 111 的方案数 +...+...+...,即 ans=f[n]−Cn1∗f[n−1]∗(k−1)n+Cn2∗f[n−2]∗(k−1)2n+...ans=f[n]-C_n^1*f[n-1]*(k-1)^n+C_n^2*f[n-2]*(k-1)^{2n}+...ans=f[n]−Cn1​∗f[n−1]∗(k−1)n+Cn2​∗f[n−2]∗(k−1)2n+...,即
ans=∑i=0n(−1)i∗f[n−i]∗Cni∗(k−1)i∗nans = \sum\limits_{i=0}^n(-1)^i*f[n-i]*C_n^i*(k-1)^{i*n} ans=i=0∑n​(−1)i∗f[n−i]∗Cni​∗(k−1)i∗n


总结:

此题主要套路在于对于两个维度下的组合问题,使用先固定一维,再在另一维上容斥达到升维的目的。

主要难点在于状态的设置,iii 行每列都有 111 的方案数,然后再根据行有无 111 来进行容斥,即先保证列满足条件,然后对行进行容斥。


代码:

#include <bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof a);
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define per(i,a,b) for(int i = a; i >= b; i--)
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
typedef long long ll;
typedef double db;
const int N = 250+10;
const ll mod = 1e9+7;
const db EPS = 1e-9;
using namespace std;void dbg() {cout << "\n";}
template<typename T, typename... A> void dbg(T a, A... x) {cout << a << ' '; dbg(x...);}
#define logs(x...) {cout << #x << " -> "; dbg(x);}ll f[N],C[N][N];
int n,k;void init(){C[1][0] = C[1][1] = 1;for (int i = 2; i < N; i++){C[i][0] = 1;for (int j = 1; j < N; j++)C[i][j] = (C[i - 1][j] + C[i - 1][j - 1])%mod;}
}ll pow_mod(ll a,ll b){ll ans = 1, base = a;while(b){if(b&1) ans = (ans*base)%mod;base = (base*base)%mod;b >>= 1;}return ans;
}int main()
{init();scanf("%d%d",&n,&k);rep(i,0,n) f[i] = pow_mod((pow_mod(k,i)-pow_mod(k-1,i))%mod,n);ll total = 0;rep(i,0,n){if(i%2 == 0) total = (total+f[n-i]*C[n][i]%mod*pow_mod(k-1,i*n)%mod)%mod;else total = (total+mod-f[n-i]*C[n][i]%mod*pow_mod(k-1,i*n)%mod)%mod;}printf("%lld\n",total);return 0;
}

【CF Contest-1228 E】Another Filling the Grid【容斥】相关推荐

  1. [杂题训练]CF1228E Another Filling the Grid(容斥),CF936C Lock Puzzle(构造)

    文章目录 T1:CF1228E Another Filling the Grid solution code T2:CF936C Lock Puzzle solution code T1:CF1228 ...

  2. Comet OJ - Contest #8 E神奇函数(莫比乌斯函数容斥)

    Comet OJ - Contest #8 E神奇函数(莫比乌斯函数容斥) 题目大意 定义d(x)d(x)d(x)的值为x的最小素因子,定义 f(x)={1x=1d(x)f(xd2(x))x>1 ...

  3. CodeForces - 1228B Filling the Grid(思维,水题)

    题目链接:点击查看 题目大意:给出一个n*m的矩阵,每个格子可以涂成黑色或白色,再给出n个数a[i]以及m个数b[i],a[i]表示第i行前a[i]个格子都是黑色的,第a[i]+1个数是白色的,其余的 ...

  4. CF contest/389

    A. Fox and Number Game 题意:n个数,She can do the following operation as many times as needed: select two ...

  5. CF contest/382/B. Number Busters

    题解:    设t 分钟后:     c'=c-t;    a'=a- (x*t-b)/w;     c'<=a';     整理出来 t>= (a*w-cw+b)/(x-w);    注 ...

  6. CF(439E - Devu and Birthday Celebration)莫比乌斯容斥

    题意:将n个糖果插入f-1个挡板分成f分(a1,a2,a3...af). 问有多少种分法能够使得gcd(a1,a2,a3...af)=1; 解法.莫比乌斯容斥,首先按1为单位分,这时候有C(n-1,f ...

  7. HDU 4059 The Boss on Mars (容斥)(2011 Asia Dalian Regional Contest)

    The Boss on Mars 思路 显然我们可以求得∑i=1ni4=6n5+15n4+10n3−n30\sum_{i = 1} ^{n} i ^ 4 = \frac{6n^5 + 15n^4 + ...

  8. 【容斥】2017 ACM Arabella Collegiate Programming Contest

    比赛连接 G. Snake Rana Old Macdonald wants to build a new hen house for his hens. He buys a new rectangu ...

  9. [总结]2019年9月 OI学习/刷题记录

    从现在开始记录一下每天的学习情况.主力LOJ? 2019/9/5 LibreOJ #2543. 「JXOI2018」排序问题 答案显然是\(\frac{(n+m)!}{Cnt_1!Cnt_2!\cdo ...

  10. SDUT 2021 Spring Individual Contest(for 20) - 1

    文章目录 A - Sherlock Bones B - Unusual Team C - Cheap Kangaroo D - Magical Bamboos E - Competitive Seag ...

最新文章

  1. Channel延续篇
  2. 微信小程序 canvas 文字自动换行
  3. 【PC工具】数学公式编辑器MathType v7.4.4.516你懂的版本
  4. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 85
  5. 有赞下拉菜单html,有赞vant-ui Tabs、List、PullRefresh组件实践
  6. h264 aac mux flv
  7. Linux 内核 hlist_head,hlist_node
  8. android配置so支持armeabi,安卓项目中so库选择(ndk abiFilters设置,armeabi,armeabi-v7a,arm64-v8a)...
  9. ssas 度量值属性_Analysis Services(SSAS)表格模型–属性和度量
  10. iptables conntrack有什么用
  11. 中小企业管理软件(管家婆辉煌版2top+)安装教程
  12. 版本管理SVN的使用——SmartSVN使用
  13. Unity3d学习之路-简单打飞碟小游戏
  14. python 华氏度转换摄氏度
  15. 新城易居程伟健:民宿集群,正在走向产业标准化的趋势!
  16. Word 2016双击格式刷无法连用的问题
  17. 使用Servlet和JSP开发Java应用程序 ----错误处理
  18. Win10 笔记本显示器颜色太艳,如何将电脑屏幕颜色调淡
  19. C语言:extern用法
  20. python中offset_python pandas tseries.offsets.DateOffset用法及代码示例

热门文章

  1. Bloodshed Dev-C++
  2. redchat怎么编写shell脚本_Linux如何编写shell脚本?
  3. 空间数据引擎oracle_Oracle-Spatial空间数据库基础
  4. 大数据学习资料_学习大数据分析是否一定需要学习机器学习
  5. 五大列级庄_酒庄拉菲古堡Chateau Lafite Rothschild, 波尔多五大一级庄之首
  6. 公众号获取用户手机号_微信公众号如何选取种子用户
  7. c++课程设计(水)
  8. 【POJ2318】TOYS(点在凸多边形内判定---模版暴力/二分)
  9. 【算法笔记+POJ3461】Oulipo(字符串hash模版)
  10. 【上交OJ】1002:二哥种花生(二维前缀和+二维差分---模版题)