考场上写了两种解法,结束后发现最后交的是错误代码...
提交记录
思路
分析
当 时,会有 名员工被辞退,需要计算以下内容:
当 时,没有员工被开除,需要计算以下内容:
如果纯暴力的话复杂度是 所以用快速幂优化下,就变成了
代码模板
快速幂板子(带mod版本):
long long binpow(long long a, long long b, long long mod) { a %= mod; long long res = 1; while (b > 0) { if (b & 1) res = res * a % mod; a = a * a % mod; b >>= 1; } return res; }
代码
#include <bits/stdc++.h> using namespace std; const int mod = 1e9 + 7; bool cmp(int a, int b) { return a > b; } long long binpow(long long a, long long b) { a %= mod; long long res = 1; while (b > 0) { if (b & 1) res = res * a % mod; a = a * a % mod; b >>= 1; } return res; } int main() { long long n, m, x, y, a[100005], ans = 0; cin >> n >> m >> x >> y; for (int i = 0; i < n; i++) { cin >> a[i]; } sort(a, a + n, cmp); for (int j = 0; j < x; j++) { a[j] *= binpow(3, m); } for (int j = x; j < x + y; j++) { a[j] *= binpow(2, m); } for (int i = 0; i < x + y; i++) { ans += a[i]; ans %= mod; } if (m < 2) { for (int i = x + y; i < n; i++) { ans += a[i]; ans %= mod; } } cout << ans << endl; return 0; }