#include<bits/stdc++.h>
using namespace std;
int n,odd[1000005],even[1000005],s1,s2,z1,z2,r1,r2;
long long ans=0;
int cmp(int a,int b){
return abs(a)>abs(b);
}
int abs(int a){
if(a<0) return -a;
else return a;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) {
int a;
scanf("%d",&a);
if(abs(a)%2){
if(a<0) even[++s2]=a;
else odd[++s1]=a;
}else {
if(a<0) odd[++s1]=a;
else even[++s2]=a;
}
ans+=a;
}
sort(odd+1,odd+1+s1,cmp);
sort(even+1,even+1+s2,cmp);
for(int i=1;i<=n;i++){
cout<<z1<<" "<<z2<<endl;
if(z2==s2) {
if(i%2){
ans-=odd[s1-r1]*(n-i);
r1++;
}else {
ans+=abs(odd[++z1])*(n-i);
}
continue;
}
if(z1==s1) {
if(i%2) {
ans+=abs(even[++z2])*(n-i);
}else {
ans-=even[s2-r2]*(n-i);
r2++;
}
continue;
}
if(i%2) ans+=abs(even[++z2])*(n-i);
else ans+=abs(odd[++z1])*(n-i);
}
printf("%d",ans);
return 0;
}
注释行是调试,可忽略。
从月赛改到现在,实在找不出错误了,求大神帮帮改一下代码吧┭┮﹏┭┮。