20pts求调
查看原帖
20pts求调
484222
HugeSB楼主2025/6/24 11:13

rt,只能过子任务1

#include <bits/stdc++.h>
using namespace std;
int zhengjishu[100006],a;
int zhengoushu[100006],b;
int fujishu[100006],c;
int fuoushu[100006],d;
int n; 
int ans; 
int q;
bool cmp(int a, int b)
{
    if (a > b)
    {
        return true;
    }
    else
    {
        return false;
    }
}
void chushihua()
{
    stable_sort(zhengjishu + 1, zhengjishu + a + 1, cmp);
    stable_sort(zhengoushu + 1, zhengoushu + b + 1, cmp);
    stable_sort(fujishu + 1, fujishu + c + 1);
    stable_sort(fuoushu + 1, fuoushu + d + 1);
}
int main()
{
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        int k;
        cin >> k;
        if (k % 2 == 0)
        {
            if (k > 0)
            {
                zhengoushu[++b] = k;
            }
            else
            {
                fuoushu[++d] = k;
            }
        }
        else
        {
            if (k > 0)
            {
                zhengjishu[++a] = k;
            }
            else
            {
                fujishu[++c] = k;
            }
        }
    }
    int a1 = 1; int b1 = 1; int c1 = 1; int d1 = 1;
    chushihua();
    for (int i = 1; i <= n; i++)
    {
        //cout << endl << ans << endl;
        if (i % 2 == 1)
        {
            if (b1 <= b || c1 <= c)
            {
                if (zhengoushu[b1] > abs(fujishu[c1])&&b>=b1)
                {
                    //cout << zhengoushu[b1]<<endl;
                    ans += q+zhengoushu[b1];
                    q += zhengoushu[b1];
                    b1++;
                }
                else
                {
                    //cout << fujishu[c1] << endl;
                    ans += q + fujishu[c1];
                    q += abs(fujishu[c1]);
                    c1++;
                }
            }
            else
            {
                if (zhengjishu[a] < abs(fuoushu[d])&&a>=a1)
                {
                    //cout << zhengjishu[a] << endl;
                    ans += q + zhengjishu[a];
                    q -= zhengjishu[a];
                    a--;
                }
                else
                {
                    //cout << fuoushu[d] << endl;
                    ans += q + fuoushu[d];
                    q -= abs(fuoushu[d]);
                    d--;
                }
            }
        }
        else
        {
            if (a1 <= a || d1 <= d)
            {
                if (zhengjishu[a1] > abs(fuoushu[d1]) && a >= a1)
                {
                    //cout << zhengjishu[a1]<<endl;
                    ans += q + zhengjishu[a1];
                    q += zhengjishu[a1];
                    a1++;
                }
                else
                {
                    //cout << fuoushu[d1]<<endl;
                    ans += q + fuoushu[d1];
                    q += abs(fuoushu[d1]);
                    d1++;
                }
            }
            else
            {
                if (zhengoushu[b] < abs(fujishu[c]) && b >= b1)
                {
                    //cout << zhengoushu[b]<<endl;
                    ans += q + zhengoushu[b];
                    q -= zhengoushu[b];
                    b--;
                }
                else
                {
                    //cout << fujishu[c]<<endl;
                    ans += q + fujishu[c];
                    q -= abs(fujishu[c]);
                    c--;
                }
            }
        }
    }
    cout << ans;
}

/*for (int i = 1; i <= a; i++)
    {
        cout << zhengjishu[i] << " ";
    }cout << endl;
for (int i = 1; i <= b; i++)
{
        cout << zhengoushu[i] << " ";
}   cout << endl;
for (int i = 1; i <= c; i++)
{
    cout << fujishu[i] << " ";
}cout << endl;
for (int i = 1; i <= d; i++)
{
    cout << fuoushu[i] << " ";
}cout << endl;
*/
2025/6/24 11:13
加载中...