题解 | 灵异背包?

灵异背包?

https://www.nowcoder.com/practice/812bcedbbe244c9b86e459a244af5ddf

#include <stdio.h>
#include <stdlib.h>

int compare(const void* a, const void* b) {
    if (*(long long*)a > *(long long*)b)
        return 1;
    if (*(long long*)a < * (long long*)b)
        return -1;
    return 0;
}

int main(void) {
    long long n;
    scanf("%lld", &n);

    long long a[200005];
    long long sum = 0;
    for (int i = 0; i < n; i++) {
        scanf("%lld", &a[i]);
        sum += a[i];
    }

    if (n == 1) {
        if (a[0] % 2 != 0) {
            printf("0\n");
        } else {
            printf("%lld\n", a[0]);
        }
        return 0;
    }

    qsort(a, n, sizeof(long long), compare);

    long long min_odd = 0;
    for (int i = 0; i < n; i++) {
        if (a[i] % 2 != 0) {
            min_odd = a[i];
            break;
        }
    }
    if (sum % 2 == 0)
        printf("%lld\n", sum);
    else if (sum % 2 != 0) { //原始总和是奇数,减最小奇数
        sum -= min_odd;
        printf("%lld\n", sum);
    }
    return 0;
}

全部评论

相关推荐

03-04 14:31
门头沟学院 Java
点赞 评论 收藏
分享
牛客51274894...:照片认真的吗,找个专门拍证件照的几十块钱整端正点吧,要不就别加照片
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务