ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

「AGC 053」B - Taking the middle

2021-04-11 10:01:33  阅读:503  来源: 互联网

标签:两端 ... 后手 中间 记为 Taking AGC middle 最小化


传送门

需要最小化后手的得分,容易发现后手在 \(n - i + 1...n + i\) 中至少选了 \(i\) 个。

这是因为第 \(i\) 此时还剩下 \(2*(n - i) + 1\) 个,然后就算两端 \(n - i\) 个位置全都在,中间还会有一个也显然会选它。

是否满足该条件就可以了?考虑构造方案:

将后手选的记为 \(1\),先手选的记为 \(-1\),然后 \(s_i = \sum_{j\in [n -i + 1, n + i]} a_j\)。

满足 \(\forall s_i \ge 0\), \(s_n\) = 0。

从中间往两端进行操作:

如果最中间的两个不同,则选择将它们消去, \(s_i +1 - 1 = s_i\),不变。

否则恰好为 \((1,1)\),于是可以将最靠内的一对 \((-1,-1)\) 给抵消了,因为其间均为 \((-1,1)\) 或 \((1, 1)\),消去 \((1,1)\) 后 \(s\) 不会变负。

那么问题就是需要在 \(n - i + 1...n + i\) 中至少选 \(i\) 个,最小化总权值。

然后从中间开始,每次将最内的两个加入小根堆,在将堆顶元素取出即可。

代码

标签:两端,...,后手,中间,记为,Taking,AGC,middle,最小化
来源: https://www.cnblogs.com/iqx37f/p/14643009.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有