1 条题解

  • 0
    @ 2025-11-26 21:09:42

    Written by @Yue_chen

    题意:

    给定一个长度为 n 的数组。

    你可以选择任意 k 个数(每个数只能用一次)相乘后放回原数组。

    求原数组最大值。

    思路:

    排序后。

    如果最大的 k 个数中有 0 直接数组目前数组最大的数。

    否则,输出最大的 k 个数之积。

    时间复杂度O(nlog2n)

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    
    using i64 = long long;
    constexpr int M=998244353;
    
    void solve() {
        int n, k; cin>>n>>k;
        
        vector<i64> a(n+1);
        for(int i=1; i<=n; ++i){
            cin>>a[i];
        }
        sort(a.begin()+1, a.end());
        
        i64 ans = 1;
        for(int i=n; i>n-k; --i) {
            if(a[i] == 0) {
                cout<<a[n]%M<<"\n";
                return ;
            }
            ans = ans * a[i]%M;
        }
        cout<<ans<<"\n";
    }
    
    signed main(void) {
        ios::sync_with_stdio(false); cin.tie(nullptr);
        
        int t=1; //cin>>t;
        while (t--) solve();
        return 0;
    }
    
    • 1

    信息

    ID
    122
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    246
    已通过
    27
    上传者