【CF Contest-1228 E】Another Filling the Grid【容斥】
题意:
给定一个 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【容斥】相关推荐
- [杂题训练]CF1228E Another Filling the Grid(容斥),CF936C Lock Puzzle(构造)
文章目录 T1:CF1228E Another Filling the Grid solution code T2:CF936C Lock Puzzle solution code T1:CF1228 ...
- 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 ...
- CodeForces - 1228B Filling the Grid(思维,水题)
题目链接:点击查看 题目大意:给出一个n*m的矩阵,每个格子可以涂成黑色或白色,再给出n个数a[i]以及m个数b[i],a[i]表示第i行前a[i]个格子都是黑色的,第a[i]+1个数是白色的,其余的 ...
- CF contest/389
A. Fox and Number Game 题意:n个数,She can do the following operation as many times as needed: select two ...
- 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); 注 ...
- 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 ...
- 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 + ...
- 【容斥】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 ...
- [总结]2019年9月 OI学习/刷题记录
从现在开始记录一下每天的学习情况.主力LOJ? 2019/9/5 LibreOJ #2543. 「JXOI2018」排序问题 答案显然是\(\frac{(n+m)!}{Cnt_1!Cnt_2!\cdo ...
- SDUT 2021 Spring Individual Contest(for 20) - 1
文章目录 A - Sherlock Bones B - Unusual Team C - Cheap Kangaroo D - Magical Bamboos E - Competitive Seag ...
最新文章
- Channel延续篇
- 微信小程序 canvas 文字自动换行
- 【PC工具】数学公式编辑器MathType v7.4.4.516你懂的版本
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 85
- 有赞下拉菜单html,有赞vant-ui Tabs、List、PullRefresh组件实践
- h264 aac mux flv
- Linux 内核 hlist_head,hlist_node
- android配置so支持armeabi,安卓项目中so库选择(ndk abiFilters设置,armeabi,armeabi-v7a,arm64-v8a)...
- ssas 度量值属性_Analysis Services(SSAS)表格模型–属性和度量
- iptables conntrack有什么用
- 中小企业管理软件(管家婆辉煌版2top+)安装教程
- 版本管理SVN的使用——SmartSVN使用
- Unity3d学习之路-简单打飞碟小游戏
- python 华氏度转换摄氏度
- 新城易居程伟健:民宿集群,正在走向产业标准化的趋势!
- Word 2016双击格式刷无法连用的问题
- 使用Servlet和JSP开发Java应用程序 ----错误处理
- Win10 笔记本显示器颜色太艳,如何将电脑屏幕颜色调淡
- C语言:extern用法
- python中offset_python pandas tseries.offsets.DateOffset用法及代码示例
热门文章
- Bloodshed Dev-C++
- redchat怎么编写shell脚本_Linux如何编写shell脚本?
- 空间数据引擎oracle_Oracle-Spatial空间数据库基础
- 大数据学习资料_学习大数据分析是否一定需要学习机器学习
- 五大列级庄_酒庄拉菲古堡Chateau Lafite Rothschild, 波尔多五大一级庄之首
- 公众号获取用户手机号_微信公众号如何选取种子用户
- c++课程设计(水)
- 【POJ2318】TOYS(点在凸多边形内判定---模版暴力/二分)
- 【算法笔记+POJ3461】Oulipo(字符串hash模版)
- 【上交OJ】1002:二哥种花生(二维前缀和+二维差分---模版题)