题解 | #小美的游戏#

小美的游戏

https://ac.nowcoder.com/acm/problem/259727

首先说一种错误的做法,直接将所有元素放到堆里面,然后每次让最大的两个元素出堆,然后放入,这样会导致非常大,不能够这样做,并且由于需要比大小,所以中间过程不能够取模。

正解的话可以举例子看一下:

 6 = 1 * 6 = 2 * 3
20 = 1 * 20 = 2 * 10 = 4 * 5

可以发现总是这样形式的和最大,详细证明题解区已经有了,可以去看看。

那么我们就可以给他排序,对于次操作,其实就是最大的个数的乘积,加上。 最后再加上剩余的元素即可。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define close ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
const int MOD = 1e9 + 7;
signed main() {
    close;
    int n,k;
    cin >> n >> k;
    vector<int> a(n);
    for(int i = 0; i < n; i++) {
        cin >> a[i];
    }
    sort(a.begin(),a.end());
    int res = k;
    int mul = 1;
    k += 1;
    //[n - 1,n  - k]
    for(int i = n - 1;i >= n - k; i--){
        mul *= a[i];
        mul %= MOD;
    }
    res += mul;
    res %= MOD;
    for(int i = n - k - 1; i >= 0; i--){
        res += a[i];
        res %= MOD;
    }
    cout << res << endl;
    
    return 0;
}
全部评论

相关推荐

合适才能收到offe...:招聘上写这些态度傲慢的就别继续招呼了,你会发现hr和面试官挺神的,本来求职艰难就可能影响一些心态了,你去这种公司面试的话,整个心态会炸的。
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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