【题解】CF997C Sky Full of Stars

为什么我的容斥原理入门题是这道题?????????

\(Part-1\)正向考虑

直接考虑不合法合法的方案吧

所以我们设行有\(i\),列有\(j\)有是不同的颜色

所以分这几种情况讨论:

\[i\not=0,j\not=0
\\
i=j=0
\\
ij=0,i+j\not=0
\]

考虑到\(i=j=0​\)对答案没有贡献,所以我们考虑第一式和第三式吧

第三式简单一点,情况就是这样的:

方案数还是比较显然的(我说显然是因为是可以通过我努力思考得到,不是我可以秒杀...)

还要试推算一个容斥系数,最终就是

\[x_1= 2\times\Sigma_{i=1}^n (-1)^i C_n^i \times 3^i\times 3^{n(n-i)}
\]

第二式,情况就是这样的:

这种情况下,确定了一种就确定了所有颜色,枚举\(i,j​\)吧

\[x=\Sigma_{i=1}^n\Sigma_{j=1}^n (-1)^{j+i-1}3C_n^iC_n^j3^{(n-i)(n-j)}
\]

然而我们需要\(O(nlogn)\)所以我们考虑对式子变形一下,把所有(部分)\(i\)提出来

\[x=\Sigma_iC_n^i(-1)^{i-1}\Sigma_{j=1}^n C_n^j3^{(n-i)(n-j)}(-1)^j
\]

把\(j\)的拿出来二项式定理化一下,有些技巧性。

\[\Sigma_{j=1}^n C_n^j3^{(n-i)(n-j)}(-1)^j=-3^{n(n-i)}+\Sigma_{j=0}^n C_n^j3^{(n-i)(n-j)}(-1)^j
\\
=-3^{n(n-i)}+\Sigma_{j=0}^n C_n^j(3^{n-i})^{n-j}(-1)^j
\\
=-3^{n(n-i)}+(3^{n-i}-1)^n
\]

所以

\[x_2= \Sigma C_n^i(-1)^{i-1}(-3^{n(n-i)}+(3^{n-i}-1)^n)
\]

于是答案就是

\[x_1+x_2= 2\times\Sigma_{i=1}^n (-1)^i C_n^i \times 3^i\times 3^{n(n-i)}+\Sigma_{i=1}^n C_n^i(-1)^{i-1}(-3^{n(n-i)}+(3^{n-i}-1)^n)
\]

复杂度\(O(nlogn)\)

呼呼呼 好难QAQ

\(part-2\)反向考虑

直接蒯了,有没有发现形式很相似?数学真奇妙hhh

给\(2​\)号代码吧

#include<bits/stdc++.h>
using namespace std;typedef long long ll; #define RP(t,a,b) for(register int t=(a),edd=(b);t<=edd;++t)
#define DRP(t,a,b) for(register int t=(a),edd=(b);t>=edd;--t)
#define ERP(t,a) for(register int t=head[a];t;t=e[t].nx)
#define int long long
const int mod=998244353;
inline int ksm(int base,int p){register int ret=1;base%=mod;
for(register int t=p;t;t>>=1,base*=base,base%=mod)if(t&1) ret*=base,ret%=mod; return ret%mod;
}
const int maxn=1e6+5;
int fac[maxn];
int inv[maxn];
int ans;
int n;
inline int C(int n,int m){return (fac[n]*inv[m]%mod)*inv[n-m]%mod;} signed main(){
#ifndef ONLINE_JUDGE
freopen("A.in","r",stdin);
freopen("A.out","w",stdout);
#endif
cin>>n;
inv[0]=fac[0]=1;
RP(t,1,n) fac[t]=fac[t-1]*t%mod,inv[t]=inv[t-1]*ksm(t,mod-2LL)%mod;
ans=ksm(3,n*n)%mod;
ans=(ans-ksm(ksm(3,n)-3LL+mod,n)+mod)%mod;
RP(t,1,n){
register int q=C(n,t)*(3LL*ksm(ksm(3,n-t)-1LL,n)%mod+(ksm(3,n*(n-t))*((ksm(3,t)-3LL+mod)%mod))%mod)%mod;
if(t&1) ans=(ans+q)%mod;
else ans=((ans-q)%mod+mod)%mod;
}
ans=(ans%mod+mod)%mod;
cout<<ans<<endl;
}

