[R63B] 升级包
- 难度 入门
- 时限 1s
- 空限 512m
- 贪心排序
数据规模:,。
思路
购买 个升级包要额外丢弃 个未购买的包,共消耗 个,所以 。力量值全为正数,购买越多越好,于是 取最大值 ;要总和最大,选力量值最大的 个包即可。
把所有力量值降序排序,对前 个求和。
复杂度:时间 ,空间 。
仓颉实现
import std.env.*
import std.convert.*
import std.sort.*
main(): Int64 {
let reader = getStdIn()
let n = Int64.parse(reader.readln().getOrThrow())
let s = reader.readln().getOrThrow().split(" ", removeEmpty: true).map({ p => Int64.parse(p) })
sort(s, descending: true)
var ans: Int64 = 0
for (i in 0..(n / 3)) {
ans = ans + s[i]
}
println(ans)
return 0
}
要点:
- 全局函数
sort(a, descending: true)直接降序排序原数组,取前 个求和即可。 - 力量值可达 , 个求和约 ,需要用
Int64。