求助luogu月赛第二题。
  • 板块学术版
  • 楼主VectorChange
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/8/22 14:02
  • 上次更新2023/11/4 09:30:24
查看原帖
求助luogu月赛第二题。
470194
VectorChange楼主2021/8/22 14:02
#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;
}

注释行是调试,可忽略。

从月赛改到现在,实在找不出错误了,求大神帮帮改一下代码吧┭┮﹏┭┮。

2021/8/22 14:02
加载中...