题解 | #最小连通代价#

最小连通代价

https://www.nowcoder.com/practice/479e71a248584e44a63f2d631661b699

最外层分四种情况,内层再加一种全奇全偶的情况;
当a,b都大于零时再分为a大和b大两种;
一共十种情况

void solve() {
    ll n, a, b; cin >> n >> a >> b;
    ll even=0,odd=0;
    for (ll i = 0; i < n; i++) {
        ll x; cin >> x;
        if (x & 1)odd++;
        else even++;
    }
    ll sum = odd + even,ans;
    if (a <= 0 && b <= 0) {
        ans = factorial(odd - 1) * a + factorial(even - 1) * a + odd * even * b;
    }
    else if (a <= 0 && b > 0) {
        ans = factorial(odd - 1) * a + factorial(even - 1) * a + b;
        if (odd == 0 || even == 0)ans-=b;
    }
    else if (a > 0 && b <= 0) {
        ans = odd * even * b;
        if (odd == 0 || even == 0)ans = a * (sum - 1);
    }
    else {
        if (a >= b) {
            ans = b * (sum - 1);
            if (odd == 0 || even == 0)ans = a * (sum - 1);
        }
        else {
            ans = a * (sum - 2) + b;
            if (odd == 0 || even == 0)ans = a * (sum - 1);
        }
    }
    cout << ans << endl;
}

alt

全部评论
小狗阔耐!!!
点赞 回复 分享
发布于 2025-11-23 23:20 辽宁

相关推荐

评论
4
收藏
分享

创作者周榜

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