[Codeforces 997C]Sky Full of Stars(排列组合+容斥原理)
[Codeforces 997C]Sky Full of Stars(排列组合+容斥原理)
题面
用3种颜色对\(n×n\)的格子染色,问至少有一行或一列只有一种颜色的方案数。\((n≤10^6)\)
分析
显然任意染色的方案数为\(3^{n^2}\),我们考虑求出没有一行一列只有一种颜色的方案数,然后相减。
(1)首先考虑仅仅没有全部是一种颜色的列,每一列任意染色有\(3^n\)种方案,去掉每一列只有一种颜色的方案有3种,共\(3^n-3\)种,n列就有\((3^n-3)^n\)种。
(2)再考虑仅仅没有全部是一种颜色的行,考虑枚举只有一种颜色的行数i,其他行任意填。但会有重复计算的情况,比如i=1的时候,有1行颜色相同。但其他行任意填的时候可能会又填出一种颜色的一行,有2行颜色相同,要减掉。所以考虑容斥原理。
$$tot=\sum_{i=1}^n (-1)^i C_n^i f(i)$$,其中\(C_n^i\)表示从n行中选出i行,\((-1)^i\)用来容斥,\(f(i)\)表示有i行颜色相同的方案数
现在我们来推导\(f(i)\),注意我们不能产生只有一种颜色的列,只能产生只有一种颜色相同的行
(2.1)如果这i行颜色相同,我们要从3种颜色种选一种给i行上色。然后对于这i行下方的n小列(长度为n-i),我们任意涂色,但要注意不能涂与上面i行相同的颜色,否则会造成有颜色相同的列,与情况(1)重复。那么每列方案数\((3^{n-i}-1)\),n列方案数\((3^{n-i}-1)^n\),总方案数\(3(3^{n-i}-1)^n\)
(2.2)如果这i行颜色不同,那么i行有\(3^i-3\)种方案,其中3种是i行颜色相同的方案。剩下的\(n(n-i)\)格任意涂色。显然不会产生颜色相同的列,总方案数\(3^{n(n-i)}(3^i-3)\)
因此\(f(i)=3(3^{n-i}-1)^n+3^{n(n-i)}(3^i-3)\)
代入表达式,我们可以得到最终答案
\]
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1000000
#define mod 998244353
using namespace std;
typedef long long ll;
int n;
ll fact[maxn+5],invfact[maxn+5];
inline ll fast_pow(ll x,ll k){
ll ans=1;
while(k){
if(k&1) ans=ans*x%mod;
x=x*x%mod;
k>>=1;
}
return ans;
}
inline ll inv(ll x){
return fast_pow(x,mod-2);
}
inline ll C(int n,int m){
if(n<m) return 0;//小心特殊情况
if(n==m) return 1;
if(m==0) return 1;
return fact[n]*invfact[n-m]%mod*invfact[m]%mod;
}
void pre_work(int n){
fact[0]=1;
for(int i=1;i<=n;i++) fact[i]=fact[i-1]*i%mod;
for(int i=0;i<=n;i++) invfact[i]=inv(fact[i]);
}
int main(){
scanf("%d",&n);
pre_work(n);
ll ans=0;
ans=fast_pow(3,(ll)n*n);
ans=(ans-fast_pow(fast_pow(3,n)-3,n)+mod%mod);
for(int i=1;i<=n;i++){
ll now=fast_pow(-1,i)*C(n,i)%mod*(3*fast_pow(fast_pow(3,n-i)-1,n)%mod+(fast_pow(3,i)-3+mod)*fast_pow(3,(ll)n*(n-i))%mod)%mod;
ans=(ans-now+mod)%mod;
}
printf("%I64d\n",ans);
}
[Codeforces 997C]Sky Full of Stars(排列组合+容斥原理)的更多相关文章
- codeforces 997C.Sky Full of Stars
题目链接:codeforces 997C.Sky Full of Stars 一道很简单(?)的推式子题 直接求显然不现实,我们考虑容斥 记\(f(i,j)\)为该方阵中至少有\(i\)行和\(j\) ...
- [Codeforces 1228E]Another Filling the Grid (排列组合+容斥原理)
[Codeforces 1228E]Another Filling the Grid (排列组合+容斥原理) 题面 一个\(n \times n\)的格子,每个格子里可以填\([1,k]\)内的整数. ...
- Codeforces.997C.Sky Full of Stars(容斥 计数)
题目链接 那场完整的Div2(Div1 ABC)在这儿.. \(Description\) 给定\(n(n\leq 10^6)\),用三种颜色染有\(n\times n\)个格子的矩形,求至少有一行或 ...
- 【CodeForces】889 C. Maximum Element 排列组合+动态规划
[题目]C. Maximum Element [题意]给定n和k,定义一个排列是好的当且仅当存在一个位置i,满足对于所有的j=[1,i-1]&&[i+1,i+k]有a[i]>a[ ...
- codeforces 429 On the Bench dp+排列组合 限制相邻元素,求合法序列数。
限制相邻元素,求合法序列数. /** 题目:On the Bench 链接:http://codeforces.com/problemset/problem/840/C 题意:求相邻的元素相乘不为平方 ...
- Codeforces 1111D(退背包、排列组合)
要点 优质题解 因为只有某type坏人全部分布在同一撇时,才能一次消灭.所以题目安排完毕后一定是type(x)和type(y)占一半,其余占另一半. 实际情况只有52*52种,则预处理答案 枚举某两种 ...
- Codeforces 840C. On the Bench 动态规划 排列组合
原文链接https://www.cnblogs.com/zhouzhendong/p/CF840C.html 题解 首先,我们可以发现,如果把每一个数的平方因子都除掉,那么剩下的数,不相等的数都可以相 ...
- Codeforces 997 C - Sky Full of Stars
C - Sky Full of Stars 思路: 容斥原理 题解:http://codeforces.com/blog/entry/60357 注意当i > 1 且 j > 1,是同一种 ...
- Codeforces Gym 100187D D. Holidays 排列组合
D. Holidays Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/problem/D ...
随机推荐
- 一条sql引发的“血案”
前几天有一个项目要上线,需要对表的一个字段进行扩充,项目经理让我准备脚本,于是我准备了如下的脚本: )); )); )); 结果上线的时候,ord_log1和ord_log2表中有30万数据,在执行的 ...
- [POI2007]POW-The Flood(并查集)
[POI2007]POW-The Flood Description AKD 市处在一个四面环山的谷地里.最近一场大暴雨引发了洪水,AKD 市全被水淹没了.Blue Mary,AKD 市的市长,召集了 ...
- git 日常 常用命令
初始化git git init 第一次拉代码: 方式1:git clone git clone https://git.oschina.net/*****.git (https远程仓库地址) 方式2: ...
- 使用Fabric在tomcat中部署应用的问题总结
关闭tomcat时 A.为什么调用shutdown时,报错连接拒绝 结论——很可能是因为tomcat没启动或没完全启动:而这个时候调用shutdown就会出现此类报错 解决方法:time.sleep ...
- RedHat Linux6.4下安装apache服务
一.换yum 原因:安装apache2.4是需要安装apr . apr-util .pcre.httpd四个包, 在安装pcre包时会报错: configure: error: You need a ...
- Linux负载均衡软件LVS
linux下的开源负载均衡软件LVS的安装.配置和使用.LVS是一个中国人创建和开发的开放源码项目,利用LVS可以构建高可用.高可靠的负载均衡集群,因此,利用Linux+LVS不但可以假设高性能的负载 ...
- php面试专题---MySQL分表
php面试专题---MySQL分表 一.总结 一句话总结: 分库分表要数据达到一定的量级才用,这样才有效率,不然利不一定大于弊,可能会增加一次I/O消耗 1.分库分表的使用量级是多少? 单表行数超过 ...
- P1982小朋友的数字
传送 手疼qwq 翻译一下题面.就是说,给n个数,第i个数(包括第i个)以及之前的数构成的最大子段和是i的特征值,i以前(不包括i)的数中最大的分数j+特征值j是i的分数,求所有人中的最大分数. (好 ...
- P1022计算器の改良
传送 这个题让你通过自己的努力,来写一个可以解一元一次方程的计算题(麻麻再也不用担心我计算错了qwq) 我们先学习一下一元一次方程的解法 step1:移项.把带有未知数的项移到方程的一边,把常数项移到 ...
- Sparse PCA: reproduction of the synthetic example
The paper: Hui Zou, Trevor Hastie, and Robert Tibshirani, Sparse Principal Component Analysis, Journ ...