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(结论题)的主要内容,如果未能解决你的问题,请参考以下文章