正解:容斥

解题报告:

传送门!

两个方法,分别港下QAQ

先说第一种

首先要推出式子,就∑2*C(i,n)*(-1)i+1*3i*3n*n-n+3*∑∑(-1)i+j+1*C(i,n)*C(j,n)*3(n-i)(n-j)

理解其实不难理解的?就至少有i行j列相同的方案数嘛

具体来说,首先从n行中选i行,n列中选j列的方案数是C(i,n)*C(j,n),然后除了这i行这j列以外还有(n-i)(n-j)个格子,这些格子都可以随便填的,所以是3(n-i)(n-j),然后选出的这i行j列的颜色有3种可能所以最前面有个3,容斥不解释了太显然

然后这显然是个暴力,要n2地跑,过不去

所以考虑怎么优化QAQ

可以发现前面那个复杂度是对的麻油什么问题,是后面那个式子要优化嘛,所以只看后面那个式子就好

可以先把i提到前面,就变成了3*∑(-1)i+1*C(i,n)∑(-1)j*C(j,n)*3(n-i)(n-j)

然后这样子,有点麻烦,可以考虑把i替换成n-i,j替换成n-j,又因为C(n-i,n)=C(i,n),C(n-j,n)=C(j,n)

所以就变成,3*∑(-1)i+1*C(i,n)∑(-1)i+j+1*C(j,n)*3i*j,-1放进去就是3*∑(-1)i+1*C(i,n)∑*C(j,n)*(-3i)*j

然后考虑二项式定理,(a+b)n=∑C(i,n)*ai*bn-i

所以后面∑(-1)j*C(n-j,n)*3(n-i)(n-j)这一堆,就可以变成(1-3i)n

但是这里注意一下,二项式定理中的i是从0开始的,然后上面列出来的式子是从1开始的,所以加多了,所以要减一个[(-3)i]n

综上,就求个∑2*C(i,n)*(-1)i+1*3i+n*n-n+3*∑(-1)i+1*C(i,n)*[(1-3i)n-(-3i)n]

大概就这样儿,over