【题解】CF997C Sky Full of Stars的更多相关文章

  1. CF997C Sky Full of Stars

    CF997C Sky Full of Stars 计数好题 在Ta的博客查看 容斥式子:发现只要每个钦定方案的贡献都考虑到再配上容斥系数就是对的 O(n^2)->O(n) 把麻烦的i=0,j=0 ...

  2. 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) ...

  3. cf997C. Sky Full of Stars(组合数 容斥)

    题意 题目链接 \(n \times n\)的网格,用三种颜色染色,问最后有一行/一列全都为同一种颜色的方案数 Sol Orz fjzzq 最后答案是这个 \[3^{n^2} - (3^n - 3)^ ...

  4. Codeforces 997 C - Sky Full of Stars

    C - Sky Full of Stars 思路: 容斥原理 题解:http://codeforces.com/blog/entry/60357 注意当i > 1 且 j > 1,是同一种 ...

  5. [CF997C]Sky Full of Stars_二项式反演_等比数列_容斥原理

    Sky Full of Stars 题目链接:http://codeforces.com/problemset/problem/997/C 数据范围:略. 题解: 首先考虑拟对象,如果至少有一行完全相 ...

  6. codeforces 997C.Sky Full of Stars

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

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

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

  8. codeforces997C Sky full of stars

    传送门:http://codeforces.com/problemset/problem/997/C [题解] 注意在把$i=0$或$j=0$分开考虑的时候,3上面的指数应该是$n(n-j)+j$ 至 ...

  9. 题解报告:hdu 1541 Stars(经典BIT)

    Problem Description Astronomers often examine star maps where stars are represented by points on a p ...

随机推荐

  1. Java线程池ThreadPoolExecutor类源码分析

    前面我们在java线程池ThreadPoolExecutor类使用详解中对ThreadPoolExector线程池类的使用进行了详细阐述,这篇文章我们对其具体的源码进行一下分析和总结: 首先我们看下T ...

  2. Android自定义控件-Path之贝赛尔曲线和手势轨迹、水波纹效果

    从这篇开始,我将延续androidGraphics系列文章把图片相关的知识给大家讲完,这一篇先稍微进阶一下,给大家把<android Graphics(二):路径及文字>略去的quadTo ...

  3. 在dedecms后台发表文章显示外部连接栏目

    问题描述:客户的网站,有个顶级栏目,下面包含了几个子栏目,这个顶级栏目不想发布什么内容,点击后进入他的某个子栏目就可以了,这时候把这个顶级栏目设置为“外部连接”就可以了 但是设置顶级栏目为外部连接后, ...

  4. 记C++课程设计--学生信息管理系统

                                                                                  C++课程设计--学生信息管理系统     ...

  5. oracle软件安装完毕之后,如何创建数据库

    oracle软件安装完毕之后,如何创建数据库 学习了:https://zhidao.baidu.com/question/1800966379896476147.html 使用了Database Co ...

  6. Linux:和任务执行相关的 【批命令执行 runparts 】命令

    run-parts:执行目录下的 命令或脚本 工具,其他非可执行文件和子目录下的文件不会被执行.目录下的命令,是以基本的词汇(字符)顺序执行的,除非你指定了--reverse 逆序选项!这是个老牌的G ...

  7. 【日常学习】【并查集+map】codevs2639 约会计划题解

    然而我居然让诸城一中悲剧机房的C++可以编译了··· 直接上题目 题目描写叙述 Description cc是个超级帅哥,口才又好.rp极高(这句话似乎降rp),又非常的幽默,所以非常多mm都跟他关系 ...

  8. C语言八进制和十六进制数

    一 赋值 int dex = 100;// 默认十进制 int oct = 0144;// 八进制,以0開始 int hex = 0x64;// 十六进制,以0x開始 二 输出 void show(i ...

  9. 一个JavaScript Function Outliner插件 第三个版本 让你的JavaScript代码也支持折叠

    下面我只以英文的vs2008版本作为实例,演示一下打开vs2008 然后一次点击:Tools->Options (工具->选项)会弹出选项设置框在左边的树目录里展开Environment- ...

  10. HBase笔记

    吴超 1.1 Hbase是Hadoop中的数据库,Hadoop还需要数据库吗?我们学的Hadoop是一个分布式的存储和计算的平台 为什么要在他上面建一个数据库呢,数据库是干什么的呢,数据库是一个管理系 ...