[CF997C]Sky Full of Stars_二项式反演_等比数列_容斥原理
Sky Full of Stars
题目链接:http://codeforces.com/problemset/problem/997/C
数据范围:略。
题解:
首先考虑拟对象,如果至少有一行完全相等即可。
这个的答案就需要多步容斥:$\sum\limits_{i = 1} ^ n (-1)^{i + 1}\cdot 3 ^ i\cdot 3 ^ {n \cdot (n - i)}$。
那么至少有一列的答案跟这个一样。
把他俩加一起就是答案么?我们需要减去什么?
显然,需要减掉至少有一行且至少有一列的。
这个怎么弄?
是这样的,如果我们钦定了$i$行$j$列都必须相等之后,$x$行$y$列相等这种情况会被算$C_{x} ^ {i}\times C_{y} ^ {j}$次。
假设,$F_{(i,j)}$表示$i$行$j$列都相等的答案。
假设$A_{(i,j)}$表示$F_{(i,j)}$的容斥系数,发现当$A_{(i,j)} = (-1)^{i + j + 1}$时满足题意。
故此,至少有一列切至少有一行的答案是:
$\sum\limits_{i = 1} ^ n\sum\limits_{j = 1} ^ n (-1) ^ {i + j + 1} C_{n} ^ {i}C_{n}^{j} \cdot 3\cdot 3^{(n - i)\times (n - j)}$。
这个怎么看都是$O(n^2)$的对不对....
我们考虑把他转化转化:
$=\sum\limits_{i = 1} ^ n\sum\limits_{j = 1} ^ n (-1) ^ {i + j + 1} C_{n} ^ {i}C_{n}^{j} \cdot 3^{(n - i)\times (n - j) + 1}$
$=\sum\limits_{i = 1} ^ n\sum\limits_{j = 1} ^ n (-1) ^ {i + j + 1} C_{n} ^ {i}C_{n}^{j} \cdot 3^{n^2 - in - jn +ij + 1}$
$=\sum\limits_{i = 1} ^ n\sum\limits_{j = 1} ^ n (-1) ^ {i + j + 1} C_{n} ^ {i}C_{n}^{j} \cdot 3^{n^2}\cdot 3^{-in}\cdot 3^{-jn}\cdot 3^{ij}$
$=-3^{n^2}\cdot \sum\limits_{i = 1} ^ n (-1) ^ i\cdot C_{n} ^ {i}\cdot 3^{-in} \sum\limits_{j = 1} ^ n (-1) ^ j C_{n}^{j} \cdot 3^{-jn}\cdot 3^{ij}$
$=-3^{n^2}\cdot \sum\limits_{i = 1} ^ n (-1) ^ i\cdot C_{n} ^ {i}\cdot 3^{-in} \sum\limits_{j = 1} ^ n (-1) ^ j C_{n}^{j} \cdot (3^{-n})^j\cdot (3^i)^j$
$=-3^{n^2}\cdot \sum\limits_{i = 1} ^ n (-1) ^ i\cdot C_{n} ^ {i}\cdot 3^{-in} \sum\limits_{j = 1} ^ n C_{n}^{j} \cdot (-3^{i - n})^j$
发现,第二个$\sum$后面的式子类似于二项式反演,$(-3^{i - n})$相当于$(a-b)^n$中的$b$。
故此式子可以被化简成:
$=-3^{n^2}\cdot \sum\limits_{i = 1} ^ n (-1) ^ i\cdot C_{n} ^ {i}\cdot 3^{-in} \cdot (1 - (-3^{i - n}))^n$。
这个就能$O(n)$求了。
代码:
#include <bits/stdc++.h> #define setIO(s) freopen(s".in", "r", stdin), freopen(s".out", "w", stdout) #define N 1000010 using namespace std; typedef long long ll; const int mod = 998244353 ; int fac[N], inv[N]; int qpow(int x, int y) {
int ans = 1;
while (y) {
if (y & 1) {
ans = (ll)ans * x % mod;
}
y >>= 1;
x = (ll)x * x % mod;
}
return ans;
} inline int C(int x, int y) {
return (ll)fac[x] * inv[y] % mod * inv[x - y] % mod;
} int main() {
// setIO("c");
int n;
cin >> n ;
fac[0] = inv[0] = 1;
for (int i = 1; i <= n; i ++ ) {
fac[i] = (ll)fac[i - 1] * i % mod;
inv[i] = qpow(fac[i], mod - 2);
} int ans = 0;
for (int i = 1; i <= n; i ++ ) {
ans = (ans + (ll)qpow(3, ((ll)n * (n - i) % (mod - 1) + i) % (mod - 1))
* qpow(mod - 1, i + 1) % mod
* C(n, i) % mod) % mod;
}
ans = ans * 2 % mod; int mdl = 0;
for (int i = 0; i < n; i ++ ) {
int t = (mod - qpow(3, i)) % mod;
mdl = (mdl + (ll)C(n, i)
* qpow(mod - 1, i + 1) % mod
* ( ( (ll) qpow(t + 1, n) + mod - qpow(t, n) ) % mod) % mod) % mod;
}
ans = (ans + (ll)mdl * 3) % mod;
cout << ans << endl ;
fclose(stdin), fclose(stdout);
return 0;
}
[CF997C]Sky Full of Stars_二项式反演_等比数列_容斥原理的更多相关文章
- GYM 101933K(二项式反演、排列组合)
方法一 设\(f_i\)为最多使用\(i\)种颜色的涂色方案,\(g_i\)为恰好只使用\(i\)种颜色的涂色方案.可知此题答案为\(g_k\). 根据排列组合的知识不难得到\(f_k = \sum_ ...
- [bzoj4665]小w的喜糖_二项式反演
小w的喜糖 题目链接:https://lydsy.com/JudgeOnline/problem.php?id=4665 数据范围:略. 题解: 二项式反演裸题. $f_{i,j}$表示,前$i$种钦 ...
- [模板] 容斥原理: 二项式反演 / Stirling 反演 / min-max 容斥 / 子集反演 / 莫比乌斯反演
//待更qwq 反演原理 二项式反演 若 \[g_i=\sum_{j=1}^i {\binom ij} f_j\] , 则有 \[ f_i=\sum_{j=1}^i (-1)^{i-j} {i \ch ...
- cf111D Petya and Coloring 组合数学,二项式反演
http://codeforces.com/contest/111/problem/D Little Petya loves counting. He wants to count the numbe ...
- CF997C Sky Full of Stars
CF997C Sky Full of Stars 计数好题 在Ta的博客查看 容斥式子:发现只要每个钦定方案的贡献都考虑到再配上容斥系数就是对的 O(n^2)->O(n) 把麻烦的i=0,j=0 ...
- P4859 已经没有什么好害怕的了(dp+二项式反演)
P4859 已经没有什么好害怕的了 啥是二项式反演(转) 如果你看不太懂二项式反演(比如我) 那么只需要记住:对于某两个$g(i),f(i)$ ---------------------------- ...
- 【LOJ#6374】网格(二项式反演,容斥)
[LOJ#6374]网格(二项式反演,容斥) 题面 LOJ 要从\((0,0)\)走到\((T_x,T_y)\),每次走的都是一个向量\((x,y)\),要求\(0\le x\le M_x,0\le ...
- 2018.11.07 hdu1465不容易系列之一(二项式反演)
传送门 其实标签只是搞笑的. 没那么难. 二项式反演只是杀鸡用牛刀而已. 这道题也只是让你n≤20n\le20n≤20的错排数而已. 还记得那个O(n)O(n)O(n)的递推式吗? 没错那个方法比我今 ...
- 洛谷4859 BZOJ3622 已经没什么好害怕的了(DP,二项式反演)
题目链接: 洛谷 BZOJ 题目大意:有两个长为 $n$ 的序列 $a,b$,问有多少种重排 $b$ 的方式,使得满足 $a_i>b_i$ 的 $i$ 的个数比满足 $a_i<b_i$ 的 ...
随机推荐
- [HNOI2008] 越狱 快速幂
[HNOI2008] 越狱 快速幂 水.考虑不发生越狱的情况:即宗教相同的都不相邻,一号任意放\(m\)种宗教的人,此后\(n-1\)个房间都放与上一个宗教不同的人,有\(m-1\)种,所以共有\(m ...
- (转)实验文档1:跟我一步步安装部署kubernetes集群
实验环境 基础架构 主机名 角色 ip HDSS7-11.host.com k8s代理节点1 10.4.7.11 HDSS7-12.host.com k8s代理节点2 10.4.7.12 HDSS7- ...
- postgresql 一些操作
postgresql 对sql语句敏感的. 所以尽量标准化输入 #############查看版本信息 ############ 1.查看客户端版本 psql --version 1 2.查看服务器端 ...
- HDU 1257 最少拦截系统 ——(LIS)
想了一下感觉和lis有关,交了果然AC.想不到很好的证明方法,试做证明如下:lis的每一个点都是一个不上升系统中的一员,设其为a[i],那么a[i-1]<a[i]肯定是成立的(lis的性质),夹 ...
- JAVA基础知识|Socket
一.什么是Socket? Socket本身并不是协议,是一套完成TCP.UDP协议的调用接口(API),通过socket我们才能使用TCP/IP协议(JAVA基础知识|TCP/IP协议).Socket ...
- 【Python】使用Python处理RAW格式图片,并根据实际情况完成分组打包发送
背景 出游之后,朋友交换的照片格式大多是RAW格式,一些人想要JPG格式,但是百度云盘非会员的下载速度惨不忍睹,所以我想着通过微信群直接传(这个在事后也被证实不能完全解决问题,微信限制了每天传递文件的 ...
- APP相关测试工具
名称 描述 性能检测工具 用于对插件CPU.内存.闪退进行测试 接口测试工具 用于对插件本版本内的接口进行上线前的结构检测 自动比对差异 monkey测试工具 对主软件进行稳定性测试 ...
- 跨域方案JSONP与CORS的各自优缺点以及应用场景
转自 https://www.zhihu.com/question/41992168/answer/217903179 首先明确:JSONP与CORS的使用目的相同,并且都需要服务端和客户端同时支持, ...
- 导出和导入eclipse中通过help安装的插件的地址
这种方式和在线安装一样,唯一方便的就是不用再去翻找软件下载地址 导出已安装的插件: 打开Window ——>Preferences ——>Install/Update——>Avail ...
- Centos - php5.4升级到7.1 yum安装
查看当前 PHP 版本 1 php -v 查看当前 PHP 相关的安装包,删除之 1 2 3 4 5 yum list installed | grep php yum remove php ...