#include<bits/stdc++.h>
using namespace std;
#define il inline
#define ll long long
#define gc getchar()
#define rl register ll
#define rc register char
#define rb register bool
#define rp(i,x,y) for(rl i=x;i<=y;++i)
#define my(i,x,y) for(rl i=x;i>=y;--i) const ll N=+,mod=;
ll n,c[N],as; il ll read()
{
rc ch=gc;rl x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
il ll power(rl x,rl y){rl as=;while(y){if(y&)as=1ll*(as*x)%mod;x=1ll*(x*x)%mod;y>>=;}return as;}
il void pre(){c[]=;rp(i,,n)c[i]=c[i-]*(n-i+)%mod*power(i,mod-)%mod;} int main()
{
freopen("cf997c.out","w",stdout);
n=read();if(n==)return printf("3\n"),;pre();
rp(i,,n)as=(as+c[i]*(i&?:mod-)%mod*power(,i+n*n-n*i)%mod)%mod;as=(as<<)%mod;
rp(i,,n){rl powwer=power(,n-i);as=(as+*c[i]%mod*(i&?:mod-)%mod*(power(powwer-,n)-power(powwer,n)+mod)%mod)%mod;}
printf("%lld\n",as);
return ;
}

这儿是代码QAQ

然后港下法二

首先看上面那个,是正着推的嘛

所以考虑转化一下,变成总数-每一行每一列都不同的方案数,也就是-每一行每一列至少有2种颜色的方案数

然后这里是有两个限制嘛,一个行一个列

这里就有一个套路,就是说如果有两个限制,就把一个容斥了,另一个就能比较简单地做掉

就首先想列,首先对某一列的总共染色方案是3n,然后不合法的方案有3种,就3n-3,然后有n列,所以总的是(3n-3)n

然后考虑这样子显然还会多减去合法的行相等的情况

然后多减的是什么的,就至少有一行颜色相同且每一列至少有两种颜色的方案

所以就枚举有多少行是只有一种颜色的

一样先放式子再解释

首先C(i,n)不解释,你肯定要从n行中选出i行来嘛

然后这时候会发现其实是有两种情况的

一种是这些颜色相同的行的颜色都相同,那就只有3种颜色可以选择

然后就还会剩下n*(n-i)个格子麻油涂颜色嘛

这时候想,因为我们是在任何一列至少有两种颜色的大背景下考虑的,所以如果我们现在减了一个某一列只有一种颜色的方案就是减多了对趴

所以对这些格子n列分别考虑,对每一列,本来应该有3n-i种选择方案,然后发现如果所有格子都选了和最上面那i行颜色相同的方案就GG了,所以-1

所以这里就是3*(3n-i-1)n

还一种就他们颜色不是全部相同咯

那对这i行就有3i种方案,因为上面我们已经算过所有行都相同颜色的情况了嘛,所以要减三种,所以是3i-3

然后这时候其他格子就可以放心大胆涂辣显然不会有问题,所以3n*(n-i)

综上,这一段的式子就是C(i,n)*(3*(3n-i-1)n+(3i-3)*3n*(n-i))

最后总结一下,整个题目的式子就可以表示成3n*n-(3n-3)n-(-1)i*C(i,n)*(3*(3n-i-1)n+(3i-3)*3n*(n-i))

代码难度并不大,,,所以就懒得打了QAQ放个别人的代码QAQ

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
#define MOD 998244353
#define MAX 1000100
int fpow(int a,int b){int s=;while(b){if(b&)s=1ll*s*a%MOD;a=1ll*a*a%MOD;b>>=;}return s;}
int n;
int jc[MAX],jv[MAX],inv[MAX];
int C(int n,int m){return 1ll*jc[n]*jv[m]%MOD*jv[n-m]%MOD;}
int p[MAX];
int main()
{
freopen("A.in","r",stdin);
freopen("A.out","w",stdout);
cin>>n;if(n==){puts("");return ;}
jc[]=jv[]=inv[]=inv[]=;
for(int i=;i<=n;++i)inv[i]=1ll*inv[MOD%i]*(MOD-MOD/i)%MOD;
for(int i=;i<=n;++i)jc[i]=1ll*jc[i-]*i%MOD;
for(int i=;i<=n;++i)jv[i]=1ll*jv[i-]*inv[i]%MOD;
p[]=fpow(fpow(,n)-,n)%MOD;
for(int j=;j<=n;++j)
{
int s=1ll*(fpow(,j)-)*fpow(fpow(,n-j),n)%MOD;
int QwQ=fpow(fpow(,n-j)-,n);
s=(s+3ll*QwQ)%MOD;
p[j]=1ll*C(n,j)*s%MOD;
}
int ans=p[];
for(int i=,d=MOD-;i<=n;++i,d=MOD-d)ans=(ans+1ll*d*p[i])%MOD;
ans=(fpow(fpow(,n),n)+MOD-ans)%MOD;
printf("%d\n",ans);
return ;
}

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

    [题解]CF997C Sky Full of Stars 为什么我的容斥原理入门题是这道题????????? \(Part-1\)正向考虑 直接考虑不合法合法的方案吧 所以我们设行有\(i\),列有\ ...

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

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

  4. codeforces 997C.Sky Full of Stars

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

  5. Codeforces 997 C - Sky Full of Stars

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

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

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

  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 【FMT】【组合数】

    题目大意: 一个$n*n$的格子,每个格子由你填色,有三种允许填色的方法,问有一行或者一列相同的方案数. 题目分析: 标题的FMT是我吓人用的. 一行或一列的问题不好解决,转成它的反面,没有一行和一列 ...

  9. Codeforces.997C.Sky Full of Stars(容斥 计数)

    题目链接 那场完整的Div2(Div1 ABC)在这儿.. \(Description\) 给定\(n(n\leq 10^6)\),用三种颜色染有\(n\times n\)个格子的矩形,求至少有一行或 ...

随机推荐

  1. EntityFramework 多数据库链接,MySql,SqlServer,Oracel等

    环境:EntityFramework5.0,MySql5.6,MSSQL2012 EF是强大的ORM工具,真正意义上的多数据库链接指的是不同类型的数据库,以及同种类型的数据库多个库,EF很好的支持这一 ...

  2. 在android 上 使用 rxjava 入门篇

    什么是 rxJava? RxJava is a Java VM implementation of Reactive Extensions: a library for composing async ...

  3. 使用Delve进行Golang代码的调试

    问题 安装好vscode编辑项目,出现以下错误: Failed to continue: "Cannot find Delve debugger. Ensure it is in your ...

  4. Java知多少(10)数据类型及变量

    Java 是一种“强类型”的语言,声明变量时必须指明数据类型.变量(variable)占据一定的内存空间.不同类型的变量占据不同的大小. Java中共有8种基本数据类型,包括4 种整型.2 种浮点型. ...

  5. TestNg学习

    参考:https://www.yiibai.com/testng/junit-vs-testng-comparison.html#article-start 1.JUnit缺点: 最初的设计,使用于单 ...

  6. 假期小结 BIO, NIO, AIO

    虽然忙碌,但仍小有收获,开心. 引子 BIO: Blocking IO,阻塞式IO NIO: Non-blocking IO,非阻塞式IO AIO: Async IO,异步IO 问题 什么是阻塞式IO ...

  7. 第三百九十八节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5系统环境设置

    第三百九十八节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5系统环境设置 1.Linux安装配置 注意事项: 虚拟机网卡桥接模式 不要拨VPN 如果,网络怎么都 ...

  8. Java如何从文件中打印与给定模式匹配的所有字符串?

    在Java编程中,如何从文件中打印与给定模式匹配的所有字符串? 以下示例显示了如何使用Util.regex类的Patternname.matcher()方法从文件中打印与给定模式匹配的所有字符串. p ...

  9. Android APK代码混淆与资源混淆详解,你确定不看?

    APK的混淆分为资源混淆与代码混淆.一般大部分都使用两者结合.尤其是目前主流的应用. 其中的优点: 防止被恶意破解逆向分析 减少apk体积,也是瘦身的方法 代码可阅读性降低 其中的缺点: 调试不方便( ...

  10. 12外观模式Facade

    一.什么是外观模式 Facade模式也叫外观模式,是由GoF提出的 23种设计模式中的一种.Facade模式为一组具 有类似功能的类群,比如类库,子系统等等,提供一个一致的简单的界面.这个一致的简单的 ...