2025牛客多校第七场(持续更新)
F
题意:给出一个数组a,每次可以选择一个数字v,使得所有ai:=|ai-v|。
求不超过n次操作下,sigma(1<=i<j<=n)|ai-aj|的最小值
思路:
对于两个奇偶性相同的数字,可以令v等于这两个数的平均值,并进行一次操作。发现这可以使两个数相等
因此你可以进行 n/2 次操作,使数组的值两两相同
对于n/2对两两相同的数字,再考虑每次令v:= 数组中最小的数字 ,并进行n/2次操作
这样可以使原本为偶数的数最终变为1,奇数的数变为0,或者反过来
对于n是奇数的情况,发现可以通过刻意操作把剩下一个的那个数变为数组中大小相对适中的数,保证之后操作次数<=n
由于|1-1|=0,|1-0|=1,所以答案 = 奇数个数 x 偶数个数
void solve(){
int n;cin>>n;
int c1=0,c2=0;
rep(i,1,n){
int x;cin>>x;
if(x&1)c1++;else c2++;
}
c1%=mod;
c2%=mod;
cout<<(c1*c2%mod)<<endl;
}

浙公网安备 33010602011771号