题目链接

那场完整的Div2(Div1 ABC)在这儿。。

\(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(容斥 计数)的更多相关文章

  1. codeforces 997C.Sky Full of Stars

    题目链接:codeforces 997C.Sky Full of Stars 一道很简单(?)的推式子题 直接求显然不现实,我们考虑容斥 记\(f(i,j)\)为该方阵中至少有\(i\)行和\(j\) ...

  2. [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理)

    [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理) 题面 用3种颜色对\(n×n\)的格子染色,问至少有一行或一列只有一种颜色的方案数.\((n≤10^6)\) ...

  3. Codeforces 1553I - Stairs(分治 NTT+容斥)

    Codeforces 题面传送门 & 洛谷题面传送门 u1s1 感觉这道题放到 D1+D2 里作为 5250 分的 I 有点偏简单了吧 首先一件非常显然的事情是,如果我们已知了排列对应的阶梯序 ...

  4. codeforces B. Friends and Presents(二分+容斥)

    题意:从1....v这些数中找到c1个数不能被x整除,c2个数不能被y整除! 并且这c1个数和这c2个数没有相同的!给定c1, c2, x, y, 求最小的v的值! 思路: 二分+容斥,二分找到v的值 ...

  5. Codeforces 439E Devu and Birthday Celebration 容斥

    Devu and Birthday Celebration 我们发现不合法的整除因子在 m 的因子里面, 然后枚举m的因子暴力容斥, 或者用莫比乌斯系数容斥. #include<bits/std ...

  6. Codeforces 920G List Of Integers 二分 + 容斥

    题目链接 题意 给定 \(x,p,k\),求大于 \(x\) 的第 \(k\) 个与 \(p\) 互质的数. 思路 参考 蒟蒻JHY. 二分答案 \(y\),再去 \(check\) 在 \([x,y ...

  7. Codeforces 548E(莫反、容斥)

    转化为质数域上的操作,如果用莫反的话,记录因数的cnt. 其实莫反的推式子最后和容斥做法殊途同归了,容斥的系数就是莫比乌斯函数. const int maxn = 2e5 + 5, maxa = 5e ...

  8. Codeforces Round 450 D 隔板法+容斥

    题意: Count the number of distinct sequences a1, a2, ..., an (1 ≤ ai) consisting of positive integers ...

  9. 数学(容斥计数):LNOI 2016 方

    Description 上帝说,不要圆,要方,于是便有了这道题.由于我们应该方,而且最好能够尽量方,所以上帝派我们来找正方形 上帝把我们派到了一个有N行M列的方格图上,图上一共有(N+1)×(M+1) ...

随机推荐

  1. PowerDesigner使用64位JDK连接MYSQL填坑记.md

    你在这座城市,做过最孤独的事是什么? 曾经试过销声匿迹,最终只是无人问及! 系统环境 利用powerdesigner反向生成表结构时报: ** connection test failed** 胖先 ...

  2. Spark记录-Scala类和对象

    本章将介绍如何在Scala编程中使用类和对象.类是对象的蓝图(或叫模板).定义一个类后,可以使用关键字new来创建一个类的对象. 通过对象可以使用定义的类的所有功能. 下面的图通过一个包含成员变量(n ...

  3. dedecms织梦首页判断,添加不同标题

    <title> {dede:field.title/} {dede:field name='typeid' runphp="yes"}(@me==0)? @me=&qu ...

  4. [QuickRoR]Ruby on Rails开发环境安装

    1.Setup Ruby on Rails2.Test Web App3.Create the First Web App 1.Setup Ruby on Rails1) Download rubyi ...

  5. 第7月第26天 iOS httpserver

    1. cocoahttpserver 1)httpserver [httpServer start:&error] 2)HTTPConnection [newConnection start] ...

  6. redhat本地yum源配置

    /dev/sr0是光驱的设备名,/dev/cdrom代表光驱 /dev/sr0 与/dev/cdrom /dev/cdrom 只是一个到sr0的符号链接 mount /dev/sr0   /mnt   ...

  7. keepalived vrrp_script脚本不执行解决办法

    首先打开日志观察: tail -f /var/log/messages 然后新开一个客户端重启keepalived , systemctl restart keepalived.service 看日志 ...

  8. flask基础之请求钩子(十二)

    前言 什么是请求钩子?在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要统一处理,为了让每个视图函数避免编写重复功能的代码,flask提供了统一的接口可以添加这些处理函数,即请求钩子. 请求钩子 ...

  9. 使用Python自己实现简单的数据可视化

    只使用Python的random库,将已有数据生成HTML格式的标签云.思路就是根据同一单词出现的次数多少,生成不同大小不同颜色单词的数据的视图. 比如以下格式的多条数据: 1 Gaming 1 Sk ...

  10. PYTHON-range和xrange区别

    range会根据输入,生成一个list. xrange功能类似,但生成的不是一个list,而是一个迭代器,每次调用是返回一个数字.这样比较节省内存.