CF1444B Divide and Sum(结论题)
Posted issue是fw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1444B Divide and Sum(结论题)相关的知识,希望对你有一定的参考价值。
把长度 2 ∗ n 2*n 2∗n的 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=1∑n∣pi−qi∣
求对于任意的 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=1∑nmax(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(结论题)的主要内容,如果未能解决你的问题,请参考以下文章