题解:P10709 [NOISG2024 Prelim] Party

· · 题解

我们先将数组进行排序,因为如果从小到大排序到后面其实挺麻烦的,所以我是从大到小排序。因为两个人不能坐相邻的位置,我们要求出要坐几个人,一共有 n 把椅子,要坐的人数就为 (n+1)/2 的值向下取整。接下来就将答案加从 a_1 一直加到 a_n。但是注意如果其中有负数,那么说明剩下的数都是负数,如果加上就得不偿失了,所以就停止循环。最后输出答案。

#include<bits/stdc++.h>
using namespace std;
int a[210000];
long long sum;
int cmp(int x,int y)
{
    return x>y;
}
int main() {
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    sort(a+1,a+n+1,cmp);
    n=(n+1)/2;
    for(int i=1;i<=n;i++)
    {
        if(a[i]<=0)break;
        sum+=a[i]; 
     } 

    cout<<sum;
   return 0;
}