首页 > 其他分享 >【CFgym102870J】Junction of Orz Pandas(思维,容斥)

【CFgym102870J】Junction of Orz Pandas(思维,容斥)

时间:2022-10-28 20:44:56浏览次数:52  
标签:ch Orz int 容斥 CFgym102870J ans inline mod

暴力做法就不会做……

考虑容斥,用所有数 \(\leq a_i\) 的方案减去所有数 \(<a_i\) 的方案得到最大值为 \(a_i\) 的方案,\(b_i\) 同理容斥,时间复杂度 \(O(2^{n+m}nm)\)。

直接在容斥上优化是没有前途的,考虑换一种思路。

发现我们交换两行或交换两列并不影响答案,那我们不妨将 \(a_i\) 和 \(b_i\) 从小到大排序。

我们先取出 \(v\) 为所有 \(a_i\) 和 \(b_i\) 的最小值,假设有 \(x\) 个 \(a_i\) 等于 \(v\),\(y\) 个 \(b_i\) 等于 \(v\):

在这里插入图片描述

显然红色部分都需要满足 \(\leq v\),那么无论红色部分怎么取值都对第 \(x+1\sim n\) 列、第 \(y+1\sim m\) 行是否满足限制没有任何影响,于是我们可以对红色部分单独处理,对绿色部分继续递归处理。那么我们就能将原来的矩形分成很多个 L 字形,每个 L 字形分别统计方案数,最后再乘起来即可。

接下来是单独对每个 L 字形统计方案数,这个时候就能用一开始讲的容斥做法了:

\[\sum_{i=0}^{x}\sum_{j=0}^y\binom{x}{i}\binom{y}{j}(-1)^{i+j}v^{(mx+ny-xy)-(mi+nj-ij)}(v-1)^{mi+nj-ij} \]

观察到将常数和只跟 \(i\) 有关的部分提到前面去后,后面剩下来的是个 \(\sum_{j=0}^{y}\binom{y}{j}A^{y-j}B^j\) 的形式,为二项式展开,可以快速幂 \(O(\log y)\) 求。

所以求一次 L 字形是 \(O(x\log y)\) 的。总时间复杂度 \(O(n\log n)\)。

#include<bits/stdc++.h>

#define N 100010
#define ll long long

using namespace std;

namespace modular
{
	const int mod=998244353;
	inline int add(int x,int y){return x+y>=mod?x+y-mod:x+y;}
	inline int dec(int x,int y){return x-y<0?x-y+mod:x-y;}
	inline int mul(int x,int y){return 1ll*x*y%mod;}
	inline void Add(int &x,int y){x=x+y>=mod?x+y-mod:x+y;}
	inline void Mul(int &x,int y){x=1ll*x*y%mod;}
}using namespace modular;

inline int poww(int a,ll b)
{
	int ans=1;
	while(b)
	{
		if(b&1) ans=mul(ans,a);
		a=mul(a,a);
		b>>=1;
	}
	return ans;
}

inline 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<<1)+(x<<3)+(ch^'0');
		ch=getchar();
	}
	return x*f;
}

int n,m,t,a[N],b[N];
int fac[N],ifac[N];

int C(int n,int m)
{
	return mul(mul(fac[n],ifac[m]),ifac[n-m]);
}

