CF976E Well played!

Posted 王宜鸣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF976E Well played!相关的知识,希望对你有一定的参考价值。

思路:

参考了http://codeforces.com/blog/entry/59195

可以证明在最优解中所有的第一种操作都是施加同一个物种上的。那么首先按照hp - dmg对所有物种降序排序,贪心选择前b个进行第二种(赋值)操作。然后枚举所有物种,选择一个进行第一种操作,在所有情况中取最大值。

在选择一个物种进行第一种操作的时候,不要按照(hp << a) - dmg贪心,反例:

3 1 2

20 10

5 1

25 25

实现:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 typedef pair<ll, ll> pll;
 5 
 6 const int MAXN = 200005;
 7 const ll INF = 0x3f3f3f3f3f3f3f3f;
 8 
 9 vector<pll> v;
10 
11 bool cmp(pll & x, pll & y)
12 {
13     return x.first - x.second > y.first - y.second;
14 }
15 
16 int main()
17 {
18     int n, a, b;
19     while (cin >> n >> a >> b)
20     {    
21         v.resize(n);
22         ll ans = 0;
23         for (int i = 0; i < n; i++) 
24         {
25             cin >> v[i].first >> v[i].second;
26             ans += v[i].second;
27         }
28         if (!b) { cout << ans << endl; continue; }
29         sort(v.begin(), v.end(), cmp);
30         int i = 0;
31         for ( ; i < v.size(); i++)
32         {
33             if (v[i].first <= v[i].second) break;
34         }
35         int pos = min(n, min(i, b));
36         ans = 0;
37         for (int i = 0; i < pos; i++) ans += v[i].first;
38         for (int i = pos; i < n; i++) ans += v[i].second;
39         ll maxn = ans;
40         for (int i = 0; i < n; i++)
41         {
42             if (i < pos)
43             {
44                 ll tmp = ans - v[i].first + (v[i].first << a);
45                 if (tmp > maxn) maxn = tmp;
46             }
47             else
48             {
49                 ll tmp = ans - v[i].second + (v[i].first << a);
50                 if (pos && pos == b) tmp += - v[pos - 1].first + v[pos - 1].second;
51                 if (tmp > maxn) maxn = tmp;
52             }
53         }
54         cout << maxn << endl;
55     }
56     return 0;
57 }

 

以上是关于CF976E Well played!的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces976E Well played!

maven web项目的web.xml报错The markup in the document following the root element must be well-formed.(代码片段

从片段调用 Google Play 游戏服务

CF235B Let‘s Play Osu!

Codeforces 976E

[Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)][C. Playing Piano](代码片段