Codeforces Educational Round 165 Div.2

​​卡了

杂交场,啥都有,、扫描线、贪心博弈论

CF1969C Minimizing the Sum

题目信息

Problem - C - Codeforces

给你一个长度为 的整数数组

你可以执行以下操作:选择数组中的一个元素,并用其邻近元素的值替换它。

例如,如果是 ,你可以通过一次操作得到数组 中的一个,但不能得到

你的任务是计算数组的最小总和,如果你能执行上述操作最多 ​​ 次的话。

输入

第一行包含一个整数 )。( ) - 测试用例的数量。

每个测试用例的第一行包含两个整数 ; )。

第二行包含 个整数 ( )。

输入的附加限制:所有测试用例中 的总和不超过

题目解析

注意数据范围。

区间。一开始的时候想的是直接暴力每次找到当前下降率最大的然后修改,但是指出了我自己样例的一个错误:

1
3 2
1 2 500

这个结果应该是3,全部换成1.而如果次暴力更换,得到的结果应当是。因为贪心的换会忽视先换成1 1 500的更优情况。

到这里就不难想到应当是优先考虑去用目标区间最小的值传染。故考虑区间.

表示以为结尾操作了次所能得到的最小值。显然有

维护即可。区间核心在于只考虑区间的最后一部分可能造成的影响。建议回忆

CF1969D Shop Game

题目信息

Problem - D - Codeforces

爱丽丝和鲍勃正在商店里玩游戏。商店里有 件商品;每件商品有两个参数: (爱丽丝的物品价格)和 (鲍勃的物品价格)。

爱丽丝希望选择一个商品子集(可能是空)并购买它们。之后,Bob 会执行以下操作:

  • 如果爱丽丝购买的物品少于 ,鲍勃可以免费拿走所有物品;
  • 否则,他将免费拿走爱丽丝购买的 件(由鲍勃选择是哪一个 件),至于其他所选物品,鲍勃将从爱丽丝处购买,并为 -th 件支付 的费用。

爱丽丝的利润等于 ,其中 是鲍勃从爱丽丝处购买的物品集, 是爱丽丝从商店购买的物品集。换句话说,爱丽丝的利润就是鲍勃支付给她的金额和她购买商品所花费的金额之间的差额。

爱丽丝希望自己的利润最大化,而鲍勃希望爱丽丝的利润最小化。您的任务是计算在爱丽丝和鲍勃都采取最优行动的情况下爱丽丝的利润。

题目解析

优先从后手角度开始思考。

对于已经进的货,想要她赚的更少,必然是优先挑大的零元购。剩下的付钱。

那么想要反制,就必须保证自己会被零元购的商品的进货价更小,剩下的部分的出售价还要尽可能的大。

所以将所有商店内的商品按照售货价第一关键字从大到小,进货价第二关键字从小到大排序,然后先拿出来件迫使零元购,再买件能盈利的商品迫使​付钱回本。显然,盈利的时候要能盈利的全都进货。

计算时,以盈利商品的界限进行划分讨论。对于界限是要让付费的选择区间;是迫使零元购的区间。在维护零元购的物品集合的时候,如果集合大小大于​,我们从集合中删除进货价最高的那一个并用下一个进行替换。

CF1969E Unique Array

题目信息

Problem - E - Codeforces

给你一个长度为 的整数数组 的子数组是其连续的子序列之一(即数组 中的某个整数 ,使得 )。如果有一个整数在子数组中恰好出现一次,那么这个子数组就是唯一的。

您可以执行以下任意次数(可能为零)的操作:从数组中选择一个元素,然后用任意整数替换它。

你的任务是计算上述操作的最少次数,以使数组 ​ 的所有子数组都是唯一的。

输入

第一行包含一个整数 ( ) - 测试用例数。

每个测试用例的第一行包含一个整数 ( )。

第二行包含 个整数 ( )。

输入的附加限制:所有测试用例中 的总和不超过

题目解析

几乎原题,只是最后的计算细节变了变。

显然换数要换在序列里从来都没出现过的。

扫描线乱搞,当扫到第目标层(高度)没有盖满点,总结果加一:修改为任意未在序列中出现过的数。

上述修改能保证必然将加入到扫描线集合中,保证能将对应层盖满且是最优解。

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2024 栾博越
  • 访问人数: | 浏览次数:

      请我喝杯咖啡吧~

      支付宝
      微信