在线编程介绍
阿里云开发者社区在线编程产品,针对广大开发者学习、实践、面试、应聘、考试认证等打造的免费在线刷题神器。题库来自笔试模拟题、算法大赛模拟题等,界面整洁明了,操作简单,为用户营造专心答题的学习环境。点击链接开始体验:https://developer.aliyun.com/coding
本文为大家介绍其中的 第114题:Tairitsu and Dynamic Objects 的题目解析,具体如下:
题目描述
题目等级:容易
知识点:贪心
查看题目:Tairitsu and Dynamic Objects
Hikari 和 Tairitsu 面前有n个物品,这些物品编号为1,2,...,n。
每个物品有两个属性。第 i 个物品的两个属性分别为ai, bi 。
初始 n 个物品均可被选取。Hikari 与 Tairitsu 会轮流选取当前可选取的物品中的一个,并把它拿走,这个物品之后不可被选取。第一轮 Hikari 先选取。
设 Hikari 选取的物品编号的集合为H ,Tairitsu 选取的物品编号的集合为T 。
所有物品均被选取完之后,Hikari 得分为∑ai(i∈H) ;而 Tairitsu 得分为 ∑bi(i∈T) 。
Hikari 和 Tairitsu 都希望自己的得分比对方大,你需要求出双方都使用最优策略的情况下,双方各会获得多少分。
注意:若对于某个人来说,剩余的物品中有多个对两人分数大小关系影响相同的物品,那么他会优先选择bi 最大的那个。
输入一个正整数n,表示物品个数。
再输入两个数组a和b,分别表示n个物品的A属性和n个物品的B属性。(保证1<=n<=2*1e5, 0<=ai,bi<=1e9)
输出一行,两个整数分别表示Hikari和Tairitsu的得分。
示例1
输入:
5
[1,2,3,4,5]
[5,4,3,2,1]
输出:
[9,6]
解题思路:
根据题意,分析得知,Hikari 和 Tairitsu 每次会优先选择 ai+bi 的值最大的物品,当物品的 ai+bi 值相等时,选择bi大的那个。
因此,可以对物品进行排序,排序有两个依据,优先依据 ai+bi 的值,然后是bi的值。降序排好后,Hikari 和 Tairitsu 依次按顺序选择物品,Hikari先选择,选择好以后,分别计算Hikari 和 Tairitsu 的分数即可。
时间复杂度:O(n)
空间复杂度:O(1)
看完之后是不是有了想法了呢,快来练练手吧>>查看题目:Tairitsu and Dynamic Objects