codeforces 997C.Sky Full of Stars
题目链接:codeforces 997C.Sky Full of Stars
一道很简单(?)的推式子题
直接求显然不现实,我们考虑容斥
记\(f(i,j)\)为该方阵中至少有\(i\)行和\(j\)列为相同颜色的情况
那么显然有\(ans=\sum_{i=0}^n \sum_{j=0}^n C_n^i C_n^j (-1)^{i+j-1} f(i,j)\ \ (i+j\neq0)\)
其中对于\(f(i,j)\)的取值有两种情况
I.若\(i=0\)或\(j=0\),先假设\(i=0\),那么颜色相同的\(j\)列的颜色可以随意变化,故\(f(i,j)=f(0,j)=3^j*3^{n(n-j)}\)
II.若\(i\neq0\ \&\&\ j\neq0\),那么这\(i\)行和\(j\)列的颜色一定是相同的,故\(f(i,j)=3*3^{(n-i)(n-j)}\)
对于I,我们可以在\(O(nlogn)\)的时间内求出结果
对于II,我们可以通过预处理在\(O(n^2)\)的时间内求出结果,但这显然是不可行的,于是我们考虑变形
根据3的幂次我们令\(i=n-i,j=n-j\)
那么原式=\(\sum_{i=0}^{n-1} \sum_{j=0}^{n-1} C^{n-i}_n C^{n-j}_n (-1)^{2n-i-j-1} 3*3^{ij}\)
=\(3\sum_{i=0}^{n-1} \sum_{j=0}^{n-1} C^{i}_n C^{j}_n (-1)^{i+j+1} 3^{ij}\)
这样做的话仍然没有结束,我们考虑将\(i\)提出来
原式=\(3\sum_{i=0}^{n-1} C_n^i (-1)^{i+1} \sum_{j=0}^{n-1} C_n^j (-1)^j 3^{ij}\)
=\(3\sum_{i=0}^{n-1} C_n^i (-1)^{i+1} \sum_{j=0}^{n-1} C_n^j (-3^i)^j\)
由二项式定理知,原式=\(3\sum_{i=0}^{n-1} C_n^i (-1)^{i+1} [(1+(-3^i))^n-(-3^i)^n]\)
这样的话我们也能在\(O(nlogn)\)的时间内求出这个值
总时间复杂度\(O(nlogn)\)
#include<iostream>
#include<string>
#include<string.h>
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<vector>
#include<queue>
#include<map>
using namespace std;
#define rep(i,a,b) for (i=a;i<=b;i++)
typedef long long ll;
#define maxd 998244353
ll qpow(ll x,ll y)
{
ll ans=1,sum=x;
while (y)
{
int tmp=y%2;y/=2;
if (tmp) ans=(ans*sum)%maxd;
sum=(sum*sum)%maxd;
}
return ans;
}
int n;
ll c[1001000],inv[1001000];
int read()
{
int x=0,f=1;char ch=getchar();
while ((ch<'0') || (ch>'9')) {if (ch=='-') f=-1;ch=getchar();}
while ((ch>='0') && (ch<='9')) {x=x*10+(ch-'0');ch=getchar();}
return x*f;
}
void init()
{
n=read();int i;
c[0]=1;inv[1]=1;
for (i=2;i<=n;i++) inv[i]=((maxd-maxd/i)*inv[maxd%i])%maxd;
for (i=1;i<=n;i++) c[i]=((c[i-1]*(n-i+1))%maxd*inv[i])%maxd;
//for (i=1;i<=n;i++) cout << c[i] << " ";cout << endl;
}
void work()
{
ll ans=0,ans1=0,ans2=0;int i;
for (i=1;i<=n;i++)
{
if (i%2) ans1+=(c[i]*qpow(3,(ll)n*(n-i)+i))%maxd;
else ans1-=(c[i]*qpow(3,(ll)n*(n-i)+i))%maxd;
}
for (i=0;i<n;i++)
{
if (i%2) ans2+=(c[i]*(qpow(1+maxd-qpow(3,i),n)-qpow(maxd-qpow(3,i),n))%maxd)%maxd;
else ans2-=(c[i]*(qpow(1+maxd-qpow(3,i),n)-qpow(maxd-qpow(3,i),n))%maxd)%maxd;
}
ans1=((ans1%maxd)+maxd)%maxd;
ans2=((ans2%maxd)+maxd)%maxd;
ans=(ans1*2+ans2*3)%maxd;
printf("%I64d",ans);
}
int main()
{
init();
work();
return 0;
}
codeforces 997C.Sky Full of Stars的更多相关文章
- [Codeforces 997C]Sky Full of Stars(排列组合+容斥原理)
[Codeforces 997C]Sky Full of Stars(排列组合+容斥原理) 题面 用3种颜色对\(n×n\)的格子染色,问至少有一行或一列只有一种颜色的方案数.\((n≤10^6)\) ...
- Codeforces.997C.Sky Full of Stars(容斥 计数)
题目链接 那场完整的Div2(Div1 ABC)在这儿.. \(Description\) 给定\(n(n\leq 10^6)\),用三种颜色染有\(n\times n\)个格子的矩形,求至少有一行或 ...
- Codeforces 997 C - Sky Full of Stars
C - Sky Full of Stars 思路: 容斥原理 题解:http://codeforces.com/blog/entry/60357 注意当i > 1 且 j > 1,是同一种 ...
- CF997C Sky Full of Stars
CF997C Sky Full of Stars 计数好题 在Ta的博客查看 容斥式子:发现只要每个钦定方案的贡献都考虑到再配上容斥系数就是对的 O(n^2)->O(n) 把麻烦的i=0,j=0 ...
- 【题解】CF997C Sky Full of Stars
[题解]CF997C Sky Full of Stars 为什么我的容斥原理入门题是这道题????????? \(Part-1\)正向考虑 直接考虑不合法合法的方案吧 所以我们设行有\(i\),列有\ ...
- Codeforces 835C-Star sky
题目链接:http://codeforces.com/problemset/problem/835/C 题意:天上有很多星星,每个星星有他自己的坐标和初始亮度,然后每个星星的亮度在一秒内会加一如果大于 ...
- codeforces997C Sky full of stars
传送门:http://codeforces.com/problemset/problem/997/C [题解] 注意在把$i=0$或$j=0$分开考虑的时候,3上面的指数应该是$n(n-j)+j$ 至 ...
- cf997C. Sky Full of Stars(组合数 容斥)
题意 题目链接 \(n \times n\)的网格,用三种颜色染色,问最后有一行/一列全都为同一种颜色的方案数 Sol Orz fjzzq 最后答案是这个 \[3^{n^2} - (3^n - 3)^ ...
- Codeforces997C Sky Full of Stars 【FMT】【组合数】
题目大意: 一个$n*n$的格子,每个格子由你填色,有三种允许填色的方法,问有一行或者一列相同的方案数. 题目分析: 标题的FMT是我吓人用的. 一行或一列的问题不好解决,转成它的反面,没有一行和一列 ...
随机推荐
- Bootstrap 栅格 样式 组件 插件
-----------------------------起先是我们造成习惯,后来是习惯造成我们. day 51 Bootstrap 官方网站: bootcss.com/ <!DOCTYP ...
- H5 id选择器和class选择器
11-id选择器和class选择器 第一段文字 第二段文字 第三段文字 --> 第一段文字 第二段文字 第三段文字 <!DOCTYPE html> <html lang=&qu ...
- session与cookie的区别以及HTML5中WebStorage理解
一.session与cookie的区别 二.HTML5中WebStorage理解 WebStorage的目的是克服由cookie所带来的一些限制,当数据需要被严格控制在客户端时,不需要持续的将数据发回 ...
- 砝码组合(dfs)
砝码组合 题目内容:用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量.如果只有5个砝码,重量分别是1,3,9,27,81.则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两 ...
- iOS数据存储-钥匙串存储
2017.11.20 14:41* 字数 227 阅读 678评论 0喜欢 0 钥匙串介绍 1. 表示设备唯一号的标识,在IOS7中要么被禁止使用,要么重新安装程序后两次获取的标识符不一样. 2. ...
- python札记
进制转换 num = "0011"v = int(num, base=16)print(v)2->16
- threading模块,python下的多线程
一.GIL全局解释器锁 In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple nativ ...
- MySql concat与字符转义
mysql函数之四:concat() mysql 多个字段拼接 - duanxz - 博客园https://www.cnblogs.com/duanxz/p/5098875.html mysql 多个 ...
- Tomcat connecttimeout sessiontimeout
IIS中的会话超时和连接超时之间有什么区别? | Adept Technologies Inc.https://www.adepttech.com/blog/?p=825 IIS中的会话超时和连接超时 ...
- Mysql连接数、线程数、数据包
https://blog.csdn.net/qq_26545305/article/details/79675507