CF1444B Divide and Sum(结论题)

Posted issue是fw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1444B Divide and Sum(结论题)相关的知识,希望对你有一定的参考价值。

LINK

把长度 2 ∗ n 2*n 2n a a a数组分成两个长度 n n n的数组 p p p q q q

p p p递增排序,对 q q q递减排序,计算 f ( p , q ) = ∑ i = 1 n ∣ p i − q i ∣ f(p,q)=\\sum\\limits_{i=1}^n |p_i-q_i| f(p,q)=i=1npiqi

求对于任意的 p , q p,q p,q,他们的 f ( p , q ) f(p,q) f(p,q)之和。


没啥好说的,结论题,想不出又不会猜.

结论:无论那种划分得到的 p , q p,q p,q, f ( p , q ) f(p,q) f(p,q)的值都是较大的那 n n n个数减较小的那 n n n个数

因为 f ( p , q ) = ∑ i = 1 n max ⁡ ( p i , q i ) −   m i n ( p i , q i ) f(p,q)=\\sum\\limits_{i=1}^n \\max(p_i,q_i)-\\ min(p_i,q_i) f(p,q)=i=1nmax(pi,qi) min(pi,qi)

设较大的那 n n n个数集合为 A A A,较小的那 n n n个数集合为 B B B

我们断言 p i , q i p_i,q_i pi,qi分别来自于 A , B A,B A,B

考虑反证法,若 p i , q i p_i,q_i pi,qi同时属于 A A A(随便做的假设,你也可以假设来自B)

那么必然存在另一对 p j , q j p_j,q_j pj,qj同时属于 B B B

这样 p p p数组和 q q q数组的单调性是一样的,而题目中明确说了 p p p递增, q q q递减

所以 f ( p , q ) f(p,q) f(p,q)是定值,分割数组 a a a的方案显然是 ( 2 n n ) \\binom {2n}{n} (n2n)

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 998244353;
const int maxn = 1e6+10;
int n,a[maxn],fac[maxn];
int quick(int x,int n)
{
	int ans = 1;
	for( ; n ; n>>=1,x=x*x%mod )
		if( n&1 )	ans = ans*x%mod;
	return ans;
}
int C(int n,int m)
{
	if( n<m )	return 0ll;
	return fac[n]*quick( fac[m]*fac[n-m]%mod,mod-2 )%mod;
}
signed main()
{
	fac[0] = 1;
	for(int i=1;i<=1000000;i++)	fac[i] = fac[i-1]*i%mod;
	cin >> n;
	for(int i=1;i<=2*n;i++)	cin >> a[i];
	sort( a+1,a+1+2*n );
	int ans = 0;
	for(int i=1;i<=n;i++)	ans = ( ans-a[i]+a[i+n] )%mod;
	cout << ( ans*C( 2*n,n )%mod+mod )%mod << endl;
}

以上是关于CF1444B Divide and Sum(结论题)的主要内容,如果未能解决你的问题,请参考以下文章

1305 Pairwise Sum and Divide

1305 Pairwise Sum and Divide

1305 Pairwise Sum and Divide(数学 ,规律)

1305 Pairwise Sum and Divide

Pairwise Sum and Divide

51nod 1305 Pairwise Sum and Divide(数学分析题)