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$ 至 ...
随机推荐
- Linux下添加启动项并简化操作命令-nginx为例
1.添加nginx为启动项 1. vi /etc/rc.d/rc.local 2.将启动命令直接添加到最后即可 *注:通过下图可知 /etc/rc.d/rc.local和 ...
- Enhancement S_ALR_87011964 Asset Balance Report to add custom column
Enhancement S_ALR_87011964 Asset Balance Report to add custom column - SAP Tutorial Include own fiel ...
- Vue2 element-ui组件二封-表单组件-效果展示
vue2已经落后了? 不着急, vue3的也在写的过程中, 只是发出来vue2的一些组件 系列说明: > 编写原因 vue2在很多人眼里已经快过时了, 而我一直想写一些总结, 但是从两年前到现在 ...
- yolov5查看训练日志图片和直方图(包括稀疏训练bn直方图)
0.D:\code\codePy\yolov5-6.1\runs\train\exp25文件夹下有 events.out.tfevents.1675823043.DESKTOP-ACC9FL4.521 ...
- 1 wine-stable + 2 brew install mono
一. 通过wine官网找到安装方法 1 brew tap homebrew/cask-versions2 brew install --cask --no-quarantine (selected ...
- git log 的常用用法
1.最基本的 git log 2.简化版本 git log --oneline 3. 作者筛选 4.时间筛选 git log --since="2022.05.26" --unti ...
- 04jsp(2)
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...
- mysql 取出分组后价格最高的数据
如何用mysql 取出分组后价格最高的数据 ? 看到这个问题,就想到了用 max 函数和 group by 函数,先 group by 然后取得 max, 但是这样真的可以吗? 不可以 ! 为什么? ...
- Vulnhub 靶场 CORROSION: 1
Vulnhub 靶场 CORROSION: 1 前期准备: 靶机地址:https://www.vulnhub.com/entry/corrosion-1,730/ kali攻击机ip:192.168. ...
- C# 笔记--Sendkeys winform窗体控件回车及全选
SendKeys.Send() 向活动应用程序发送击键 SendKeys.SendWait() 向活动应用程序发送给定的键,然后等待消息被处理 这两个方法可以发送组合键,需要注意的是字母按键应为小写. ...