Codeforces.997C.Sky Full of Stars(容斥 计数)
\(Description\)
给定\(n(n\leq 10^6)\),用三种颜色染有\(n\times n\)个格子的矩形,求至少有一行或一列格子同色的方案数。
\(Solution\)
求恰好有多少行/列满足同色不好求,但如果某几行/列已经确定同色,这些行/列外任意选择,即至少多少行/列满足,那么很好求。
容斥。设\(f(i,j)\)表示至少有\(i\)行\(j\)列同色的方案数,则\(ans=\sum_{0\leq i\leq n}\sum_{0\leq j\leq n}\left[i+j>0\right]C_n^iC_n^j(-1)^{i+j+1}f(i,j)\)
当\(i>0\&\&j>0\)时,可以发现这\(i\)行\(j\)列都是同色的,即\(f(i,j)=3\times 3^{(n-i)(n-j)}\)
而当\(i=0||j=0\)时,假设\(i=0\),那么这\(j\)列间可任意组合,即\(f(0,j)=3^j\times 3^{n\times(n-j)}\)
后者可以\(O(n\log n)\)计算,而前者至少需要\(O(n^2)\)。
再化式子,令\(i=n-i,j=n-j\),则\(i,j\neq 0\)时,$$\begin{aligned}ans&=3\sum_{i=0}{n-1}\sum_{j=0}{n-1}C_n{n-i}C_n{n-j}(-1){2n-i-j-1}3{ij}\&=3\sum_{i=0}{n-1}\sum_{j=0}{n-1}C_niC_nj(-1){i+j+1}3{ij}\end{aligned}$$
把\(i\)提出来,看能不能直接算\(j\):$$\begin{aligned}ans&=3\sum_{i=0}{n-1}C_ni(-1){i+1}\sum_{j=0}{n-1}C_nj(-1)j(3i)j\&=3\sum_{i=0}{n-1}C_ni(-1){i+1}\sum_{j=0}{n-1}C_nj(-3i)^j\end{aligned}$$
由二项式定理\((a+b)^n=\sum_{k=0}^nC_n^ka^kb^{n-k}\),\(j\)的那一项可以直接化掉:$$ans=3\sum_{i=0}{n-1}C_ni(-1){i+1}\left[(1+(-3i))n-(-3i)^n\right]$$
于是就可以\(O(n\log n)\)计算了。
还有一个社会人的做法:https://www.cnblogs.com/Menhera/p/9277516.html
//1107ms 7700KB
#include <cstdio>
#include <algorithm>
#define mod (998244353)
typedef long long LL;
const int N=1e6+7;
int C[N],inv[N];
inline LL FP(LL x,int k)
{
LL t=1;
for(; k; k>>=1,x=x*x%mod)
if(k&1) t=t*x%mod;
return t;
}
int main()
{
int n; scanf("%d",&n);
LL ans1=0; C[0]=inv[1]=1;
for(int i=1; i<=n; ++i)
{
if(i>1) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
C[i]=1ll*(n-i+1)*C[i-1]%mod*inv[i]%mod;
if(i&1) ans1+=1ll*C[i]*FP(3,(1ll*n*(n-i)+i)%(mod-1))%mod;//a^{\varphi(p)}=1(\mod p)
else ans1-=1ll*C[i]*FP(3,(1ll*n*(n-i)+i)%(mod-1))%mod;
}
ans1=2ll*ans1%mod;
LL ans2=0;
for(int i=0,pw3=1; i<n; ++i)
{
if(i&1) ans2+=1ll*C[i]*(FP(1+mod-pw3,n)-FP(mod-pw3,n))%mod;
else ans2-=1ll*C[i]*(FP(1+mod-pw3,n)-FP(mod-pw3,n))%mod;
pw3=3ll*pw3%mod;
}
printf("%I64d\n",((ans1+3ll*ans2)%mod+mod)%mod);
return 0;
}
Codeforces.997C.Sky Full of Stars(容斥 计数)的更多相关文章
- codeforces 997C.Sky Full of Stars
题目链接:codeforces 997C.Sky Full of Stars 一道很简单(?)的推式子题 直接求显然不现实,我们考虑容斥 记\(f(i,j)\)为该方阵中至少有\(i\)行和\(j\) ...
- [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理)
[Codeforces 997C]Sky Full of Stars(排列组合+容斥原理) 题面 用3种颜色对\(n×n\)的格子染色,问至少有一行或一列只有一种颜色的方案数.\((n≤10^6)\) ...
- Codeforces 1553I - Stairs(分治 NTT+容斥)
Codeforces 题面传送门 & 洛谷题面传送门 u1s1 感觉这道题放到 D1+D2 里作为 5250 分的 I 有点偏简单了吧 首先一件非常显然的事情是,如果我们已知了排列对应的阶梯序 ...
- codeforces B. Friends and Presents(二分+容斥)
题意:从1....v这些数中找到c1个数不能被x整除,c2个数不能被y整除! 并且这c1个数和这c2个数没有相同的!给定c1, c2, x, y, 求最小的v的值! 思路: 二分+容斥,二分找到v的值 ...
- Codeforces 439E Devu and Birthday Celebration 容斥
Devu and Birthday Celebration 我们发现不合法的整除因子在 m 的因子里面, 然后枚举m的因子暴力容斥, 或者用莫比乌斯系数容斥. #include<bits/std ...
- Codeforces 920G List Of Integers 二分 + 容斥
题目链接 题意 给定 \(x,p,k\),求大于 \(x\) 的第 \(k\) 个与 \(p\) 互质的数. 思路 参考 蒟蒻JHY. 二分答案 \(y\),再去 \(check\) 在 \([x,y ...
- Codeforces 548E(莫反、容斥)
转化为质数域上的操作,如果用莫反的话,记录因数的cnt. 其实莫反的推式子最后和容斥做法殊途同归了,容斥的系数就是莫比乌斯函数. const int maxn = 2e5 + 5, maxa = 5e ...
- Codeforces Round 450 D 隔板法+容斥
题意: Count the number of distinct sequences a1, a2, ..., an (1 ≤ ai) consisting of positive integers ...
- 数学(容斥计数):LNOI 2016 方
Description 上帝说,不要圆,要方,于是便有了这道题.由于我们应该方,而且最好能够尽量方,所以上帝派我们来找正方形 上帝把我们派到了一个有N行M列的方格图上,图上一共有(N+1)×(M+1) ...
随机推荐
- Spark记录-Scala模式匹配
Scala模式匹配 模式匹配是Scala函数值和闭包后第二大应用功能.Scala为模式匹配提供了极大的支持,处理消息. 模式匹配包括一系列备选项,每个替代项以关键字大小写为单位.每个替代方案包括一个模 ...
- Lua程序设计(二)面向对象概念介绍
----------------------------------------------------------- Lua面向对象3 local smartMan = { name = " ...
- ASP.NET MVC3-Music Store中英文教程 [下载]
翻译原文档名: MVC Music Store版本: ASP.NET MVC3概述Mvc Music Store 是一个为WEB开发人员一步一步介绍和解释如何使用MVC和Visual Web开发的应用 ...
- Tornado实现多线程、多进程HTTP服务
背景 线上有一个相关百科的服务,返回一个query中提及的百科词条.该服务是用python实现的,以前通过thrift接口访问,现要将其改为通过HTTP访问.之前没有搭建HTTPServer的经验,因 ...
- [BZOJ 2299][HAOI 2011]向量 题解(裴蜀定理)
[BZOJ 2299][HAOI 2011]向量 Description 给你一对数a,b,你可以任意使用(a,b), (a,-b), (-a,b), (-a,-b), (b,a), (b,-a), ...
- 第5月第27天 cocos2d
1. 流程是这样的: 在CCApplication的run函数中,显示设备链调用相应的场景显示函数drawScene来绘制场景,然后调用了CCScheduler的update函数,在这个函数里,对所有 ...
- TC-572-D1L2 (双向搜索+记忆化)
solution: 这一题是比较难实现的双向搜索题:(字符串+双向搜索+hash记忆化) 我们可以先把K的前半部分枚举出来,并将得出的所有结果和题目给的n个数的每一个数的前半部分都比对一遍,得到它和每 ...
- 20165227 2017-2018-2《Java程序设计》课程总结
20165227 2017-2018-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1 简要内容: 记忆深刻的老师 我期望的师生关系 对于Java学习的看法 预备作业2 简要内 ...
- http和socket之长连接和短连接区别【转】
转自:https://blog.csdn.net/mengyafei43/article/details/25195445 TCP/IP TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层 ...
- Android网络框架之Retrofit + RxJava + OkHttp 变化的时代
1.什么是Retrofit框架? 它是Square公司开发的现在非常流行的网络框架,所以我们在导入它的包的时候都可以看到这个公司的名字,目前的版本是2. 特点: 性能好,处理快,使用简单,Retrof ...