16暑期补HackRank计划

已完成1题



1.(有趣)fighting-pits(Difficult80):https://www.hackerrank.com/contests/101hack39/challenges/fighting-pits

题意:有k个队博弈,每个队有一些各自有权值的人,两个队交锋,轮流攻击对方,某队派出一个带有val的某人,将消灭掉对面任意val个人。

现在有1e5个操作

1 x p :表示在p队添加一个攻击力x的人。保证了每次添加的x不小于这个队原有队员的最大攻击力。

2 x y :询问x 和 y队博弈,x先手,哪个队获胜。

思路:O(n ^ 1.5):这个题比较有意思,赛时想出一个玄学的解法,没想到就是标解。显然x和y博弈,要攻击的那一方必定派出最大攻击力val的某个人消灭掉val大个对方的人。

所以每次询问x和y,暴力当然是O(n)的,现在需要把每个队中相同攻击力的人合并,统计出个数cnti,这样每次用两个队最大攻击力的人们互相PK,可以O(1)判出彼此消灭了多少人,存活了多少人。这样的确优化了一点,其实复杂度已经优化到sqrt(n)了,可以证明出最多只需要比较sqrt(n)次就能判出哪个队最后获胜。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值