漲薪【貪心】【快速冪】
>Link
牛客1020普及T3
>Description
一共有n個數,第i個數的值為
a
i
a_i
ai。
可以進行m輪操作:選擇其中x個數乘3,其中y個數乘2,對於每個
a
i
a_i
ai在每一輪不可以被選擇兩次。如果一個數連續兩輪沒被選擇,就直接淘汰
求最終剩下的數的總和最大為多少,答案模1e9+7
>解題思路
貪心+快速冪
將a陣列從大到小排個序,只選擇前x+y個數,後面的直接淘汰(m=1的情況除外),並且乘3操作永遠只選前x個數,選擇的數中剩下的就永遠都乘2
>程式碼
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define int long long
#define N 100005
using namespace std;
const int p = 1e9 + 7;
int n, m, x, y, a[N], ans, sum[N];
bool cmp (int aa, int bb) {return aa > bb;}
int power (int aa, int bb)
{
int ret = 1;
for (; bb; bb >>= 1, aa = aa * aa % p)
if (bb & 1) ret = ret * aa % p;
return ret;
}
signed main()
{
scanf ("%lld%lld%lld%lld", &n, &m, &x, &y);
for (int i = 1; i <= n; i++) scanf ("%lld", &a[i]);
sort (a + 1, a + 1 + n, cmp);
for (int i = 1; i <= n; i++) sum[i] = (sum[i - 1] + a[i]) % p;
ans = sum[x] * power (3, m) % p;
ans = (ans + (sum[x + y] - sum[x]) * power (2, m) % p) % p;
if (m == 1) ans = (ans + sum[n] - sum[x + y]) % p;
printf ("%lld", ans);
return 0;
}
相關文章
- 貪心
- 反悔貪心
- Supermarket(貪心)
- 快速冪
- 快速乘/快速冪
- 【牛客_2020.10.20】漲薪
- 貪心例題
- 貪心+搜尋
- 快速冪模板
- HDU 5821 Ball(貪心)
- 貪心模式記錄模式
- 反悔貪心雜題
- 貪心演算法演算法
- 貪心、構造合集
- 矩陣快速冪矩陣
- 越獄(快速冪)
- 貪心-刪數問題
- 貪心-*活動選擇
- 24/03/20 貪心(一)
- HDU 6047 Maximum Sequence (貪心)
- HDU 5813 Elegant Construction (貪心)Struct
- Leetcode 貪心:差值調整LeetCode
- Least Cost Bracket Sequence(貪心)ASTRacket
- 刪數問題(貪心)
- 「貪心」做題記錄
- [反悔貪心] Add One 2
- 貪心 做題筆記筆記
- 7.5 - 貪心篇完結
- 貪心演算法Dijkstra演算法
- 牛客 tokitsukaze and Soldier 貪心
- 快速冪的運用
- 快速冪的寫法
- 學一下貪心演算法-學一下貪心演算法演算法
- 貪心演算法(貪婪演算法,greedy algorithm)演算法Go
- 牛牛偶像養成記(貪心)
- 貪心(入門簡單題)
- HDU 6299-Balanced Sequence(貪心)
- 【貪心】POJ 3617:Best Cow Line