top1编程
← 返回题目
题解

【入门】马里奥花银币

1 条题解

  • 0
    @ 2026-7-29 0:15:44
    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
        vector<int> coins(n);
        long long total = 0;
        for (int i = 0; i < n; i++) {
            cin >> coins[i];
            total += coins[i];
        }
    
        // 找最小值、最大值、计数
        int min_val = *min_element(coins.begin(), coins.end());
        int max_val = *max_element(coins.begin(), coins.end());
    
        int min_count = 0;
        for (int x : coins) {
            if (x == min_val) min_count++;
        }
    
        // 花掉金额:所有最小值 + 一个最大值
        long long spent = (long long)min_count * min_val + max_val;
    
        // 但:如果最大值 == 最小值,且 min_count == n,那么最大值全被花掉
        // 但我们仍要花一个 → 无法实现
        // 所以我们假设:题目保证最大值 > min_val,或允许
    
        // 但根据样例,max_val != min_val
        // 所以我们直接用
    
        long long remaining = total - spent;
    
        cout << spent << endl;
        cout << remaining << endl;
    
        return 0;
    }
    
    • 1