Sky Full of Stars
题目链接:
题目大意:
给定一个 \(n \times n\) 的矩形,在里面填充三种颜色,求使得至少一行或至少一列同色的方案数。
解法
容斥
我们不去考虑反演,直接开始容斥,我们不难将问题进行转化,去计算此时答案的补集,那么最后的答案就是 \(3^{n\times n} -\) 补集。我们在将问题进行转化,我们不如去直接计算第一行同色且且二行同色 \(\cdots\) 且第一列同色且第二列同色 \(\cdots\) 的方案数,我们令 \(F\) 为满足上面条件的方案数,那么最后的答案就是 :
\]
我们考虑如何去计算 \(F\)。我们不难发现对于 \(i,j>0\),\(\left(i=0\right) \lor (j=0)\),\((i=0) \land (j=0)\)是三种不同的情况,那么我们分开计算。
首先对于 \((i=0) \land (j=0)\),此时没有任何限制条件,对应的 \(F(S) = 3^{n\times n}\)。
对于 \((i=0) \lor (j=0)\),此时对于发现行列之间没有交叉点,也就是行列之间没有颜色的约束,故此时的 \(F(S) = 2\times \sum_{i=1}^n (-1)^i \binom{n}{i} 3^{n^2 -ni +i}\)。
对于这个式子,我们考虑如何去掉求和符号就行优化,我们准备直接利用二项式定理去进行优化:
F(S) &= 2\times \sum_{i=1}^n (-1)^i \binom{n}{i} 3^{n^2 -ni +i}\\
&=2\times 3^{n^2} \times \sum_{i=1}^n (-1)^i \binom{n}{i} 3^{-ni+i} \\
&=2\times 3^{n^2} \times \sum_{i=1}^n \binom{n}{i} (-3^{(1-n)})^i \\
&=2\times 3^{n^2} \times [(1-3^{(1-n)})^n -1]
\end{aligned}\]
最后考虑 \(i,j>0\) 的情况我们不难发现此时对应的 \(i\) 行,\(j\) 列的颜色应该相同,所以对应的 \(F(S) = \sum_{i=1}^n \sum_{j=1}^n (-1)^{i+j} \binom{n}{i} \binom{n}{j} 3^{n^2 - n(i+j)-ij + 1}\)
之后和第二种情况一样,大力推式子,二项式定理优化即可。
反演
我们首先明确两个含义:
\(F_{i,j}\) 表示至少 \(i\) 行 \(j\) 列同色的方案数
\(G_{i,j}\) 表示恰好 \(i\) 行,\(j\) 列同色的方案数。
那么我们就知道最后答案为 \(Ans = F_{0,0} - G_{0,0}\) 即全集减去没有一行并且没有一列同色的方案数。
那么根据二维二项式反演可知 :
\]
由此可知:
G_{0,0} &= \sum_{i=0}^{\infty} \sum_{j=0}^{\infty} (-1)^{i+j} \binom{i}{0} \binom{j}{0} F_{i,j} \\&
= \sum_{i=0}^{\infty} \sum_{j=0}^{\infty} (-1)^{i+j} F_{i,j}
\end{aligned}\]
对于 \(F_{i,j}\) 的计算方法上面已经提到过了,这里就不再提了。
最后贴一下代码吧
Code
#include<bits/stdc++.h>
#define int long long
#define ll long long
const int M = 1e6 + 7 , mod = 998244353;
int fac[M] , inv[M];
inline int Pow(int a , int b) {
int ans = 1; for(; b; b >>= 1 , a = a * a % mod) if(b & 1) ans = ans * a % mod;
return ans;
}
inline int C(int n , int m) {return fac[n] * inv[m] % mod * inv[n - m] % mod;}
signed main () {
int n; std::cin >> n;
inv[0] = fac[0] = 1;for(int i = 1; i <= 1e6; ++ i) fac[i] = fac[i - 1] * i % mod , inv[i] = Pow(fac[i] , mod - 2);
int ans = 0;
for(int i = 1; i <= n; ++ i) {
int tmp = C(n , i) * Pow(3 , (mod - 1 - i * n % (mod - 1))) % mod * (Pow(1 - Pow(3 , i - n + mod - 1) + mod , n) - 1) % mod ;
if(i & 1) ((ans -= tmp) += mod) %= mod;
else (ans += tmp) %= mod;
}
ans = -ans * Pow(3 , (n * n + 1) % (mod - 1)) % mod;
((ans -= 2ll * Pow(3,(ll)n * n % (mod - 1)) % mod * (Pow(1 - Pow(3,mod - n) + mod,n) - 1) % mod) += mod) %= mod;
std::cout << (ans + mod) % mod<< '\n';
return 0;
}
最后感谢 slongle 大佬的指导
Sky Full of Stars的更多相关文章
- CF997C Sky Full of Stars
CF997C Sky Full of Stars 计数好题 在Ta的博客查看 容斥式子:发现只要每个钦定方案的贡献都考虑到再配上容斥系数就是对的 O(n^2)->O(n) 把麻烦的i=0,j=0 ...
- codeforces 997C.Sky Full of Stars
题目链接:codeforces 997C.Sky Full of Stars 一道很简单(?)的推式子题 直接求显然不现实,我们考虑容斥 记\(f(i,j)\)为该方阵中至少有\(i\)行和\(j\) ...
- Codeforces 997 C - Sky Full of Stars
C - Sky Full of Stars 思路: 容斥原理 题解:http://codeforces.com/blog/entry/60357 注意当i > 1 且 j > 1,是同一种 ...
- 【题解】CF997C Sky Full of Stars
[题解]CF997C Sky Full of Stars 为什么我的容斥原理入门题是这道题????????? \(Part-1\)正向考虑 直接考虑不合法合法的方案吧 所以我们设行有\(i\),列有\ ...
- [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理)
[Codeforces 997C]Sky Full of Stars(排列组合+容斥原理) 题面 用3种颜色对\(n×n\)的格子染色,问至少有一行或一列只有一种颜色的方案数.\((n≤10^6)\) ...
- cf997C. Sky Full of Stars(组合数 容斥)
题意 题目链接 \(n \times n\)的网格,用三种颜色染色,问最后有一行/一列全都为同一种颜色的方案数 Sol Orz fjzzq 最后答案是这个 \[3^{n^2} - (3^n - 3)^ ...
- Codeforces997C Sky Full of Stars 【FMT】【组合数】
题目大意: 一个$n*n$的格子,每个格子由你填色,有三种允许填色的方法,问有一行或者一列相同的方案数. 题目分析: 标题的FMT是我吓人用的. 一行或一列的问题不好解决,转成它的反面,没有一行和一列 ...
- CF997C Sky Full of Stars 数论
正解:容斥 解题报告: 传送门! 两个方法,分别港下QAQ 先说第一种 首先要推出式子,就∑2*C(i,n)*(-1)i+1*3i*3n*n-n+3*∑∑(-1)i+j+1*C(i,n)*C(j,n) ...
- Codeforces.997C.Sky Full of Stars(容斥 计数)
题目链接 那场完整的Div2(Div1 ABC)在这儿.. \(Description\) 给定\(n(n\leq 10^6)\),用三种颜色染有\(n\times n\)个格子的矩形,求至少有一行或 ...
- codeforces997C Sky full of stars
传送门:http://codeforces.com/problemset/problem/997/C [题解] 注意在把$i=0$或$j=0$分开考虑的时候,3上面的指数应该是$n(n-j)+j$ 至 ...
随机推荐
- elasticsearch 排错总结
控制台乱码 修改elasticsearch-7.6.2\config下的jvm.options文件,在任意行上加上 -Dfile.encoding=GBKIK报错但成功启动,按照网上的说法是jdk权限 ...
- SQL语句大全,你不会写的SQL可能都在这里
1.创建数据库 CREATE DATABASE database-name 2.删除数据库 drop database dbname3.说明:备份sql server 创建 备份数据的 device ...
- Springboot打包部署的步骤
1.配置pom.xml 引入插件 <groupId>com.bostech</groupId> <artifactId>dcs</artifactId> ...
- Java中如何判断两个对象是否相等
参考:https://blog.csdn.net/u013063153/article/details/78808923 下面是自己开发过程中的实现 package com.***.***.entit ...
- git 提交本地仓库到远程
提交本地仓库到远程指定仓库 假如已经在远程github创建了项目 在本地创建了和github同样工程并添加了代码,如eclipse创建出工程并写了代码.要把这些代码提交到github git bash ...
- $\bf{X} \bf{X}^T$和$ \bf{X}^T \bf{X}$的非零特征值和特征向量之间的关系
设\(\lambda_i\)为\(\bf{X} \bf{X}^T\)的特征值,对应的特征向量为\(\mathbf{\alpha}_i\),则 \[\bf{X} \bf{X}^T \mathbf{\al ...
- URL解码和解码
1 String value = "张三"; 2 //对中文进行URL编码 3 value = URLEncoder.encode(value, "UTF-8" ...
- 牛客 二叉树中和为某一值的路径 【时间19ms】【内存9560k】
https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca 构造函数:new ArrayList(al)把al的所有值复制到 ...
- php基础教程(一)
语法: PHP的语法很简单 --直接看代码: <?php /*代码部分*/ ?> 这就是PHP代码的声明方式. 注:<? ?> 等这中写法也可以写,但是不建议这么写. 标记语句 ...
- shell脚本操作mysql通用脚本
作用:可以在写监控脚本时,将结果值保存到mysql数据库 使用方法:sh 脚本 库名称.表名称 字段=值 字段=值 字段=值 1.脚本 [root@localhost tmp]# cat writ_ ...