int main()
{
	n=read(),m=read(),t=max(n,m);
	fac[0]=1;
	for(int i=1;i<=t;i++) fac[i]=mul(fac[i-1],i);
	ifac[t]=poww(fac[t],mod-2);
	for(int i=t;i>=1;i--) ifac[i-1]=mul(ifac[i],i);
	for(int i=1;i<=n;i++) a[i]=read();
	for(int i=1;i<=m;i++) b[i]=read();
	sort(a+1,a+n+1),reverse(a+1,a+n+1);
	sort(b+1,b+m+1),reverse(b+1,b+m+1);
	int ans=1;
	while(n&&m)
	{
		int v=min(a[n],b[m]);
		int x=0,y=0;
		while(x<n&&a[n-x]==v) x++;
		while(y<m&&b[m-y]==v) y++;
		v%=mod;
		int sum=0;
		const int div=mul(dec(v,1),poww(v,mod-2));
		for(int i=0;i<=x;i++)
		{
			int tmp=mul((i&1)?mod-1:1,mul(C(x,i),poww(div,1ll*m*i)));
			Mul(tmp,poww(dec(1,poww(div,n-i)),y));
			Add(sum,tmp);
		}
		Mul(ans,mul(sum,poww(v,1ll*m*x+1ll*n*y-1ll*x*y)));
		n-=x,m-=y;
	}
	if(n||m)
	{
		puts("0");
		return 0;
	}
	printf("%d\n",ans);
	return 0;
}

标签:ch,Orz,int,容斥,CFgym102870J,ans,inline,mod
From: https://www.cnblogs.com/ez-lcw/p/16837415.html

相关文章

  • 【AGC005D】_K Perm Counting(容斥,二分图,计数dp)
    首先正面做不太好做,考虑容斥。设\(f(m)\)表示排列中至少有\(m\)处\(|P_i-i|=k\)的方案数。那么答案就是\(\sum\limits_{i=0}^n(-1)^if(i)\)。原题可以看成一个二......
  • 调色盘 (3维k点最小最远点对-容斥原理)
    调色盘(pastele)题目描述Albus得到了一份礼物:来自Polaris的水彩油墨包。Polaris的油墨包里面有N个颜色,现在Albus打算选其中的K种来作一幅风景画。既然是风景画,颜色就不能太......
  • 容斥定理
    用来求解集合计数问题,求解多个集合并的数目,转化为求交,结果等于加上奇数集合交的数目,将去偶数集合交的数目经典题目求错位排列,反求不是错位排列的条件,在交集合的时候可以合......
  • luogu P5339 [TJOI2019]唱、跳、rap和篮球 (容斥,指数型母函数,NTT)
    https://www.luogu.com.cn/problem/P5339要求不含1234的方案,反过来求含至少一个1234的方案。钦定存在i个位置有1234,位置的方案是Cn-3i,i.其他n-4i个位置的方案是多重集......
  • Luogu2167 Bill的挑战 - 容斥 - dp -
    题目链接:https://www.luogu.com.cn/problem/P2167题解:摘录一段描述容斥题目的话:本题中,关于容斥系数,可以先感性理解一下,严格证明可以用即除了自身,自身的超集都计算......
  • AcWing算法提高课 容斥原理
    容斥原理的复杂度是2^n,一般n不会很大形如:  由于容斥原理一共有2^n中选法,可以用二进制枚举,1表示选择某个条件。然后将偶数个1的状态加起来,奇数个1的状态减去例题:ht......
  • 算法学习笔记(数学):数论分块 + 容斥原理 + 莫比乌斯函数
    算法学习笔记(数学):数论分块+容斥原理+莫比乌斯函数这篇文章主要是要讲一道题目(链接在这里)以及梳理一下数论分块,莫比乌斯函数,容斥原理这些知识。先介绍下知识点吧qwq......
  • 容斥与反演技巧(一)
    二项式反演我们直接上式子好了一般有两种形式,第一种是\[f(n)=\sum_{i=0}^n\binom{n}{i}g(i)\iffg(n)=\sum_{i=0}^n(-1)^{n-i}\binom{n}{i}f(i)\]第二种是\[f(n)=\sum......
  • 容斥
    NC15079 大水题模板题#include<bits/stdc++.h>#defineLLlonglongusingnamespacestd;LLa[5]={0,2,5,11,13};intmain(){LLn;while(scanf("%lld"......
  • 【瞎口胡】Min-Max 容斥
    Min-Max容斥是通过容斥集合的最小值来得到集合最大值的一种方法。结合期望的线性性,我们得以计算几个随机变量最值的期望,它往往不和这些变量期望的最值相等。Min-Max容斥......